文档

goertzel写到

二阶Goertzel算法的离散傅里叶变换

语法

dft_data = goertzel写到(数据)
freq_indices dft_data = goertzel写到(数据)
dft_data = goertzel写到(数据、freq_indices暗)

描述

dft_data = goertzel写到(数据)返回输入数据的离散傅里叶变换(DFT)数据,使用了二阶Goertzel算法。如果数据是一个矩阵,goertzel写到分别计算每列的DFT。可以将数据类型指定为双精度或单精度。

freq_indices dft_data = goertzel写到(数据)返回频率索引的DFTfreq_indices.的值freq_indices可以是任何整数或分数。

dft_data = goertzel写到(数据、freq_indices暗)计算矩阵的DFT数据沿着维度昏暗的

例子

全部折叠

估计频率的声音产生按1键在电话键盘上。

数字1产生频率为697和1209赫兹的音调。生成205个样本的音调的采样率为8 kHz。

Fs = 8000;N = 205;lo =罪(2 *π* 697 * (0:n - 1) / Fs);你好=罪(2 *π* 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写到(数据、freq_indices);

绘制DFT的大小。

if (f,abs(dft_data)) ax = gca;斧子。XTick = f;包含(的频率(赫兹))标题(“DFT级”

生成带有1.24 kHz、1.26 kHz和10 kHz频率分量的噪声余弦。指定采样率为32khz。重置随机数生成器以获得可重复的结果。

rng默认的Fs = 32 e3;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));

生成频率矢量。使用Goertzel算法计算DFT。将频率范围限制在1.2至1.3 kHz之间。

N =(长度(x) + 1) / 2;f = (Fs / 2) / N * (0: N - 1);if (f < > and f< >);X = goertzel写到(X, indxs);

绘制以分贝表示的均方谱。

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

算法

Goertzel算法将DFT实现为递归差分方程。为了建立这个差分方程,将DFT表示为a的卷积N分输入,xn),带有脉冲响应 h n W N k n u n ,在那里 W N k n e j 2 π k / N un)为单位阶跃序列。

脉冲响应的z变换是

H z 1 W N k z 1 1 2 因为 2 π k / N z 1 + z 2

直接形式II的实现是:

选择

你也可以用以下方法计算DFT:

  • fft:当只需要几个频率的DFT时,效率比Goertzel算法低。

  • czt,啁啾z变换。czt计算输入在圆形或螺旋轮廓上的z变换,并包括DFT作为一个特殊情况。

参考文献

Proakis, John G.和Dimitris G. Manolakis。数字信号处理:原理,算法和应用.第3版。Upper Saddle River, NJ: Prentice Hall, 1996, pp. 480-481。

Burrus, C. Sidney和Thomas W. Parks。DFT/FFT和卷积算法:理论与实现.纽约:约翰·威利父子公司,1985年。

扩展功能

之前介绍过的R2006a