FFT变换中的两种分辨率(物理分辨率和计算分辨率)

设时域采样序列为 x [ n ] , 0 ≤ n < N x[n],0\leq n<N x[n],0n<N,则其FFT变换为
X [ k ] = ∑ n = 0 N − 1 x [ n ] e x p ( − j 2 π N k n ) , 0 ≤ n < N , 0 ≤ k < N X[k]=\sum_{n=0}^{N-1}x[n]exp(-j\frac{2\pi}{N}kn), 0\leq n<N, 0\leq k<N X[k]=n=0N1x[n]exp(jN2πkn),0n<N,0k<N
若采样率为 f s f_s fs,则FFT变换后的频率轴刻度为 [ − f s / 2 : f s / N : f s / 2 ] [-f_s/2:f_s/N:f_s/2] [fs/2:fs/N:fs/2]。从中得到两个信息:
(1)受奈奎斯特采样定律的限制,FFT变换最大只能表征 f s / 2 f_s / 2 fs/2频率的信号。当信号频率超过 f s / 2 f_s / 2 fs/2,则会发生频谱混叠。设信号真实频率为 f 0 f_0 f0,则混叠后的频率为 ± ∣ n f s − f 0 ∣ , n = r o u n d ( f 0 / f s ) \pm |nf_s - f_0|,n=round(f_0 / f_s) ±nfsf0n=round(f0/fs)
下图所示场景中, f s = 10000 H z , N = 2000 f_s=10000Hz,N=2000 fs=10000Hz,N=2000,包含两个正弦信号,频率分别为 1000 H z 1000Hz 1000Hz 6000 H z 6000Hz 6000Hz。FFT变换后, 6000 H z 6000Hz 6000Hz信号发生混叠,混叠后频率为4000Hz。
采样率10000Hz,两个单频信号分别为1000Hz和6000Hz, 样点数为2000

图1. 采样率10000Hz,两个单频信号频率分别为1000Hz和6000Hz

(2)频谱中相邻两点间的频率间隔为 Δ f = f s / N \Delta f=f_s/N Δf=fs/N,显然采样率 f s f_s fs越小,时域序列样点数 N N N越大, Δ f \Delta f Δf就越小。
基于上面的结论,我们很容易想到,若在原始采样序列 x [ n ] x[n] x[n]后面补上一串0,再进行FFT变换,那就通过增加时域样点数 N N N达到减小FFT频谱的频率分辨率 Δ f \Delta f Δf的目的。那是不是意味着,单纯的补零操作就可以让FFT变换具备分辨频率差异任意小的信号的能力?显然,这是违背直觉的,因为补零本质上并没有增加任何有用信息,自然无法提升FFT对信号的分辨能力。那补零操作的本质是什么?它与FFT对信号分辨能力的关系又是什么?
其实这边涉及到两个分辨率的概念:(1)是FFT变换频谱中相邻两点之间的频率间隔,通常称为计算分辨率。补零影响的就是计算分辨率,它与信号分辨能力无关;(2)是FFT对信号的分辨能力,通常称为物理分辨率,它只与时域采样序列的有效时长有关。下面对这两种分辨率进行详细说明。
1. 计算分辨率
从上面的分析可知,计算分辨率 Δ f = f s / N \Delta f=f_s/N Δf=fs/N,因此任何降低采样率或增加时域序列点数的操作都能提高计算分辨率。补零就是最常见的操作。下面推导补零前后信号频谱的关系。
设原始时域序列为 x [ n ] , 0 ≤ n < N x[n],0\leq n<N x[n],0n<

MATLAB中使用FFT做频谱分析时频率分辨率问题-频率分辨率.rar MATLAB中使用FFT做频谱分析时频率分辨率问题 最近做FFT时,使用的采样频率信号长度的取舍一直没有搞清楚,后来在论坛上发了一个贴子《总结一下使用FFT维纳-辛钦定理求解PSD问题》(讨论见https://www.ilovematlab.cn/thread-27150-1-1.html,特别感谢会员songzy41,他的问题给了我很大启示),跟帖中给了我不少启示,并且让我对“频率分辨率”这个概念有了更深入的理解。再次一并感谢论坛的高手们。 频率分辨率,顾名思义,就是将信号中两个靠的很近的频谱分开的能力。 信号x长度为Ts,通过傅氏变换后得到X,其频率分辨率为Δf=1/T(Hz),若经过采样后,假设采样频率为fs=1/Ts,而进行频谱分析时要将这个无穷长的序列使用窗函数截断处理,假设使用矩形窗,我们知道,矩形窗的频谱为sinc函数,主瓣宽度可以定义为2*pi/M,M为窗宽,那么,时域相乘相当于频域卷积,频域内,这一窗函数能够分辨出的最近频率肯定不可能小于2*pi/M了,也就是如果数据长度不能满足2*pi/M<|w2-w1|(w2,w1为两个靠的很近的频率),那么在频谱分析时,频谱上将不能分辨出这两个谱,由于w2-w1=2*pi/fs=2*pi*Δf/fs也就是2*pi/M<2*piΔf/fs,得到Δf的限制为fs/M,这就是窗函数宽度的最小选择,就是说,根据Shannon采样定理确定了采样频率后,要根据靠的最近的谱峰来确定最小的采样长度,这样,所作出来的频谱才能分辨出那两个谱峰,也就是拥有了相应的频率分辨率。 几个例子: 考虑双正弦信号:x = sin sin;根据Shannon采样定理,采样频率要大于截止频率的两倍,这里选采样频率为80,那么,我们可以看到,Δf为0.2Hz,那么,最小的数据长度为0.2/80=400,但是对正弦信号的频谱分析经验告诉我们,在截断时截断时的数据要包含整周期,并且后面不宜补零以避免频谱泄露(这一点见胡广书《数字信号处理导论》,清华大学出版社),那么,我们要选择至少980个点,才能保含到一个整周期,另外,FFT的经验告诉我们作分析时最好选择2的整数次幂,我们选择靠的最近的1024点。分析结束。 [CODE] Fs = 80; n = 0:1/Fs:1023*1/Fs; x = sin sin; N = length; figure; X = fftshift); plot*Fs/N,abs*2/N); grid on; axis; 这是按照我们的分析进行的编程图形 zheng.jpg 可以看出这两个谱峰很好的被分辨开来,9.8Hz不在谱线上,所以幅值不为1,以下是一些对比: [CODE] Fs = 80; n = 0:1/Fs:1023*1/Fs; x = sin sin; N = length; X = fftshift); figure; subplot plot*Fs/N,abs*2/N); grid on; axis; title; n = 0:1/Fs:979*1/Fs; x = sin sin; N = length; X = fftshift); subplot plot*Fs/N,abs*2/N); grid on; axis; title; n = 0:1/Fs:399*1/Fs; x = sin sin; N = length; X = fftshift); figure; subplot plot*Fs/N,abs*2/N); grid on; axis; title; Fs = 20; n = 0:1/Fs:1024*1/Fs; x = sin sin; N = length; X = fftshift); subplot plot*Fs/N,abs*2/N); grid on; axis; title; 结果如下: 1024.jpg 400.jpg 这是我在做FFT以及论坛中的问题时所得到的一点启发,不当之处还请大家指正。OO~ 频率分辨率.rar 为了方便大家,我将doc版报告m文件一起上传,帖子内容一样。OO~
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值