文档介绍:Matlab实验报告
学院:信息与通信工程学院
班级:201321113
学号:2013210381
班内序号:18
姓名:石雪原
实验原理
重叠相加法和重叠保留法的实质都是以逐段地方式通过循环卷积来完成线性卷积的计算。将输入序列x(n)进行分段,每段长为N,且N≥M(M为有限长因果序列h(n)的长度),x(n)逐段与h(n)进行循环卷积,在重叠保留法中需在x(n)序列首部加入长度为M-1的0序列。
在算法中,在获得N个点的输入后,进行N+M-1点循环卷积计算,之后输出N个点。通过for循环逐段进行循环卷积,使用FFT和IFFT计算两个有限长序列的N点循环卷积结果。
源代码和流程图
重叠相加法代码
function [Y]=overpl(x,h,N)
Lx=length(x); %序列长度
M=length(h); %h(n)长度
x=[x,zeros(1,N-1)];
t=zeros(1,M-1);
Y=zeros(1,Lx+M-1);
a=floor(Lx/N);
for k=0:a
A=x(k*N+1:k*N+N);
y1=fft(A,Lx+M-1); %利用fft进行运算
y2=fft(h,Lx+M-1);
y3=y1.*y2;
q=ifft(y3,Lx+M-1);
Y(k*N+1:k*N+M-1)=q(1:M-1)+t(1:M-1);
Y(k*N+M:k*N+N)=q(M:N);
t(1:M-1)=q(N+1:N+M-1);
end
Y(1:Lx+M-1);
对应流程图
图一
图一
图二
图一:每段利用fft和ifft实现循环卷积
图二:对x(n)逐段进行循环卷积然后相加得输出线性卷积结果y(n)
重叠保留法代码
function[Y]=overlpsav(x,h,N)
Lx=length(x);
M=length(h);
M1=M -1;
L=N-M1;
h=[h,zeros(1,N-M)];
x=[zeros(1,M1),x,zeros(1,N-1)];
a=floor ((Lx+M1-1)/(L))+1;
Y=zeros(1,N);
for k=0:a-1
xk=x(k*L+1:k*L+N);
b=fft(xk,N);
C=fft(h,N);
Z=b.*C;
Y(k+1,:)=ifft(Z,N);
end
Y=Y(:,M:N)';
Y=(Y(:))'
对应流程图
把x前面加上(M-1)个零
将h延长至循环长度N
各段搭接长度M1,有效数据长度L
输入数据x长度及脉冲响应长度
Y中各行均去掉前M-1个样本,转置后构成新的Y
各段进行卷积
把K+1×N阶输出矩阵Y初始化
装成单列向量再转置成行向量输出
实验结果
重叠相加法
x=[1,2,3] h=[1,2,3] N=4
重叠保留法
x=[1,2,3,4,5,6,7,8,9,10] h=[1,0,-1] N=4
结果分析(有关运算量的定量分析结果)
有限长因果序列x(n)h(n)的长度分别为N和M,直接计算线性卷积y(n),y(n)可视为N个序列的叠加结果,序列长度为M,所以每生成一个序列需完成M次乘法,共需完成MN次乘法运算。这N个序列依次向右移动一位故需(N-1)(M-1)次加法运算。
按照FFT和IFFT计算线性卷积时,设L=N=M-1,整个运算过程包含了2个FFT、一个IFFT和L此乘法运算,所以,按基2频域抽选算法实现FFT或IFFT,。
讨论总结
N越大快算法的运算量越小,即实现重叠相加法和重叠保留法的运算量越小。
MATLAB软件使用方法和语言不熟悉,通过查阅书籍网络解决。
实验题目2:周期序列的谱分析
实验目的:利用 DFT分析模拟信号之频谱。
试验内容:
1、设定采样周期 T并说明原因
根据奈奎斯特取样条件,fs>=2f=2*8=16Hz,所以取 fs=20Hz,T=1/f=。
2、若令,确定该序列之周期 N并说明原因
因为 x(n)=cos( πn), 2π/= N=5.
3、绘制 10个周期内 x(n)的取值情况
T = 1/20; t = 0:T:5-T; N = 5;
figure(1);
xn = cos(16*pi*t); stem(0:10*N-1, xn(1:10*N));
title('10个周期内 x(n)的取值情况'); ylabel('x(n)'); xlabel(