用MATLAB实现序列圆周卷积

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字信号处理实验报告

实验项目名称:用MATLAB实现序列的圆周卷积

实验日期: 2012-11-28 实验成绩:

实验评定标准:

一、实验目的

通过本实验,掌握一些基本而且重要的离散时间信号,熟悉基本离散时间信号的MATLAB实现方法。

二、实验器材

PC机,MATLAB软件。

三、实验内容

计算两序列x1(n)={1,2,3,4,5},x2(n)={1,2,3,4,5,4,3,2,1}的圆周卷积。

四、实验结果

实验代码:

clear all

close all

clc

x1=[1,2,3,4,5,6,7,8];

x2=[1,2,3,4,5,6,7,8,7,6,5,4,3,2, 1]; N=length(x1)+length(x2); n=0:N-1

n1=0:N-2;

n2=0:N-3;

y1=circonvt(x1,x2,N);

y2=circonvt(x1,x2,N-1);

y3=circonvt(x1,x2,N-2);

x1=[x1 zeros(1,N-length(x1))]; x2=[x2 zeros(1,N-length(x2))]; Xf1=dft(x1,N);

Xf2=dft(x2,N);

Xf=Xf1.*Xf2;

x=idft(Xf,N);

x=real(x);

subplot(2,3,1)

stem(n,x1);

title('x1(n)');

subplot(2,3,2)

stem(n,x2); title('x2(n)')

subplot(2,3,3);

stem(n,x);

title('x(n)=IDFT(X(k))'); subplot(2,3,4);

stem(n,y1);

title('N点圆周卷积'); subplot(2,3,5);

stem(n1,y2);

title('N-1点圆周卷积'); subplot(2,3,6);

stem(n2,y3);

title('N-2点圆周卷积');

function y=circonvt(x1,x2,N)

if length(x1)>N

error('N 必须 >= x1的长度') end

if length(x2)>N

error('N 必须 >= x2的长度') end

x1=[x1 zeros(1,N-length(x1))]; 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

H(n,:)=cirshift(x2,n-1,N); end

y=x1*H;

function y=cirshift(x,m,N) if length(x)>N

error('N 必须 >= x的长度') end

x=[x zeros(1,N-length(x))];

n=[0:1:N-1];

n=mod(n-m,N);

y=x(n+1);

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;

function [xn]=idft(Xk,N)

%计算逆离散傅里叶变换

%[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;

实验结果:

五、 实验结果分析

x(n)=IDFT(X (k))

N 点圆周卷

N-1点圆周卷

N-2点圆周卷积

相关文档
最新文档