對DTMF在VOIP中應用的研究彙總

2021-04-20 01:03:46 字數 4473 閱讀 3437

1.簡介

雙音多頻dtmf(dual tone multi-frequency)信令,逐漸在全世界範圍內使用在按鍵式**機上,因其提供更高的撥號速率,迅速取代了傳統轉盤式**機使用的撥號脈衝信令。近年來dtmf也應用在互動式控制中,諸如語言選單、語言郵件、**銀行和atm終端等。

由於dtmf在傳統通訊領域中的廣泛使用,所以在voip中,dtmf仍是發揮著重要的作用。

乙個dtmf訊號由兩個頻率的音訊訊號疊加構成。這兩個音訊訊號的頻率來自兩組預分配的頻率組:行頻組或列頻組。每一對這樣的音訊訊號唯一表示乙個數字或符號。產生dtmf訊號,就是利用兩個不同頻率的正

弦波疊加以後形成的波形,解碼時則採用改進的goertzel演算法,從頻域搜尋兩個正弦波的存在。

下表描述了每個dtmf訊號的頻率。

1209 hz    1336 hz    1477 hz    1633 hz

697 hz123

a

770 hz45

6b

852 hz78

9c

941 hz*0

#d

2. dtmf

在voip

中的解決方案

由於在ip網中的通訊傳輸是採用包交換(

packet switch

)而不是傳統領域中的線路交換(

circuit switch

)以及ip

網的不穩定的特性,

dtmf

在voip

中應用的解決方案和傳統有所不同,並且暫時還未統一,有多種解決方案。

下面簡單介紹現有的各種方案。

3.用

sip信令的

info

方法攜帶

dtmf

訊號。

該方法是用

sip信令的

info

方法來明文定義來代表

dtmf

訊號。該種方法還在研究討論當中,有專家認為其並不適用,主要缺陷是因為

sip控制信令和**傳輸(

rtp)是分開傳輸,很容易造成

dtmf

訊號和**包不同步。

簡單舉個例子,在

voice mail

應用中,使用者根據提示音輸入乙個

dtmf

server

是在接受到該

dtmf

dtmf

訊號是通過

sip信令來傳輸的,而**流是通過

rtprtp

包先到,而該

dtmf

訊號的info

訊息延遲,導致

server

info

訊息。

4.在rtp

**傳輸中攜帶

dtmf

訊號。

該方法是將

dtmf

訊號和**流一樣,用

rtp包來傳輸,因而沒有

dtmf

訊號和**流不同步的問題,使用

h323

信令的voip

就是採用該種方法,相對來說比較成熟。

而其中又分

in band

和out of band

(rfc2833

)兩種。 l

in band dtmf

in band dtmf

是指直接將

dtmf

的音訊數碼訊號不經任何處理直接打成

rtp包在

ip網中傳輸。其中可能和使用者的語音**流混合(

mix)在一起傳輸。程式要獲知哪個包有

dtmf

訊號,是什麼

dtmf

訊號,必須實時檢查每個

rtp包裡面的**流資料,分析它的

頻域。

lout of band dtmf(rfc 2833)

out of band dtmf

是dtmf

訊號用專門的

rtp包進行標識,在

rtp包的頭域中就可得知該包是

dtmf

包,並且知道是什麼

dtmf

訊號。rfc2833

專門對此有定義。

5.動態生成

dtmf

音訊訊號

當程式需要產生乙個

dtmf

音訊數碼訊號時,當然可以讀取已經錄製好的檔案。

在這裡介紹如何利用演算法程式動態產生單個

dtmf

音訊數碼訊號。

前面介紹過

dtmf

訊號的原理是兩個不同頻率的正弦波疊加。

簡單的生成正弦波的公式:sample=sin(n*2*pi*f/samplerate)

n:取樣序數,由

0開始遞增 f

:正弦波的頻率

samplerate

:取樣頻率

sample

:序數n

時的得出的取樣值

如果要生成乙個取樣頻率是

8000hz

,取樣位是

8bit

的dtmf

訊號,則公式:

sample(n) = 128 + 63*sin(n*2*pi*f1/8000) + 63*sin(n*2*pi*f2/8000)

f1和

f2分別是該

dtmf

訊號的兩個正弦波頻率 其中

128 = 256/2

63 = 128 /2 – 1

同樣地,如果要生成

16bit

的dtmf

訊號,則公式:

sample(n) = 32768 + 16383*sin(n*2*pi*f1/8000) + 16383*sin(n*2*pi*f2/8000)

計算

dtmf

訊號是乙個耗費資源的過程,你可以通過不同途徑去優化你的**,最簡單的是預先計算好

2*pi*f1

和2*pi*f2

的值,減少

cpu的計算時間。

關於dtmf

訊號的時間間隔,

ccitt對dtmf訊號規定的指標是,傳送/接收率為每秒10個數字,即每個數字100ms。代表數字的音訊訊號必須持續至少45ms,但不超過55ms。100ms內其他時間為靜音,以便區別連續的兩個按鍵訊號。

6.根據

rtp包中的音訊訊號檢測

dtmf

訊號

在輸入訊號中檢測

dtmf

訊號,並將其轉換為實際的數字,這一解碼過程本質是連續的過程,需要在輸入的資料訊號流中連續地搜尋

dtmf

訊號頻譜的存在。

整個檢測過程分兩步:首先採用

goertzel

演算法在輸入訊號中提取頻譜資訊;接著作檢測結果的有效性檢查。

7. goertzel演算法

dtmf

解碼即是在輸入訊號中搜尋出有效的行頻和列頻。計算數碼訊號的頻譜可以採用

dft及其快速演算法

fft,而在實現

dtmf

解碼時,採用

goertzel

演算法要比

fft更快。通過

fft可以計算得到訊號所有譜線,了解訊號整個頻域資訊,而對於

dtmf

訊號只用關心其

8個行頻

/列頻及其二次諧波資訊即可(二次諧波的資訊用於將

dtmf

訊號與聲音頻號區別開)。此時

goertzel

演算法能更加快速的在輸入訊號中提取頻譜資訊。

8.參考

[1] 「generating dtmf tones using soundcard」tomi engdahl

[2] 「

雙音多頻dtmf技術在dsp系統中的實現

」 管慶徐勝

[3] 「

rtp payload for dtmf digits, telephony tones and telephony signals

」rfc2833

h. schulzrinne, s. petrack

[4] 「

」rfc1889

h. schulzrinne,, s. casner,r. frederick, and v. jacobson,

對DTMF在VOIP中應用的研究彙總

雙音多頻dtmf dual tone multi frequency 信令,逐漸在全世界範圍內使用在按鍵式 機上,因其提供更高的撥號速率,迅速取代了傳統轉盤式 機使用的撥號脈衝信令。近年來dtmf也應用在互動式控制中,諸如語言選單 語言郵件 銀行和atm終端等。由於dtmf在傳統通訊領域中的廣泛使用...

DTMF 在FreeSWITCH中的傳輸方式

在sip 通話中,傳輸按鍵資訊的方式很多,但還是統一稱作dtmf。其中在freeswitch中支援三種dtmf的傳輸方式。inband 這種方式和傳統的dtmf相似,不過是把雙音多頻內容用音訊編碼方式放到rtp資料裡進行傳輸。freeswitch預設不支援這種方式,因為這種方式需要檢測rtp包中的內...

雜湊表 在VOIP使用者資訊儲存中的應用

標頭檔案 ifndef hash h define hash h define ok 1 define error 0 define hash size 256 typedef struct hashnode 採用雙向鍊錶儲存 thashnode thashnode vsipuserlocation...