FFT运算的加深理解——栅栏效应、补零、物理分辨率、计算分辨率

文章围绕FFT展开,介绍了栅栏效应,即离散傅里叶变换频谱受限,可通过补0缓解。补0能提高计算分辨率,接近真实点频,但无法区分相近点频。增加数据可提升物理分辨率,补0运算量小,在数据相位连续时间有限时可提升分辨率精度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

FFT运算的加深理解——栅栏效应、补零、物理分辨率、计算分辨率

栅栏效应和计算分辨率

栅栏效应是指离散傅里叶变换计算的频谱被限制在基频整数倍处,只能在相应离散点处看到输出的现象。栅栏效应可以通过补0来进行缓解。

在这里插入图片描述
我们以一个具体的例子来描述补0对FFT分析带来的变化:

我们需要分析 一个频率为 1.0413Hz的点频。
FFT64个点,其中1Hz和1.125Hz都是基频的整数倍,但1.0413Hz离1Hz更近,那么最高点肯定落于1Hz处。

N = 64
fs = 8;
 
fi1 = 1+ 2/N+0.01;
 
 
x = 1*exp(j*2*pi*fi1/fs*[0:1*N-1]) ;
%x = [x zeros(1,64*1)];
 
x_fft = fft(x);
plot([-4:8/N:4-1/N],fftshift(abs(x_fft))/64)
hold on
stem([-4:8/N:4-1/N],fftshift(abs(x_fft))/64)

在这里插入图片描述
假设我们补64个的0,相当于FFT分析精度提升了1倍,现在1Hz和1.0625Hz都是基频的整数倍,1.0413Hz离1Hz更近,那么最高点肯定落于1.0413Hz处

N = 64
fs = 8;
 
fi1 = 1+ 2/N+0.01;
 
 
x = 1*exp(j*2*pi*fi1/fs*[0:1*N-1]) ;
x = [x zeros(1,64*1)];
 
x_fft = fft(x);
plot([-4:4/N:4-1/N],fftshift(abs(x_fft))/64)
hold on
stem([-4:4/N:4-1/N],fftshift(abs(x_fft))/64)

在这里插入图片描述

假设我们192个的0,相当于FFT分析精度提升了2倍,现在1Hz和1.03125Hz都是基频的整数倍,1.0413Hz离1.03125Hz更近,那么最高点肯定落于1.03125Hz处

N = 64
fs = 8;
fi1 = 1+ 2/N+0.01;
x = 1*exp(j*2*pi*fi1/fs*[0:1*N-1]) ;
x = [x zeros(1,64*3)];
 
x_fft = fft(x);
plot([-4:2/N:4-1/N],fftshift(abs(x_fft))/64)
hold on
stem([-4:2/N:4-1/N],fftshift(abs(x_fft))/64)

在这里插入图片描述

确实,通过补0,我们慢慢的接近了真实点频的频率。这就是提高了计算分辨率

物理分辨率

那如果是两个很近的点频能够通过补0来进行区分吗?从三个FFT结果的叠加来看,其谱线的宽度基本不变,也就是说,补零操作增加了频域的插值点数,让频域曲线看起来更加光滑,提升了计算分辨率,但无法将频谱更细致化的展现出来,这样如果同时有两个频率很接近的点频,通过补0是没办法区分开的。
为了验证这句话,我们设定如下数据仿真

N = 64
fs = 8;
 
fi1 = 1+ 2/N+0.01;
fi2 = 1+ 2/N+0.06;
 
x = 1*exp(j*2*pi*fi1/fs*[0:4*N-1]) +  1*exp(j*2*pi*fi2/fs*[0:4*N-1]);

我们通过补192个数据与192个0的频谱分析图进行对比,除了能跟补0一样将频率估计的更准确,同时还将频谱变的更细致。这样如果同时有两个频率很接近的点频,则可以区分开来,这样就提高了FFT的物理分辨率
在这里插入图片描述

总结

从上面的描述可以知道,物理分辨率的提升计算分辨率肯定也提升了。那为什么还需要补0的操作呢。

1、补0的运算量远小于补数据的计算量,对于一个大部分数据都是0的FFT运算,是有办法进行一些简化操作的
2、数据只有有限时间的相位是连续的,这样就限制了我们采用更长的数据进行分析,这个时候为了提升分辨率精度,就只能通过补0的方式了。

最后注意这两个概念:
物理分辨率与计算分辨率。
物理分辨率是跟分析数据长度有关
计算分辨率则跟FFT的点数有关
补零能够通过提升计算分辨率来缓解栅栏效应,但无法提升物理分辨率来进行对相近频点的区分


2022-1-31 写于除夕日

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA十年老鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值