主要内容

goertzel写到

2次歌策尔アルゴリズムを使用した離散フ,リエ変換

説明

dft= goertzel写到(数据では,2次歌策尔アルゴリズムを使用して,入力配列数据の離散フ,リエ変換(dft)が返されます。数据が複数次元配列である場合,goertzel写到は,サaaplズが1より大きい最初の配列次元に沿って動作します。

dft= goertzel写到(数据findxでは,findxで指定された周波数esc escンデックスのDFTが返されます。

dft= goertzel写到(数据findx昏暗的では,dftが次元昏暗的に沿って計算されます。次元を入力し,findxの既定値を使用するには,2番目の引数を空[]として指定します。

すべて折りたたむ

電話のキパッドの“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);数据= lo + hi;

歌策尔アルゴリズムを使用してト,ンの離散フ,リエ変換(DFT)を計算します。0 ~ 9の番号の生成に使用される周波数に対応するescンデックスを選択します。

F = [697 770 852 941 1209 1336 1477];freq_indexes = round(f/Fs*N) + 1;Dft_data = goertzel(数据,freq_indices);

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

干(f,abs(dft_data)) ax = gca;斧子。XTick = f; xlabel(的频率(赫兹)) ylabel (“DFT级”

图中包含一个轴对象。axis对象包含一个stem类型的对象。

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

rng默认的Fs = 32e3;t = 0:1/Fs:2.96;x = cos(2 *π* t * 10 e3) + cos(2 *π* t * 1.24 e3) + cos(2 *π* t * 1.26 e3)...+ randn(大小(t));

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

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

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

情节(f (indxs) / 1 e3, mag2db (abs (X) /长度(X)))标题(“均方谱”)包含(的频率(赫兹)) ylabel (“权力(dB)”网格)

图中包含一个轴对象。标题为Mean Squared Spectrum的axis对象包含一个类型为line的对象。

3.2千赫で10秒間サンプリングされ,ホワイトガウスノイズに組み込まれた2チャネルの信号を生成します。信号の最初のチャネルは124 Hzの正弦波です。2番目のチャネルは周波数が 126 Hz の複素指数です。時間軸が 3 番目の次元に沿うように信号を 3 次元配列に形状変更します。

Fs = 3.2e3;T = 0:1/fs:10-1/fs;x = [cos(2 *π* t * 124); exp (2 j *π* t * 126)] + randn(2、长度(t)) / 100;X = permute(X,[3 1 2]);大小(x)
ans =1×31 2 32000

Goertzelアルゴリズムを使用して,信号の離散フ,リエ変換を計算します。周波数範囲を120 ~ 130 Hzに制限します。

N =(长度(x)+1)/2;f = (fs/2)/N*(0:N-1);Indxs = find(f>=120 & f<=130);X = goertzel(X,indxs,3);

dB単位表記で離散フ,リエ変換の振幅をプロットします。

情节(f (indxs) mag2db (abs(挤压(X))))包含(的频率(赫兹)) ylabel (DFT幅度(dB)网格)

图中包含一个轴对象。axis对象包含2个line类型的对象。

入力引数

すべて折りたたむ

入力配列。ベクトル、行列、または N 次元配列として指定します。

例:罪(2 *π* (0:255)/ 4)は,正弦波を行ベクトルとして指定します。

例:罪(2 *π*[0.1,0.3]*(0:39))”は,2チャネルの正弦波を指定します。

デ,タ型:|
複素数のサポ,ト:あり

周波数@ @ンデックス。ベクトルとして指定します。この电子邮箱ンデックスは,f年代/ Nの整数倍または非整数倍に対応できます。ここで,f年代はサンプルレ,ト,nは信号長です。

デ,タ型:|

動作する対象の次元。正の整数スカラとして指定します。

デ,タ型:|

出力引数

すべて折りたたむ

離散フ,リエ変換。ベクトル、行列、または N 次元配列として返されます。

アルゴリズム

Goertzelアルゴリズムは,次の▪▪▪▪ンパルス応答をも▪▪N点の入力x (n)n = 0,1,…,n - 1の畳み込みとして離散フ,リエ変換X (k)を実装します。

h k n e j 2 π k e j 2 π k n / N u n e j 2 π k W N k n u n

ここで,単位ステップのシ,ケンスu (n)は,N≥0の場合は1であり,それ以外の場合は0となります。Kは整数である必要はありません。周波数F = kf年代/ Nのとき(f年代はサンプルレ,ト),変換は次の値をも,ます。

X k y k n | n N

ここで,

y k n 0 N x h k n

かつx(N) = 0です。ンパルス応答のz変換は次のようになります。

H k z 1 W N k z 1 e j 2 π k 1 2 因为 2 π k N z 1 + z 2

これを使用して直接型iiを次のように実装します。

goertzel写到の出力と歌策尔アルゴリズムの直接実装による結果を比較します。入力信号には50 Hzで10秒間サンプリングされ,ホワイトガウスノイズに組み込まれたチャープを使用します。測定中,チャ,プの周波数は15 Hzから20 Hzに線形で増加します。f年代/ Nの整数倍ではない周波数で離散フ,リエ変換を計算します。goertzel写到を呼び出す場合,matlab®のベクトルは0からN - 1ではなく1からnで実行されることに注意してください。高精度の結果が得られます。

Fs = 50;T = 0:1/fs:10-1/fs;N =长度(t);xn = chirp(t,15,t(end),20)+randn(1,N)/100;F0 = 17.36;k = N*f0/fs;ykn =过滤器([1 exp (2 j *π* k / N)], [1 2 * cos(2 *π* k / N) 1], [xn 0]);Xk = exp(-2j*pi*k)*ykn(end);DFT = goertzel(xn,k+1);df = abs(Xk-dft)
Df = 4.3634e-12

代替方法

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

  • fft:いくつかの周波数のみでDFTが必要な場合は,Goertzel写到アルゴリズムよりも非効率的です。周波数日志2N(nは入力信号の長さ)よりも大きい周波数で変換を評価する必要がある場合,fftgoertzel写到よりも効率的です。

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

参照

[1] Burrus, C. Sidney, Thomas W. Parks。DFT/FFT和卷积算法:理论与实现。纽约:John Wiley & Sons出版社,1985年。

[2]普罗基斯,约翰G.和迪米特里斯G.马诺拉基斯。数字信号处理:原理,算法和应用。第3版。上马鞍河,新泽西州:普伦蒂斯大厅,1996年。

[3]西塞尔,彼得和帕维尔·拉吉麦克。推广到基频非整数倍数的格策尔算法。信号处理进展杂志。2012卷,第1期,2012年12月,第56-1-56-8页。https://doi.org/10.1186/1687-6180-2012-56

拡張機能

バ,ジョン履歴

R2006aより前に導入

参考

|