Matlab4.2b提供了将wmf格式矢量图复制到Windows剪切板.doc
Matlab 4.2b提供了将wmf格式矢量图复制到Windows剪切板的功能,可以将它直接粘贴到Word文档中而不发生任何失真,十分好用。
下面是第(2)小题的代码。应该注意到abs和angle函数可以用来分解出复数的模和幅角。另外,plot函数可以将离散序列画成连续曲线:
dftx=fft(x); %求x[n]的DFT
dfty=fft(y); %求y[n]的DFT
%特别注意:DFT算出的只是对连续频谱的64个采样值,而非整个频谱
%但是可以利用这些采样值来近似拟合出频谱,这就是下面的工作了
figure(2); %新开一个Figure窗口
magdftx=abs(dftx); %求x[n]的DFT的模
magdfty=abs(dfty); %求y[n]的DFT的模
subplot(2,1,1);plot(n,magdftx);
%通过plot命令将离散序列近似拟合为连续频谱曲线
xlabel('n');ylabel('x[n] Spectrum Magnitude');
subplot(2,1,2);plot(n,magdfty);
xlabel('n');ylabel('y[n] Spectrum Magnitude');
四、实验总结
通过本次实验,验证了我们可以通过傅里叶变换的卷积性质将时域繁琐的卷积运算变换到频域后采用DTFT的相乘来简单地完成。在DSP中处理有限长信号(通常对应着FIR系统)时,DTFT又常常表现为它的一个离散采样——DFT。DFT使时域有限长序列与频域有限长序列相对应,而且拥有高效的FFT和IFFT算法。
实验的基本原理可以用方框图表示为:
X[k]
x[n]
Y[k] y[n]
h[n] H[k]
最后比较一下使用传统的卷积算法和FFT算法在时间效率上的差别。就本实验而言,在Matlab 6.5环境下我们分别抽取了几条FFT/IFFT和卷积命令的代码并用tic/toc命令进行计时,时间如下:
运算类型和命令时间(s)时间总和(s)dftx=fft(x); %DFT
dfty=fft(y); %DFT0.07800.1090dfth=dfty./dftx;
h=ifft(dfth); %IDFT0.0310y1=conv(h,x);0.15700.1570
可以发现,一组FFT/IFFT命令的执行总时间比一条卷积命令的执行时间少了约30.6%。此外,FFT/IFFT命令可以在已知输入和输出的情况下求系统的频率响应,这是卷积无法做到的。要想实现“逆卷积”运算,往往需要考虑一个特殊的输入:sinc函数。具体的论述可在课本P390-P391找到。
至此,DFT的原理、正确性和优势已经全部讨论完毕。当然,由DFT的定义可以看到,它的最大局限性在于只能处理时域离散的有限长序列。即使如此,在DSP的工程实践中所遇到的很多问题都是满足这个条件的,所以DFT的应用十分广泛。它的出现为时域数字信号的处理提供了一种新的思路:信号可以转换到频域后进行各种复杂的处理,最后再还原回时域。
教师评语:
三、实验步骤(包括分析、代码和波形)
首先来看看这个实验的要求。实验主要涉及LTI系统对信号的加工,需要我们通过卷积、FFT和IFFT来灵活计算系统的单位脉冲响应和输出:
假设一个特定的LTI系统对输入x[n]=(-3/4)n的响应是:
y[n]=2/5(1/2)nu[n]+3/5(-3/4)nu[n]
要求用fft和ifft确定这个系统的单位脉冲响应.
(1