当前位置:文档之家› 用MATLAB实现序列圆周卷积

用MATLAB实现序列圆周卷积

数字信号处理实验报告
实验项目名称:用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点圆周卷积。

相关主题