用MATLAB实现序列圆周卷积
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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点圆周卷积