1
内容与要求
画出不同采样率、不同持续期的正弦信号波形图,分别⽤DTFT 、DFT 和FFT 算法计算频谱。通过MATLAB 仿真计算,达到以下⽬标:
1. 理解数字谱分析中物理分辨⼒和计算分辨⼒的概念及两者间的关系;2. 弄清数字谱分析中误差成因及减⼩误差的⽅法。 2报告正⽂
(1)数字谱分析中物理分辨⼒和计算分辨⼒的概念及两者间的关系: 物理分辨率△fw=c*fs/L 计算分辨率△fc=fs/N
当c ,fs 都不变时,增⼤N 可以显著提⾼计算分辨率,但物理分辨率不变,因为有效的数据点数不变;增⼤L 时,可以提⾼物理分辨率,能分辨出间隔少的频率,但计算分辨率不变。窗函数频谱的主瓣应尽量窄,能量尽可能集中在主瓣内,从⽽在谱分析时获得较⾼的频率分辨⼒ 。应⽤DFT 进⾏信号的数字谱分析时,需要确定的参数主要有:截取的信号长度T 、抽样频率fs 、采样点数N 及选择什么样的窗⼝。如果在x(n)中有两个频率分别为f1和f2的信号,对x(n)⽤矩形窗截断时,要分辨出这两个频率,N 必须满⾜[2]:212fsf f N
<- 因此,反映频率分辨率能⼒的Δf 由下式决定:Δf = fs/ N = 1/( N*T)= 1/L 可见,Δf 反⽐于截取的信号长度L ,即截取的信号长度越长,分辨能⼒越好 下⾯⽤例⼦证明上⾯所分析的结论。设有⼀序列x(n)含有两种频率成分,f1= 3Hz ,f2=3.04Hz ,()cos(21/2)cos(22/)x n nf f nf fs ππ=+。由抽样定理,我们采⽤fs =10Hz ,即 T= 0.1s 对其抽样,不应发⽣频谱混叠问题。这⾥采⽤128点和512 点DFT ,对两种情况下的频率分辨率进⾏⽐较:设128 点的分辨率为Df1 , 512 点的分辨率为Df2,则
df1=10/128=0.078125Hz,Df2=10/512= 0.01953125Hz 。计算结果表明,128点DFT 未能将两个靠的很近的频率分辨出来,⽽512点DFT 却达到了分辨频率的要求。
(2)数字谱分析中误差成因及减⼩误差的⽅法: ①频谱泄漏:
泄漏现象的产⽣主要是由于窗函数的突然截断信号在谱函数中产⽣旁瓣⽽引起的,谱函数中主瓣的幅值与旁瓣幅度的⽐值越⼤则泄漏现象对信号频谱分析的影响就越⼩。⽽离散时间序列通常是⽆限长序列,为了能计算和物理实现,通常都会截取⼀段来进⾏计算,也就是加窗。但是加窗后的频谱会发⽣泄漏,就像频率⼤⼩为fs 的冲激经过加窗后会变成以fs 为中⼼的频带,这就会造成频谱泄漏。 频谱泄漏的危害:
1. 频谱有皱纹,其中较⼤的旁瓣可能淹没较⼩谱峰。
2. 产⽣新的谱峰,造成观察者对信号的误读。(物理分辨率下降) 解决⽅法:可以通过补零加长窗的长度来减少频谱的泄漏。 ②栅栏效应:
对⼀函数实⾏采样就像是通过栅栏看外⾯⼀样,就是⽤栅栏看到的景物来代替全部,这就是栅栏效应。但是这就可能略去重要的部分,使采样失去意义。所以信号的采样要满⾜采样定理:N>L 。解决⽅法:可以通过提⾼采样点数来减少栅栏效应。 ③混淆:
采样的过程不符合采样定理,即不符合max 2s f f ≥。这就会造成由于采样频率过低⽽产⽣的混淆从⽽不能⽆失真的恢复。 解决⽅法:令max 2s f f ≥。 (3)程序: 程序1:clfclear all;
L=80;%---采样长度 n=0:L-1;%---采样间隔 N=512;%---采样点数 fs=6000;%---采样频率 f1=100; %---模拟频率w1=2*pi*f1/fs;%---数字⾓频率 t=0:0.0001:L;xt=sin(w1*t);%---原始正弦信号subplot(5,1,1)plot(t,xt)
title('正弦信号')
xn=sin(w1*n);%---采样后的信号subplot(5,1,2)stem(n,xn,'k.')
title(['采样信号fs=',num2str(fs)]);%---DTFTk=0:N-1;
w = (0:N-1) * 2 * pi / N;Y1=DTFT(xn,w);subplot(5,1,3)
plot(w/(2*pi),abs(Y1),'r')
title(['DTFT L=',num2str(L),',N=',num2str(N),',fs=',num2str(fs)]) %---DFTY2=DFT(xn,N);subplot(5,1,4)
stem(k*fs/N,abs(Y2),'b.')
title(['DFT L=',num2str(L),',N=',num2str(N),',fs=',num2str(fs)]) %---FFTY3=fft(xn,N);subplot(5,1,5)
stem(k*fs/N,abs(Y3),'g*')
title(['FFT L=',num2str(L),',N=',num2str(N),',fs=',num2str(fs)])程序2:%--DTFT函数function X=DTFT(x,w)L=length(x);z=exp(-1j*w);X=0;for n=L-1:-1:0X=x(n+1)+z.*X;End程序3:%---DFT函数function X=DFT(x,N)% N为采样点数
L=length(x);%时间序列长度for k=0:N-1
n=0:L-1;
omega_k=2*pi*k/N;W_kn=exp(-1j*omega_k*n);X(k+1)=x*W_kn';End
(4)运⾏结果:
1.同样的N与fs,不同L:(1) L=80,N=512,fs=2000
(2)L=200,N=512,fs=2000
(3)L=300,N=512,fs=2000
(1)L=80,N=128,fs=2000
(2)L=80,N=256,fs=2000
(3)L=80,N=512,fs=2000
3.同样的N、L,不同的采样率(1)L=80,N=512,fs=2000
(2) L=80,N=512,fs=4000
(3) L=80,N=512,fs=6000
3结果与分析
由第⼀组图,同样的N、fs,不同L可以看出,L越⼤,物理分辨率就越⾼,能量就越集中,频谱泄漏就越少,计算分辨率不变。
由第⼆组图,同样的L、fs,不同N可以看出,N越⼤,计算分辨率就越⼤,物理分辨率不变,栅栏效应越少。
由第三组图,同样的N、L不同的采样率可以看出,fs越⼤,计算分辨率和物理分辨率都得到提⾼,频谱泄漏和栅栏效应都减少。4总结
经过这次的仿真实验,我们对matlab算法有了更深的了解,还有对那计算分辨率和物理分辨率都有了明确的认识,明⽩L, N和fs对计算分辨率和物理分辨率的影响。加深我们对DFT和FFT的认识,也看出了L,N和fs对DFT和FFT 的影响。对两种变换有了更深⼊的了解。5参考⽂献
[1]程佩青著,数字信号处理教程(第三版),清华⼤学出版社,2007[2]清远计算机⼯作室, MATLAB6.0基础及应⽤,机械⼯业出版社, 2001
[3]王华,李有军,刘建存著,MATLAB电⼦仿真与应⽤教程(第⼆版),国防⼯业出版社,2007
[4] 陈怀琛,吴⼤正,⾼西全,MATLAB及在电⼦信息课程中的应⽤,电⼦⼯业出版社,2002[5] 陈怀琛,数字信号处理教程---MATLAB释义与实现,电⼦⼯业出版社,2004
因篇幅问题不能全部显示,请点此查看更多更全内容