雙音多頻dtmf(dual tone multi-frequency)信令,逐漸在全世界範圍內使用在按鍵式**機上,因其提供更高的撥號速率,迅速取代了傳統轉盤式**機使用的撥號脈衝信令。近年來dtmf也應用在互動式控制中,諸如語言選單、語言郵件、**銀行和atm終端等。
由於dtmf在傳統通訊領域中的廣泛使用,所以在voip中,dtmf仍是發揮著重要的作用。
乙個dtmf訊號由兩個頻率的音訊訊號疊加構成。這兩個音訊訊號的頻率來自兩組預分配的頻率組:行頻組或列頻組。每一對這樣的音訊訊號唯一表示乙個數字或符號。產生dtmf訊號,就是利用兩個不同頻率的正
弦波疊加以後形成的波形,解碼時則採用改進的goertzel演算法,從頻域搜尋兩個正弦波的存在。
下表描述了每個dtmf訊號的頻率。
1209 hz 1336 hz 1477 hz 1633 hz
abcdef
697 hz123a
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...