Poor sound quality with ISDN trunk

Discussion in 'General' started by raytwigg, Feb 17, 2009.

  1. raytwigg

    Joined:
    Feb 14, 2009
    Messages:
    8
    Likes Received:
    0
    Hi,

    I have built a test PBX with Elastix 1.4RC using an Openvox B100P ISDN card and an Openvox A400P card with 1 FXO and 2 FXS modules. For testing I have been using ZoiPer softphones and analogue handsets on the A400P.

    My biggest problem has been with very poor sound quality when making calls on the ISDN trunk. The remote party has been able to hear very well but the caller attached to the Elastix system has had very choppy sound quality.

    Initially it did not matter which extension was used, all were equally bad. Then I found out how to put the analogue card into UK mode and then the quality on the hardphones was fine. Then I tried connecting the ZoiPer softphones with SIP extensions rather than IAX2; they now work fine too.

    The sound quality on the analogue trunk and between extensions has always been OK so I have wasted a lot of time thinking that the fault lay with the ISDN card. I hope this may be of some help to others even though I don't fully understand it myself yet.

    So, my questions:

    How can I get softphones to work using IAX2? (Should I just give up and use SIP?)

    Why does this only affect calls from/to the ISDN circuit?

    Cheers,
    Ray.
     
  2. ramoncio

    Joined:
    May 12, 2010
    Messages:
    1,663
    Likes Received:
    0
    If I were you I would use Elastix 1.3 for production.
    So the problem is not echo related? You hear clicks?
    Post your misdn config files and maybe we can find the problem.
     
  3. raytwigg

    Joined:
    Feb 14, 2009
    Messages:
    8
    Likes Received:
    0
    Hi Ramoncio,

    I am only just starting to learn about Elastix, I figured that by the time I am ready to roll out a production PBX version 1.4 will be the production standard;)

    The problem is not echo. There are no clicks. It is just very distorted and broken; like a bad voice synthesiser. The problem is only one way; the person out on the PSTN network hears me just fine.

    I would stress that there is no problem with SIP extensions and FXS ports in UK mode. The problem only happens with IAX2 extensions or FXS ports when they are (wrongly) in the default FCC mode.

    I have attached my /etc/mISDN.conf and /etc/asterisk/misdn.conf. They are as per the default installation except for the debug level and [misdnchannels] context at the end. There is rather a lot of stuff to follow so I will sign off and say thanks here.

    Cheers,
    Ray.


    /etc/mISDN.conf

    <?xml version="1.0"?>

    <mISDNconf>
    <module poll="128" debug="0" timer="no">hfcmulti</module>
    <module debug="0" options="0">mISDN_dsp</module>
    <devnode user="asterisk" group="asterisk" mode="660">mISDN</devnode>
    <card type="hfcpci">
    <port mode="te" link="ptmp">1</port>
    </card>
    </mISDNconf>


    /etc/asterisk/misdn.conf

    ;
    ; chan_misdn sample config
    ;

    ; general section:
    ;
    ; for debugging and general setup, things that are not bound to port groups
    ;

    [general]
    ;
    ; Sets the Path to the misdn-init.conf (for nt_ptp mode checking)
    ;
    misdn_init=/etc/misdn-init.conf

    ; set debugging flag:
    ; 0 - No Debug
    ; 1 - mISDN Messages and * - Messages, and * - State changes
    ; 2 - Messages + Message specific Informations (e.g. bearer capability)
    ; 3 - very Verbose, the above + lots of Driver specific infos
    ; 4 - even more Verbose than 3
    ;
    ; default value: 0
    ;
    debug=4



    ; set debugging file and flags for mISDNuser (NT-Stack)
    ;
    ; flags can be or'ed with the following values:
    ;
    ; DBGM_NET 0x00000001
    ; DBGM_MSG 0x00000002
    ; DBGM_FSM 0x00000004
    ; DBGM_TEI 0x00000010
    ; DBGM_L2 0x00000020
    ; DBGM_L3 0x00000040
    ; DBGM_L3DATA 0x00000080
    ; DBGM_BC 0x00000100
    ; DBGM_TONE 0x00000200
    ; DBGM_BCDATA 0x00000400
    ; DBGM_MAN 0x00001000
    ; DBGM_APPL 0x00002000
    ; DBGM_ISDN 0x00004000
    ; DBGM_SOCK 0x00010000
    ; DBGM_CONN 0x00020000
    ; DBGM_CDATA 0x00040000
    ; DBGM_DDATA 0x00080000
    ; DBGM_SOUND 0x00100000
    ; DBGM_SDATA 0x00200000
    ; DBGM_TOPLEVEL 0x40000000
    ; DBGM_ALL 0xffffffff
    ;

    ntdebugflags=0
    ntdebugfile=/var/log/misdn-nt.log


    ; some pbx systems do cut the L1 for some milliseconds, to avoid
    ; dropping running calls, we can set this flag to yes and tell
    ; mISDNuser not to drop the calls on L2_RELEASE
    ntkeepcalls=no

    ; the big trace
    ;
    ; default value: [not set]
    ;
    ;tracefile=/var/log/asterisk/misdn.log


    ; set to yes if you want mISDN_dsp to bridge the calls in HW
    ;
    ; default value: yes
    ;
    bridging=no


    ;
    ; watches the L1s of every port. If one l1 is down it tries to
    ; get it up. The timeout is given in seconds. with 0 as value it
    ; does not watch the l1 at all
    ;
    ; default value: 0
    ;
    ; this option is only read at loading time of chan_misdn,
    ; which means you need to unload and load chan_misdn to change the
    ; value, an asterisk restart should do the trick
    ;
    l1watcher_timeout=0

    ; stops dialtone after getting first digit on nt Port
    ;
    ; default value: yes
    ;
    stop_tone_after_first_digit=yes

    ; whether to append overlapdialed Digits to Extension or not
    ;
    ; default value: yes
    ;
    append_digits2exten=yes

    ;;; CRYPTION STUFF

    ; Whether to look for dynamic crypting attempt
    ;
    ; default value: no
    ;
    dynamic_crypt=no

    ; crypt_prefix, what is used for crypting Protocol
    ;
    ; default value: [not set]
    ;
    crypt_prefix=**

    ; Keys for cryption, you reference them in the dialplan
    ; later also in dynamic encr.
    ;
    ; default value: [not set]
    ;
    crypt_keys=test,muh

    ; users sections:
    ;
    ; name your sections as you which but not "general" !
    ; the sections are Groups, you can dial out in extensions.conf
    ; with Dial(mISDN/g:extern/101) where extern is a section name,
    ; chan_misdn tries every port in this section to find a
    ; new free channel
    ;

    ; The default section is not a group section, it just contains config elements
    ; which are inherited by group sections.
    ;

    [default]

    ; define your default context here
    ;
    ; default value: default
    ;
    context=misdn

    ; language
    ;
    ; default value: en
    ;
    language=en


    ;
    ; sets the musiconhold class
    ;
    musicclass=default

    ;
    ; Either if we should produce DTMF Tones ourselves
    ;
    senddtmf=yes

    ;
    ; If we should generate Ringing for chan_sip and others
    ;
    far_alerting=no


    ;
    ; Here you can list which bearer capabilities should be allowed:
    ; all - allow any bearer capability
    ; speech - allow speech
    ; 3_1khz - allow 3.1KHz audio
    ; digital_unrestricted - allow unrestricted digital
    ; digital_restricted - allow restricted digital
    ; video - allow video
    ;
    ; Example:
    ; allowed_bearers=speech,3_1khz
    ;
    allowed_bearers=all

    ; Prefixes for national and international, those are put before the
    ; oad if an according dialplan is set by the other end.
    ;
    ; default values: nationalprefix : 0
    ; internationalprefix : 00
    ;
    nationalprefix=0
    internationalprefix=00

    ; set rx/tx gains between -8 and 8 to change the RX/TX Gain
    ;
    ; default values: rxgain: 0
    ; txgain: 0
    ;
    rxgain=0
    txgain=0

    ; some telcos especially in NL seem to need this set to yes, also in
    ; switzerland this seems to be important
    ;
    ; default value: no
    ;
    te_choose_channel=no



    ;
    ; This option defines, if chan_misdn should check the L1 on a PMP
    ; before making a group call on it. The L1 may go down for PMP Ports
    ; so we might need this.
    ; But be aware! a broken or plugged off cable might be used for a group call
    ; as well, since chan_misdn has no chance to distinguish if the L1 is down
    ; because of a lost Link or because the Provider shut it down...
    ;
    ; default: no
    ;
    pmp_l1_check=no


    ;
    ; in PMP this option defines which cause should be sent out to
    ; the 3. caller. chan_misdn does not support callwaiting on TE
    ; PMP side. This allows to modify the RELEASE_COMPLETE cause
    ; at least.
    ;
    reject_cause=16


    ;
    ; Send Setup_Acknowledge on incoming calls anyway (instead of PROCEEDING),
    ; this requests additional Infos, so we can waitfordigits
    ; without much issues. This works only for PTP Ports
    ;
    ; default value: no
    ;
    need_more_infos=no


    ;
    ; set this to yes if you want to disconnect calls when a timeout occurs
    ; for example during the overlapdial phase
    ;
    nttimeout=no

    ; set the method to use for channel selection:
    ; standard - always choose the first free channel with the lowest number
    ; round_robin - use the round robin algorithm to select a channel. use this
    ; if you want to balance your load.
    ;
    ; default value: standard
    ;
    method=standard


    ; specify if chan_misdn should collect digits before going into the
    ; dialplan, you can choose yes=4 Seconds, no, or specify the amount
    ; of seconds you need;
    ;
    overlapdial=yes

    ;
    ; dialplan means Type Of Number in ISDN Terms (for outgoing calls)
    ;
    ; there are different types of the dialplan:
    ;
    ; dialplan -> outgoing Number
    ; localdialplan -> callerid
    ; cpndialplan -> connected party number
    ;
    ; dialplan options:
    ;
    ; 0 - unknown
    ; 1 - International
    ; 2 - National
    ; 4 - Subscriber
    ;
    ; This setting is used for outgoing calls
    ;
    ; default value: 0
    ;
    dialplan=0
    localdialplan=0
    cpndialplan=0



    ;
    ; turn this to no if you don't mind correct handling of Progress Indicators
    ;
    early_bconnect=yes


    ;
    ; turn this on if you like to send Tone Indications to a Incoming
    ; isdn channel on a TE Port. Rarely used, only if the Telco allows
    ; you to send indications by yourself, normally the Telco sends the
    ; indications to the remote party.
    ;
    ; default: no
    ;
    incoming_early_audio=no

    ; uncomment the following to get into s extension at extension conf
    ; there you can use DigitTimeout if you can't or don't want to use
    ; isdn overlap dial.
    ; note: This will jump into the s exten for every exten!
    ;
    ; default value: no
    ;
    ;always_immediate=no

    ;
    ; set this to yes if you want to generate your own dialtone
    ; with always_immediate=yes, else chan_misdn generates the dialtone
    ;
    ; default value: no
    ;
    nodialtone=no


    ; uncomment the following if you want callers which called exactly the
    ; base number (so no extension is set) jump to the s extension.
    ; if the user dials something more it jumps to the correct extension
    ; instead
    ;
    ; default value: no
    ;
    ;immediate=no

    ; uncomment the following to have hold and retrieve support
    ;
    ; default value: no
    ;
    ;hold_allowed=yes

    ; Pickup and Callgroup
    ;
    ; default values: not set = 0
    ; range: 0-63
    ;
    ;callgroup=1
    ;pickupgroup=1


    ;
    ; these are the exact isdn screening and presentation indicators
    ; if -1 is given for both values the presentation indicators are used
    ; from asterisks SetCallerPres application.
    ; s=0, p=0 -> callerid presented not screened
    ; s=1, p=1 -> callerid presented but screened (the remote end does not see it!)
    ;
    ; default values s=-1, p=-1
    presentation=-1
    screen=-1

    ; This enables echo cancellation with the given number of taps.
    ; Be aware: Move this setting only to outgoing portgroups!
    ; A value of zero turns echo cancellation off.
    ;
    ; possible values are: 0,32,64,128,256,yes(=128),no(=0)
    ;
    ; default value: no
    ;
    echocancel=yes

    ; Set this to no to disable echotraining. You can enter a number > 10
    ; the value is a multiple of 0.125 ms.
    ;
    ; default value: no
    ; yes = 2000
    ; no = 0
    ;
    echotraining=no

    ;
    ; chan_misdns jitterbuffer, default 4000
    ;
    jitterbuffer=4000

    ;
    ; change this threshold to enable dejitter functionality
    ;
    jitterbuffer_upper_threshold=0


    ;
    ; change this to yes, if you want to bridge a mISDN data channel to
    ; another channel type or to an application.
    ;
    hdlc=no


    ;
    ; defines the maximum amount of incoming calls per port for
    ; this group. Calls which exceed the maximum will be marked with
    ; the channel variable MAX_OVERFLOW. It will contain the amount of
    ; overflowed calls
    ;
    max_incoming=-1

    ;
    ; defines the maximum amount of outgoing calls per port for this group
    ; exceeding calls will be rejected
    ;
    max_outgoing=-1

    [misdnchannels]
    ports=1
    msns=*
    context=from-pstn
    echocancel=yes
     

Share This Page