2013数字信号处理实验讲义 - 实验二

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 本例说明补零序列的离散傅立叶变换

相关文档
最新文档