发布时间 : 星期三 文章数字信号处理实验报告3 DSP信号与系统实验报告 信号加窗及谱分析 电子科技大学 2018版更新完毕开始阅读
安装MATLAB软件的PC机一台,DSP实验演示系统一套。 七、实验步骤:
?5??1、计算实数序列x?n??cos?n?w?n? , 0?n?255的DTFT,其中w?n?分别取为
16??矩形窗,Bartlett窗,Hann窗,Hamming窗和Blackman窗,对比各自的频谱特性。
2、计算周期为1kHz的方波序列(占空比为50%,幅度取为+/-512,采样频率为25kHz,取256点长度)的DTFT,对其进行截断分别取矩形窗,Bartlett窗,Hann窗,Hamming窗和Blackman窗,对比各自的频谱特性。 3、利用DFT定义式,编程直接计算上面两个序列的DFT值。
4、利用MATLAB中提供的FFT函数,计算2个要求序列的DFT值。调用MATLAB中提供的计算程序运行时间函数,对比与直接利用DFT定义式计算所花费的时间。
5、对以上两个序列,分别采用不同的窗(Bartlett窗,Hann窗,Hamming窗和Blackman窗),利用FFT函数计算DFT值,对比其结果。
6、(拓展要求)不改变序列的点数,仅改变DFT计算点数(如变为计算1024点DFT值),观察画出来的频谱与前面频谱的差别,并解释这种差别。通过这一步骤的分析,理解频谱分辨力的概念,解释如何提高频谱分辨力。
八、实验数据及结果分析: 需要的程序代码:
(1)对要求的2个序列加不同窗后计算DTFT,对比其各自的频谱。
hold on
grid on
n = 0:255; Fs = 1;
L = length(n);
x = cos(5*pi*n/16);
w1 = bartlett(L)'; w2 = hann(L)'; w3 = hamming(L)'; w4 = blackman(L)';
LINES = 5; ROWS = 2; ID = -1; STEP = 2; ID = ID+STEP; subplot(LINES,ROWS,ID) stem(x)
ID = ID+STEP; subplot(LINES,ROWS,ID) stem(x.*w1)
ID = ID+STEP; subplot(LINES,ROWS,ID) stem(x.*w2)
ID = ID+STEP; subplot(LINES,ROWS,ID) stem(x.*w3)
ID = ID+STEP; subplot(LINES,ROWS,ID) stem(x.*w4)
ID = 0;
ID = ID+STEP; subplot(LINES,ROWS,ID) dtft(x,L,Fs)
ID = ID+STEP; subplot(LINES,ROWS,ID) dtft(x.*w1,L,Fs)
ID = ID+STEP; subplot(LINES,ROWS,ID) dtft(x.*w2,L,Fs)
ID = ID+STEP; subplot(LINES,ROWS,ID) dtft(x.*w3,L,Fs)
ID = ID+STEP; subplot(LINES,ROWS,ID) dtft(x.*w4,L,Fs)
hold on grid on
n = 0:255; Fs = 25000; L = length(n);
x = square(2*pi*1000*n/Fs,50);
w1 = bartlett(L)'; w2 = hann(L)'; w3 = hamming(L)'; w4 = blackman(L)';
LINES = 5; ROWS = 2; ID = -1; STEP = 2; ID = ID+STEP; subplot(LINES,ROWS,ID) stem(x)
ID = ID+STEP; subplot(LINES,ROWS,ID) stem(x.*w1)
ID = ID+STEP; subplot(LINES,ROWS,ID) stem(x.*w2)
ID = ID+STEP; subplot(LINES,ROWS,ID) stem(x.*w3)
ID = ID+STEP; subplot(LINES,ROWS,ID) stem(x.*w4)
ID = 0;
ID = ID+STEP; subplot(LINES,ROWS,ID) dtft(x,L,Fs)
ID = ID+STEP; subplot(LINES,ROWS,ID) dtft(x.*w1,L,Fs)
ID = ID+STEP; subplot(LINES,ROWS,ID) dtft(x.*w2,L,Fs)
ID = ID+STEP; subplot(LINES,ROWS,ID) dtft(x.*w3,L,Fs)
ID = ID+STEP; subplot(LINES,ROWS,ID) dtft(x.*w4,L,Fs)
(2)对要求的2个序列直接用定义式进行DFT计算的程序。 以下是自己写的dft函数,不调用MATLAB的fft函数:
%%
% Author = Nie H.T.
% Stu ID = 2016010903009 % Date = Mar 27, 2018
% Calculate DFT without internal function fft. %%
function [X] = dft(x) L = length(x); X = zeros(L); for k = 1:L for n = 1:L
X(k) = X(k)+x(n)*exp(-1i*2*pi*k*n/L); end end
n = 0:255;
L = length(n);
Fs1 = 1;
x1 = cos(5*pi*n/16);
Fs2 = 25000;
x2 = square(2*pi*1000*n/Fs2,50); tic
X1 = dft(x1);