1

私は工学部の学生であり、信号処理に関する学術的な問題を解決する必要があります。

基本的に、wav形式のDTMF信号を考えると、エンコードした数列を特定する必要があります。Matlab環境で離散フーリエ変換分析を使用して、wavファイルを読み取り、プロセスを通じてダイヤルトーンの番号を識別するスクリプトを作成する必要があります。

Matlab環境にあまり慣れていないという意味で問題があり、離散フーリエ解析全体も非常に新しいので、少し迷っています。

誰かが共有できるいくつかの良いヒントや指針を持っていますか?

4

2 に答える 2

3

DFT(またはFFT)は、DTMF検出には過剰です。低音と高音を検出するには、2x4のゲルツェルフィルターが必要です。各Goertzelフィルターの出力は、ノイズの検出を防ぐためにローパスフィルター処理する必要がありますが、それ以外は非常に簡単です。

DFT / FFTの使用が必須である場合、一般的なアプローチは次のようになります。

  • 入力サンプルのブロックごとに
    • 適切なウィンドウを適用します(例:ハニング)
    • DFTを実行する
    • 各DFTビンの大きさを計算します(re * re + im * im)
    • 2 x4DTMFトーンに対応する8つのビンのそれぞれでマグニチュードを測定します
    • グループ内の他のトーンよりも大幅に大きい1つの高グループトーンと1つの低グループトーンがある場合、DTMFトーンペアが検出されています
于 2011-05-21T15:07:32.827 に答える
0

実際のデータの大きさDFTは、長さNのN/2直交ゲルツェルフィルターとほぼ同等です。FFTは単なる高速DFTアルゴリズムです。

仕様の一部であるためにFFTを使用する必要がある場合は、必要なDTMFトーンをキャプチャするために必要なGoertzelフィルターの周波数に対応するFFTビンに注意し、複雑な結果を大きさに変換します。

fft_bin_frequency = fft_bin_number * sample_rate / fft_length ;

健全性は、疑わしいトーンをFFTマグニチュードエネルギーの合計に対してチェックします。比率が「小さい」場合は、DTMFトーンではなくfftビンのノイズである可能性があります。

于 2011-05-22T00:26:21.730 に答える