我们为什么说“零填充并不能真正提高频率分辨率”


12

这是频率f = 236.4 Hz(正弦为10毫秒;N=441以采样率表示点fs=44100Hz)和DFT(无零填充)的正弦曲线:

在此处输入图片说明

通过查看DFT可以得出的唯一结论是:“频率大约为200Hz”。

这是信号及其DFT,带有大的零填充

在此处输入图片说明

现在我们可以给出一个更为精确的结论:“通过仔细观察频谱的最大值,我可以估算出236Hz的频率”(我放大并发现最大值接近236Hz)。

我的问题是:为什么我们说“零填充不会增加分辨率”?(我经常看到这句话,然后他们说“只添加插值”)

=>以我的示例为例,零填充可帮助我以更精确的分辨率找到合适的频率!


1
考虑这个非常古老的问题的另一种方法:如果您根本没有时间序列图,而只有“低分辨率” fft,则可以将其转换为时间序列,零填充并重新设置。 -fft可获得236Hz。因此,“低分辨率” ftf 必须包含平滑信息的所有相同信息。
Joshua R.

Answers:


19

在这种情况下,分辨率具有非常具体的定义。它是指您能够分辨附近频率上的两个单独音调的能力。您已经增加了频谱估计的采样率,但是还没有任何能力来区分两个音调,例如236 Hz和237 Hz。相反,无论您应用了多少零填充,它们都将“融合”为一个斑点。

提高分辨率的解决方案是观察信号更长的时间,然后使用更大的DFT。这将导致主瓣的宽度与DFT大小成反比,因此,如果观察足够长的时间,您实际上可以分辨彼此相邻的多个音调的频率。

-

为了了解这种情况的发生,这是两个信号相加后的放大FFT图:原始正弦波,和一个频率相差0至100 Hz的正弦波。

只有在图的100Hz差值末端(此处为左侧),您才能区分(分辨)两者。

用于生成以下图的Scilab代码。

在此处输入图片说明

f = 236.4;
d = 10;
N=441;
fs=44100;
extra_padding = 10000; 

t=[0:1/fs:(d/1000-1/fs)]
ff = [0:(N+extra_padding-1)]*fs/(N+extra_padding);

x = sin(2*%pi*f*t);

XX = [];

for delta_f = [0:100];
    y = sin(2*%pi*(f+delta_f)*t);
    FFTX = abs(fft([x+y zeros(1,extra_padding)]));
    XX = [XX; FFTX];
end

mtlb_axis([0 1300 0 500])

figure(1);
clf
[XXX,YYY] = meshgrid(ff,0:100);
mesh(XXX(1:100,[50:90]),YYY(1:100,[50:90]),XX(1:100,[50:90]))

谢谢 !好的,零填充将无助于解决附近频率上的两个单独的音调;但是,在我的示例中,它可以用于找到频谱的峰值,从而找到音调的基调频率(例如,用于精确的音调跟踪目的)
Basj 2013年

我认为“零填充不会提高分辨率”的意思是“您无法在零填充的帮助下进行精确的音高跟踪”(在这里是不正确的,该示例显示可以准确地检测到某些音高)
Basj

我认为您正确理解。零填充确实有其用途,例如从粗谱图精确估计峰位置。这不是灵丹妙药。
杰森R

1
我只是尝试了除零填充以外的其他方法,但与此相关。而不是增加x(n)长度(0结尾处),我保持x(n)长度N,但更改在这里:代替DFT(k) = \sum x(n) exp(-2*i*pi*n*k/N)for k=0,1,...,N-1,我这样做DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))k=0,1,...,10*N-1... ...这就像添加更多的bin(10 Nbin而不是N频率bin),但保持不变x(n)N。现在垃圾箱将是10hz,20hz,...,100hz,110hz,120hz,..... =>是否与零填充相同:没有真正的附加分辨率,而只有插值?
Basj 2013年

是否增加更多的垃圾箱(10N,而不是N):DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))k=0,1,...,10*N-1,并保持相同的x(n)长度,N给出相同的结果不是零填充:不是真的更高的分辨率,但只有插值?
巴斯基(Basj)2013年

13

术语“解决”具有多种含义,当使用两种不同的含义时,可能会使尝试进行交流的人们感到困惑。

从光学意义上讲,能够分辨两个附近的明显分离的点(或光谱中的两个相邻峰)而不是一个模糊的斑点,零填充将无济于事。当声明零填充不会增加分辨率时,这是最有可能使用的含义。

如果对分辨率的要求要求频谱峰值之间有一个下降(例如,最低降低3 dB),则分辨率将甚至低于FFT二进制码间隔,例如,甚至不是Fs / N,而是2X到3X,或者更大,取决于使用的窗口。对分辨率的较弱要求可能只是DFT正交基矢量的频率间隔,例如Fs / N。

就绘图点而言,是的,零填充将为您提供更多绘图点,就像DPI(每英寸的绘图点)分辨率一样。这样可能更容易通过眼球挑出极端。但是,它们是通过进行高质量的图形插值(Sinc插值)而没有任何零填充而获得的相同点,因此,它们实际上不添加没有零填充就无法计算的信息。

就音调跟踪而言,窗口化非零填充的FFT结果的抛物线形或Sinc插值(FFT结果仓之间的插值)可能会提供与计算量更大,更长的零填充FFT图一样好的结果。因此,零填充比非零填充和非插值的峰值拾取为您提供了“更好”的音调跟踪结果,但通常效率不如仅使用插值。

如果将噪声添加到示例中,但比信号稍小,则会发现零填充峰与非零填充峰一样不准确。因此,在更一般的情况下,您可能找不到比以前更准确的“正确”频率。零填充仅对由于噪声引起的不精确结果进行插值,这是据说不能提高分辨率的另一个原因。


请记住:如果仅f=236.4 hz在相同的时间内具有相同的正弦曲线,10ms但fs = 192khz而不是44.1khz,会发生什么情况:那么真实的频率分辨率会更高吗?
巴西

增加采样率将为您提供更多的高频频段,但在任何感兴趣的低频附近都具有相同的DFT频段间距,
hotpaw2 2013年

1
增加采样率会使sincDFT中的样曲线变窄吗?如果不是这样,则意味着增加采样率不会增加分辨率(意味着可以分辨频率)
Basj 2013年

1/TT

频率中Sinc的宽度与时间上数据窗口的宽度有关,零填充或更改采样率并不会真正影响它(采样或量化问题除外)。
hotpaw2
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.