FFT_频谱分析(数字信号处理)
~~ 如果有什么问题可以在我的个人博客留言 ,我会及时回复。欢迎来访交流 ~~
FFT_频谱分析(数字信号处理)
(一)实验原理
用FFT对信号作频谱分析是学习数字信号处理的重要内容。经常需要进行谱分析的信号是模拟信号和时域离散信号。对信号进行谱分析的重点在于频谱分辨率及分析误差。频谱分辨率D和频谱分析的点数N直接相关,其分辨率为2π/N 。因此2π/N≤D,可以据这个公式确定频率的分辨率。
FFT分析频谱的误差在于得到的是离散谱,而信号(非周期信号)是连续谱,只有当N较大时,离散谱的包络才能逼近于连续谱。因此N要适当选择大一些。
周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。如果不知道信号周期,可以尽量选择信号的观察时间长一些。
对模拟信号进行谱分析时,首先要按照采样定理将其变成时域离散信号。如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。
(二)实验步骤
1.对以下序列进行频谱分析
为上三角有限长序列,序列长度为8; 为下三角有限长序列,序列长度为8。选择FFT变换点数N分别为8和16两种情况进行频谱分析,打印出频谱特性曲线,观察不同N值, 和 的频谱特性曲线是否相同,进行讨论分析并得出结论。整个频谱分析过程通过Matlab软件进行程序设计实现。以下为Matlab的程序实现:
function e_6_1
M=8;xa=1:(M/2);xb=(M/2):-1:1;x1n=[xa,xb]; x2n=[xb,xa];%产生长度为M的上下三角序列
subplot(321);stem([0:M-1],x1n),title('X_1(n)');xlim([-1,M]);%打印序列X_1(n)
subplot(322);stem([0:M-1],x2n),title('X_2(n)');xlim([-1,M]);%打印序列X_2(n)
subplot(323);fft_stem(x1n,8,1);%打印N=8点X_1(n)DFT幅频特性
subplot(324);fft_stem(x2n,8,2);%打印N=8点X_2(n)DFT幅频特性
subplot(325);fft_stem(x1n,16,1);%打印N=16点X_1(n)DFT幅频特性
subplot(326);fft_stem(x2n,16,2);%打印N=16点X_2(n)DFT幅频特性
end
function fft_stem(A,N,name) % 计算FFT并打印子函数
stem([2/N*(0:(N-1))],abs(fft(A,N)));ylabel('幅度');xlabel('w/π');
title([num2str(N),'点DFT[X_',num2str(name),'(n)]']);xlim([-(2/N),2]);%横坐标范围
end
2.对下列模拟信号进行频谱分析
这是一个含有三个频率成分的模拟信号,频率分别为选择采样频率Fs=64Hz,对DFT变换点数N分别为:16、32、64这三种情况进行频谱分析,分别打印频谱特性曲线。对三种点数的频谱分析结果进行讨论分析。整个频谱分析过程通过Matlab软件进行程序设计实现。以下为Matlab的程序实现:
function e_6_2
global T;%全局变量 采样周期
Fs=64;T=1/Fs;%Fs采样频率
n=0:64-1;nT=n*T;%采样点数
X3n=cos(8*pi*nT)+cos(16*pi*nT)+cos(20*pi*nT);%采样
subplot(311);fft_stem(X3n,16);%对N=16的频谱分析
subplot(312);fft_stem(X3n,32);%对N=32的频谱分析
subplot(313);fft_stem(X3n,64);%对N=64的频谱分析
end
function fft_stem(A,N) % 计算FFT并打印子函数
global T;Tp=N*T;F=1/Tp;%Tp 观察时间 F 频率分辨率
stem([-N/2:N/2-1]*F,abs(fftshift(fft(A,N))));xlabel('f(Hz)');
%[-N/2:N/2-1]*F产生DFT对应采样点频率(fftshift()零点居中,关于中心反转)
ylabel('幅度');title([num2str(N),'点DFT[X_3(n)]']);xlim([-N*F/2,N*F/2-1]);%x范围
end
三、实验结果分析
(一)序列结果分析
通过对 和 频谱特性曲线结果的比较与分析(为了便于观察频谱和读取频率值对数据进行归一化处理,即分析以为横坐标),可以得出当FFT变换点数N为8 时, 和 频谱特性相同(见图3中的b1与b2),而N为16时, 和 频谱特性曲线不相同(见图3中的c1与c2)。出现这两种不同情况的原因为 和 为序列为8的有限长序列(如图3的a1和a2)当取N为8时,将两个序列做周期延拓后发现 两个周期序列的波形仅存在相位上的差别,将 向右移动4个单位长度即可得到 ,即,因而两序列的频谱特性相等,而当取N为16时,原 和 序列通过补零的方式变为序列长度为16的序列。此时序列波形完全不同,所以频谱特性必然不同。
(二)模拟信号结果分析
x_3(n) 共有3个频率成分,f1=4Hz, f2 =8Hz, f3=10Hz。所以x_3(n)的周期为0.5s。采样的频率为 Fs=64Hz=16f1=8f2=6.4f3。N为16时,观察时间Tp=16T=0.25s,T为Fs的倒数。不是x_3(n)周期的整数倍,出现混叠现象,严重失真,所以得到的频谱不正确(如图4中a3)。当N=32或64时,观察时间Tp=0.5s或1s, 是周期的整数倍,所以会得到正确的频谱(如图4中b3和c3),频谱中有3根谱线正好对应位于4Hz,8Hz和10Hz。而N为64时的频谱幅度为40正好为N为32时频谱幅度为20的两倍,即验证DFT对中期序列谱分析的理论。
更多推荐
所有评论(0)