このページは前リリースの情報です。該当の英語のページはこのリリースで削除されています。
この例は、Goertzel 関数を使用して DFT ベースの DTMF 検出アルゴリズムを実装する方法を示します。
デュアルトーン マルチ周波数 (DTMF) 信号は、音声通信制御の基本であり、番号にダイヤルして交換局を設置する現代の電話技術において世界中で使われています。ボイス メールや、電子メール、テレフォン バンキングのようなシステムでも使われます。
DTMF 信号は、周波数が互いに排他的な 2 つのグループから取得された 2 つの正弦波 (トーン) の和で構成されます。このような周波数は、受信機によって高調波が他の DTMF 周波数として間違って検出されるのを防ぐために使用されています。トーンの各ペアは、低群 (697Hz、770Hz、852Hz、941Hz) の 1 周波数と高群 (1209Hz、1336Hz、1477Hz) の 1 周波数で構成され、固有のシンボルを表します。電話パッドのプッシュボタンに割り当てられている周波数は以下のとおりです。
電話パッドの各ボタンの DTMF 信号を生成してプロットします。各信号のサンプルレートは 8 KHz で持続時間は 100 ミリ秒です。
symbol = {'1','2','3','4','5','6','7','8','9','*','0','#'}; [tones, Fs, f, lfg, hfg] = helperDTMFToneGenerator(symbol, false); helperDFTEstimationPlot1(tones, symbol, Fs, f);
例として、電話番号 508 647 7000 のトーンを再生します。シンボル "0" は 11 番目のトーンに対応します。
for i = [5 11 8 6 4 7 7 11 11 11] p = audioplayer(tones(:,i),Fs,16); play(p) pause(0.5) end
ITU 規格で定義されている DTMF 信号の最小持続時間は 40 ms です。したがって、推定と検出に使用できるサンプル数は最大で 0.04 x 8000 = 320 サンプルです。このような短い信号に含まれている周波数を推定するには、DTMF 復号器が必要です。
この推定の問題に対する共通の対処方法は、7 つの基本トーンと非常に似ている離散時間フーリエ変換 (DFT) のサンプルを計算することです。DFT ベースの方法では、周波数領域で 205 サンプルを使用すると、元の周波数と DFT を推定したポイント間の誤差が最小になります。
Nt = 205;
original_f = [lfg(:);hfg(:)] % Original frequencies
original_f = 7×1
697
770
852
941
1209
1336
1477
k = round(original_f/Fs*Nt); % Indices of the DFT estim_f = round(k*Fs/Nt) % Frequencies at which the DFT is estimated
estim_f = 7×1
702
780
859
937
1210
1327
1483
元の周波数と DFT を推定したポイント間の誤差を最小にするため、トーンを打ち切り、以降の処理には 205 サンプルまたは 25.6 ms のみを維持します。
tones = tones(1:205,:);
ここで、高速フーリエ変換 (FFT) アルゴリズムを使用して、DFT を計算できますが、この状況では DFT を推定するポイント数が少ないことから Goertzel アルゴリズムがよく使用されます。この場合、Goertzel アルゴリズムは FFT アルゴリズムよりも効果的です。
for toneChoice = 1:12 % Select tone tone = tones(:,toneChoice); % Estimate DFT using Goertzel ydft(:,toneChoice) = goertzel(tone,k+1); % Goertzel uses 1-based indexing end
各トーンの Goertzel の DFT 振幅の推定値を電話パッドに対応するグリッドにプロットします。
helperDFTEstimationPlot2(ydft,symbol,f, estim_f);
デジタル トーンは、上記で推定した 7 つの周波数に存在するエネルギーを測定して検出します。各シンボルは、低群周波数および高群周波数の最大エネルギー成分を使用して分けることができます。
この例では次の補助関数が使用されています。