ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

goertzel

2 次 Goertzel アルゴリズムを使用した離散フーリエ変換

構文

dft_data = goertzel(data)
dft_data = goertzel(data,freq_indices)
dft_data = goertzel(data,freq_indices,dim)

説明

dft_data = goertzel(data) では、2 次 Goertzel アルゴリズムを使用して、入力データ data の離散フーリエ変換 (DFT) が返されます。data が行列の場合、goertzel では各列の DFT が個別に計算されます。

dft_data = goertzel(data,freq_indices) では、周波数インデックス freq_indices の DFT が返されます。

dft_data = goertzel(data,freq_indices,dim) では、行列 data の DFT が次元 dim に沿って計算されます。

すべて折りたたむ

電話のキーパッドの「1」ボタンを押して生成されるトーンの周波数を推定します。

番号「1」を押すと、周波数 697 と 1209 Hz をもつトーンが生成されます。サンプル レート 8 kHz のトーンをもつ 205 のサンプルを生成します。

Fs = 8000;
N = 205;
lo = sin(2*pi*697*(0:N-1)/Fs);
hi = sin(2*pi*1209*(0:N-1)/Fs);
data = lo + hi;

Goertzel アルゴリズムを使用してトーンの DFT を計算します。0 ~ 9 の番号の生成に使用される周波数に対応するインデックスを選択します。

f = [697 770 852 941 1209 1336 1477];
freq_indices = round(f/Fs*N) + 1;
dft_data = goertzel(data,freq_indices);

DFT 振幅をプロットします。

stem(f,abs(dft_data))

ax = gca;
ax.XTick = f;
xlabel('Frequency (Hz)')
title('DFT Magnitude')

1.24 kHz、1.26 kHz および 10 kHz の周波数成分をもつ、ノイズを含む余弦を生成します。サンプル レートを 32 kHz に指定します。再現可能な結果が必要な場合は、乱数発生器をリセットします。

rng default

Fs = 32e3;
t = 0:1/Fs:2.96;
x = cos(2*pi*t*10e3) + cos(2*pi*t*1.24e3) + cos(2*pi*t*1.26e3) ...
    + randn(size(t));

周波数ベクトルを生成します。Goertzel アルゴリズムを使用して DFT を計算します。周波数の範囲を 1.2 ~ 1.3 kHz に制限します。

N = (length(x)+1)/2;
f = (Fs/2)/N*(0:N-1);
indxs = find(f>1.2e3 & f<1.3e3);
X = goertzel(x,indxs);

平均二乗スペクトルをデシベル単位でプロットします。

plot(f(indxs)/1e3,mag2db(abs(X)/length(X)))

title('Mean Squared Spectrum')
xlabel('Frequency (kHz)')
ylabel('Power (dB)')
grid

代替方法

次の方法で DFT を計算することもできます。

  • 関数 fft: いくつかの周波数のみで DFT が必要な場合は、Goertzel アルゴリズムよりも非効率的です。

  • 関数 czt: チャープ Z 変換。関数 czt は、円または螺旋の等高線上の入力の Z 変換を計算し、特殊ケースとして DFT を含みます。

詳細

すべて折りたたむ

アルゴリズム

Goertzel アルゴリズムでは、DFT が再帰的差分方程式として実装されます。この差分方程式を作成するには、インパルス応答 h(n)=WNknu(n) をもつ N 点の入力 x(n) のたたみ込みとして DFT を表します。ここで、WNkn=ej2πk/N であり、u(n) は単位ステップのシーケンスです。

インパルス応答の Z 変換は次のようになります。

H(z)=1WNkz112cos(2πk/N)z1+z2.

直接型 II は次のように実装されます。

参考文献

Proakis, John G., and Dimitris G. Manolakis. Digital Signal Processing: Principles, Algorithms, and Applications. 3rd Edition. Upper Saddle River, NJ: Prentice Hall, 1996, pp. 480–481.

Burrus, C. Sidney, and Thomas W. Parks. DFT/FFT and Convolution Algorithms: Theory and Implementation. New York: John Wiley & Sons, 1985.

R2006a より前に導入

この情報は役に立ちましたか?