MATLAB实验报告北京邮电大学
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab实验报告
学院:信息与通信工程学院班级:201321113
学号:2013210381
班内序号:18
姓名:石雪原
实验题目1.实现重叠相加和重叠保留算法一.实验原理
重叠相加法和重叠保留法的实质都是以逐段地方式通过循环卷积来完成线性卷积的计算。将输入序列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=[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 ,共需完成1.5L 次乘法和加法运算。 五. 讨论总结
1. N 越大快算法的运算量越小,即实现重叠相加法和重叠保留
法的运算量越小。
2. MATLAB 软件使用方法和语言不熟悉,通过查阅书籍网络解
决。
实验题目2:周期序列的谱分析
实验目的:利用 DFT 分析模拟信号()()cos 16a x t t π=之频谱。
试验内容:
1、设定采样周期 T 并说明原因
根据奈奎斯特取样条件,fs>=2f=2*8=16Hz ,所以取 fs=20Hz ,T=1/f=0.05s 。
2、若令()cos(16)x n nT π=,确定该序列之周期 N 并说明原因 因为 x(n)=cos(0.8 πn), 2π/0.8π=2.5所以周期 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('n');
4、令
x1(n)表示x(n)的主值序列,绘制|DFT(x1(n)|,解释取值情况
figure(2);
x1n = xn(1:N); stem(0:N-1, x1n);
title('x(n)的主值序列'); ylabel('x1(n)'); xlabel('n');
figure(3);
Xk = fft(x1n, N); stem(0:N-1, abs(Xk));
title('|DFT(x1(n))|'); ylabel('X1(k)'); xlabel('k');
所得X1(k)取值即为x(n)的5点(一个周期内)DFT结果,为清晰谱