学校で DTMF デコーダーを作成する課題がありますが、何をどのように行う必要があるかを理解するのに苦労しています。まず、畳み込みを使用して信号のエネルギーを計算する必要があります。ウィンドウの長さと入力信号の絶対値を利用してこれを行います。
SmoothEnergyOfInputSignal = conv(abs(X), ones(1,winlen)/winlen); %moving average
現在、適切なウィンドウの長さを取得する方法がわかりません。平滑化されたエネルギーは、信号をセグメント化するために使用され、後で基底ベクトル (?) を使用して信号内のさまざまな周波数を決定します。dtmf パルスは、少なくとも 40ms の無音によって少なくとも 40ms 離れています。サンプリング周波数は 8kHz で、信号の長さは約 17601 サンプルです。fs*0.04 を実行すると、ウィンドウの長さが得られると考えました。0.04=40ms ですが、平滑化されたエネルギー信号がシフトされるため、セグメントは入力信号の最大サンプルを超えます。
[Sound, fs] = audioread('dtmf_all.wav');
winlen = fs*0.04
E = conv(abs(Sound),ones(1, winlen)/winlen)
簡単に言えば、「正しい」ウィンドウの長さをどのように計算するのでしょうか?
前もって感謝します。
編集: 手順が更新されました。畳み込みを使用することは想定されていません。filter() を使用することになっています