数字信号处理实验一FFT变换及其应用Word格式.docx
《数字信号处理实验一FFT变换及其应用Word格式.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验一FFT变换及其应用Word格式.docx(19页珍藏版)》请在冰豆网上搜索。
若信号本身是有限长的序列,计算序列的频谱就是直接对序列进行FFT运算求得X(k),X(k)就代表了序列在[0,2]之间的频谱值。
幅度谱:
相位谱:
为避免产生混叠现象,采样频率fs应大于2倍信号的最高频率fc,为了满足采样定理,一般在采样之前要设置一个抗混叠低通滤波器。
用FFT对模拟信号进行谱分析的方框图如下所示。
图1.1FFT对模拟信号进行谱分析的方框图
2.应用FFT实现快速卷积涉及的基础知识如下:
一个信号序列x(n)与系统的卷积可表示为下式:
Y(n)=x(n)*h(n)=
当是一个有限长序列,且0nN-1时,有:
Y(n)=
此时就可以应用FFT来快速计算有限长度序列的线性卷积。
也就是先将输入信号x(n)通过FFT变换为它的频谱采样值X(k),然后再和滤波器的频响采样值H(k)相乘,最后再将乘积通过快速傅里叶变换(简称IFFT)还原为时域序列,即得到输出。
如下图所示。
图1.2FFT实现卷积的过程示意图
2.1.当序列x(n)和h(n)的长度差不多时
设x(n)的长度为N1,h(n)的长度为N2,则用FFT完成卷积的具体步骤如下:
①为使两有限长序列的线性卷积可用其循环卷积代替而不发生混叠,必须选择循环卷积长度N≥N1+N2-1
②用补零方法使x(n)和h(n)变成列长为N的序列。
③用FFT计算x(n)和h(n)的N点离散傅里叶变换
④完成X(k)和H(k)的乘积Y(k)。
⑤用FFT计算的离散傅里叶反变换得y(n)
2.2当x(n)长度很长时可采用分段卷积的方法即重叠相加法和重叠保留法。
(二)实验项目
(1)用FFT进行频谱分析
1)对高斯序列进行频谱分析
代码如下:
n=0:
15;
p=8;
q=2;
x=exp(-1*(n-p).^2/q);
closeall;
subplot(3,1,1);
stem(fft(x));
%利用fft函数实现傅里叶变换
subplot(3,1,2);
stem(abs(fft(x)));
%绘制幅度谱
subplot(3,1,3);
stem(angle(fft(x)))%绘制相位谱
代码是为了得出此高斯序列的快速傅里叶变换,得到DFT的频谱特征图、幅频特征图和相频特征图。
a)固定信号参数P=8,改变q的值依次为2、4、8,结果如下图:
P=8,q=2
图2-1
P=8,q=4
图2-2
P=8,q=8
图2-3
结果分析:
从图中可以看出,当固定p的值,改变q,可观察到:
随着q的增加,幅频图中趋近与0和等于0的个数增多。
可见q的增大使DFT幅频图中幅度平均值减小,且p是序列的对称轴,时域轴都关于n=8对称。
当q=2、4、8时,频域变化越来越快,中间水平部分越来越大,混叠减弱。
b)固定信号参数q=8,改变p的值依次为8、13、14,结果如下图:
q=8,P=8
图2-4
q=8,p=13
图2-5
p=14,q=8
图2-6
当固定q的值,改变p,可观察到:
随着p的增大,图形越来越偏
离真实值,当p=14时泄漏现象较明显,频域波形随p的增大频率
分量会增多,易产生混叠。
2)对正弦序列进行频谱分析
%定义序列长度
a=0.1;
f=0.0625;
x=exp(-a*n).*sin(2*pi*f*n);
subplot(2,1,1);
stem(x);
title('
衰减正弦序列'
);
subplot(2,1,2);
%绘制幅度谱
x信号的频谱'
)
a)固定参数a=0.1,改变f,分别为0.5625、0.4375、0.0625,结果如下图:
f=0.5625
图2-7
f=0.4375
图2-8
f=0.0625
图2-9
观察可知,当f=0.4375,0.5625时,时域图像关于Y轴对称,频域完
全相同。
随着f值增大,时域序列周期变小。
频域序列的高频分量逐渐
增多,低频分量逐渐减少,因为所取的频率不符合采样定理,以致发
生严重的频谱混叠和泄漏。
3)对三角序列进行频谱分析
fori=1:
4
x(i)=i;
end
fori=5:
8
x(i)=9-i;
fori=9:
16
x(i)=0;
closeall
stem(abs(fft(x)))%绘制幅度谱
其频谱图如下所示:
图2-10
此编程实现三角序列,中间两个值是相等的,然后我们根据fft函数快
速求出x在各个n值上所对应的傅里叶变换值,得到结果如下:
Y=[18.46403.1605-16.3681i-5.3021-2.2394i-0.3336+0.3570i
0.1333+0.0145i0.7981-0.5599i-0.0955-0.4109i0.3750–
0.0802i0.06460.3750+0.0802i-0.0955+0.4109i0.7981+
0.5599i0.1333-0.0145i-0.3336-0.3570i-5.3021+2.2394i
3.1605+16.3681i]然后分别求出各点处的大小(实部的平方加虚部的
平方开根号),得出来的大小和图像近似相等。
此三角序列的时域表达
式为:
当1≤n≤4时x(n)=n;
当5≤n≤8时x(n)=9-n。
a)反三角序列:
Fori=1:
x(i)=5-i;
end
Fori=5:
x(i)=i-4;
closeall
stem(abs(fft(x,16)))
图2-11
b)半三角序列(直角三角形序列):
代码1如下:
fori=1:
8
x(i)=i-1;
end
stem(abs(fft(x)))
代码2如下:
x(i)=8-i;
图2-13
c)只有一个峰值:
x(i)=i;
x(i)=8-i;
图2-14
(2)使用FFT实现卷积运算
已知:
x1(n)=RN(n),1N10;
x2(n)=8sin(0.5*pi*n+4)1N10;
x3(n)=0.8*exp(3*n)1N10;
使用FFT实现以上3种卷积。
n=[1:
1:
10];
N1=length(n);
xn1=ones(1,N1);
xn2=8*sin(0.5*pi*n+4);
xn3=0.8*exp(3*n);
N=N1+N1-1;
X1k=fft(xn1,N);
X2k=fft(xn2,N);
X3k=fft(xn3,N);
Yk1=X1k.*X2k;
Yk2=X1k.*X3k;
Yk3=X2k.*X3k;
yn1=ifft(Yk1,N);
yn2=ifft(Yk2,N);
yn3=ifft(Yk3,N);
x=0:
N-1;
stem(x,yn1,'
.'
)
stem(x,yn2,'
stem(x,yn3,'
用FFT计算卷积,实验结果如下图:
图2-15
X1n=[111111111];
x2n=[80-8080-8080];
X1n*x2n=[0
880088008008800880],其IFFT变换为8*(exp(j*2*w)
+exp(j*3*w)+exp(j*6*w)+exp(j*7*w)+exp(j*10*w)+exp(j*13*w)
+exp(j*14*w)+exp(j*17*w)+exp(j*18*w))=8*(1+exp(j*w))
*(exp(j*2*w)+exp(j*6*w)+exp(j*13*w)+exp(j*17*w))+8*exp(j*10*
w),Matlab运行的结果与手工计算的结果完全一致,由此可知此代码
是正确的。
(3)一个综合性实例
1)创建简易界面
使用MATLAB中的图形用户接口功能,设计简单的操作界面,如图1.6所示。
界面中包含列表框,滑动块,按钮和静态文本。
其中列表中,包含正弦波、方波和锯齿波;
移动滑动块可以改变图形的周期,且周期数在静态文本中显示;
点击“退出”按钮则退出程序。
界面如下图:
图2-16
a)当列表框中选择‘正弦波’,周期数为4时,产生的时域波形和频谱图如下:
图2-17
b)当列表框中选择‘方波’,周期数为4时,产生的时域波形和频谱图如下:
图2-18
c)当列表框中选择‘三角波’,周期数为4时,产生的时域波形和频谱图如下:
图2-19
d)当列表框中选择‘锯齿波’,周期数为4时,产生的时域波形和频谱图如下:
图2-20
四、实验小结
本次实验按照实验指导书,基本是按照原有的代码和步骤基础上来做的,实验中也遇到了一系列的问题:
一,前后参数不一致,即在改变参数的时候,由于粗心使得前后参数形式不一致,而导致运行出错;
二,在matl