2013数字信号处理实验讲义 - 实验二
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二 离散傅立叶变换及谱分析
一、 实验目的
1.掌握离散傅里叶变换的计算机实现方法。
2.检验序列离散傅里叶变换的性质。
3.掌握计算序列的循环卷积的方法。
4.学习用DFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差,以便在实际中正确应用DFT 。
二、 实验内容
1.实现序列的离散傅里叶变换并对结果进行分析。(自己选择序列,要求包括复序列,实序列,实偶序列,实奇序列,虚奇序列)
2.计算序列循环卷积。
3.计算实序列离散傅里叶变换并检验DFT 性质。
4.实现补零序列的离散傅里叶变换。
6.实现高密度谱和高分辨率谱,并比较二者的不同。
三、 实验报告要求
见各程序要求
%以下为4个扩展函数
% (1)离散傅立叶变换 ∑-==
1
0)()(N k nk N W n x k X 采用矩阵相乘的方法
function [Xk]=dft(xn,N)
n=[0:1:N-1];
k=[0:1:N-1];
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^(nk);
Xk=xn*WNnk;
%(2)逆离散傅立叶变换 ∑-=-=10)(1)(N k nk N W k X N
n x
function [xn]=idft(Xk,N)
n=[0:1:N-1];
k=[0:1:N-1];
WN=exp(-j*2*pi/N);
nk=n'*k;
WNnk=WN.^(-nk);
xn=(Xk*WNnk)/N;
% (3) 实序列的分解 % 实序列可分解为共扼对称分量 ]x((-n))[x(n)*(1/2)xec N +=
% 和共扼反对称分量 ]x((-n))-[x(n)*(1/2)xoc N =
function [xec,xoc]=circevod(x)
N=length(x);
n=0:(N-1);
xec=0.5*(x+x(mod(-n,N)+1)); %根据上面的公式计算,mod 函数为取余
xoc=0.5*(x-x(mod(-n,N)+1));
% (4) 序列的循环移位 N m n x n y ))(()(-=
function y=cirshftt(x,m,N)
if length(x)>N
error('N mustbe >= the length of x') %要求移位周期大于信号长度
end
x=[x zeros(1,N-length(x))];
n=[0:1:N-1];
n=mod(n-m,N);
y=x(n+1);
%例1 本例检验实序列的性质DFT[xec(n)]=Re[X(k)] DFT[xoc(n)]=Im[X(k)] % 设 x(n)=10*(0.8).^n 0<=n<=10 将x(n)分解为共扼对称及共扼反对称部分%实验报告要求:(1)将实验结果画出(2)实验结果说明什么
n=0:10;
x=10*(0.8).^n;
[xec,xoc]=circevod(x);
subplot(2,1,1);stem(n,xec); %画出序列的共扼对称分量
title('Circular -even component')
xlabel('n');ylabel('xec(n)');axis([-0.5,10.5,-1,11])
subplot(2,1,2);stem(n,xoc); %画出序列的共扼反对称分量
title('Circular -odd component')
xlabel('n');ylabel('xoc(n)');axis([-0.5,10.5,-4,4])
figure(2)
X=dft(x,11); %求出序列的DFT
Xec=dft(xec,11); %求序列的共扼对称分量的DFT
Xoc=dft(xoc,11); %求序列的共扼反对称分量的DFT
subplot(2,2,1);stem(n,real(X));axis([-0.5,10.5,-5,50])
title('Real{DFT[x(n)]}');xlabel('k'); %画出序列DFT的实部
subplot(2,2,2);stem(n,imag(X));axis([-0.5,10.5,-20,20])
title('Imag{DFT[x(n)]}');xlabel('k'); %画出序列DFT的虚部
subplot(2,2,3);stem(n,Xec);axis([-0.5,10.5,-5,50])
title('DFT[xec(n)]');xlabel('k');
subplot(2,2,4);stem(n,imag(Xoc));axis([-0.5,10.5,-20,20])
title('DFT[xoc(n)]');xlabel('k');
% 例2 本例为计算序列的循环卷积程序
% 运行之前应在命令窗口输入 x1,x2,N 的值
%实验报告要求:自己选择2个序列进行计算,将实验结果写出
if length(x1)>N
error('N must be >= the length of x1')
end
if length(x2)>N
error('N must be >= the length of x2')
end
x1=[x1 zeros(1,N-length(x1))]; %将x1,x2补0成为N长序列
x2=[x2 zeros(1,N-length(x2))];
m=[0:1:N-1];
x2=x2(mod(-m,N)+1); %该语句的功能是将序列翻褶,延拓,取主值序列
H=zeros(N,N);
for n=1:1:N %该for循环的功能是得到x2序列的循环移位矩阵
H(n,:)=cirshftt(x2,n-1,N); %和我们手工计算循环卷积得到的表是一致的
end
y=x1*H' %用矩阵相乘的方法得到结果
%例4 本例说明补零序列的离散傅立叶变换