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

2021-03-31 08:56:28 字數 4088 閱讀 5444

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

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

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

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

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

1209 hz 1336 hz 1477 hz 1633 hz

abcdef

697 hz1

23a

ghijklmno

770 hz456b

prstuvwxy

852 hz789c

oper

941 hz*0#

d

由於在

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

packet switch

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

circuit switch

)以及ip

網的不穩定的特性,

dtmf

在voip

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

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

該方法是用

sip信令的

info

方法來明文定義來代表

dtmf

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

sip控制信令和**傳輸(

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

dtmf

訊號和**包不同步。

簡單舉個例子,在

voice mail

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

dtmf

server

是在接受到該

dtmf

dtmf

訊號是通過

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

rtprtp

包先到,而該

dtmf

訊號的info

訊息延遲,導致

server

info

訊息。該方法是將

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

專門對此有定義。

當程式需要產生乙個

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內其他時間為靜音,以便區別連續的兩個按鍵訊號。

在輸入訊號中檢測

dtmf

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

dtmf

訊號頻譜的存在。

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

goertzel

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

goertzel演算法

dtmf

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

dft及其快速演算法

fft,而在實現

dtmf

解碼時,採用

goertzel

演算法要比

fft更快。通過

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

dtmf

訊號只用關心其

8個行頻

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

dtmf

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

goertzel

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

[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中應用的研究彙總

1.簡介 雙音多頻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...