北邮Matlab实验报告

  • 格式:doc
  • 大小:651.16 KB
  • 文档页数:11

下载文档原格式

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

《数字信号处理》Matlab 实验

信通十三班 黄嘉慧 2012210389

一.实现重叠相加和重叠保留算法,完成线性卷积的分段计算(可任意指定()x n 及()h n );试验报告包括:

1、 对算法的概括性说明;

重叠相加法是将待过滤的信号分割成长为N 的若干段,每一段都可以和有限时宽单位取样响应作卷积,再将过滤后的各段重叠相加。建立缓存序列,每次输入N 点序列,通过 计算x(n)和h(n) 的循环卷积实现线性卷积运算,将缓存的M ‐1 点序列和卷积结果相加,并 输出前N 点作为计算结果,同时缓存后M ‐1 点,如此循环,直至所有分段计算完毕,则输出序列y(n)为最终计算结果。重叠保留法相当于将想xl(n)和h(n)作循环卷积,然后找出循环卷中相当于线性的部分。在这种情况下,将序列 y(n)分为长N 的若干段,每个输入段和前一段有 M ‐1 个重叠点。此时只需要将发生重叠的前 M ‐1 个点舍去,保留重叠的部分并输出,则可获得序列 y(n)。

2、 源代码及流程图;

流程图: 重叠相加法:

源代码:function%循环卷积

X1k = fft(x1,L);

X2k = fft(x2,L);

Yk = X1k.*X2k;

y = ifft(Yk);

function [y]=overlaplus(x,h,N)%重叠相加法

lenx=length(x);

M=length(h);

L=N+(M-1);

x=[x,zeros(1,L-1)];

K=floor(lenx/N);

for k=0:K

xk=x(k*N+1:k*N+N);

Y(k+1,:)= circular_conv(xk,h,L);

end

tn=zeros(1,M-1);

for k=0:K

Y(k+1,1:M-1)= Y(k+1,1:M-1)+tn;

tn=Y(k+1,N+1:L);

end

Y=Y(:,2:N+1)';

y=(Y(:))';

结果:

> x=[1 2 3 4 5 6 7];

h=[2 3 4 5 6 72 4 56 ];

y=overlaplus(x,h,10)

y =

7.0000 16.0000 30.0000 50.0000 142.0000 238.0000 374.0000 500.0000 615.0000 718.0000

源代码:function y = overlapsave(x,h,N)%重叠保留法

Lx = length(x);

M = length(h);

if N

N = M+1;

end

L = N+M-1;

t = zeros(1,M-1);

T = ceil(Lx/N);

x = [x,zeros(1, (T+1)*N-Lx)];

y = zeros(1, (T+1)*N);

for i=0:1:T

xi = i*N+1;

x_seg = [t,x(xi:xi+N-1)];

t = x_seg(N+1:N+M-1);

y_seg = circular_conv(x_seg,h,L);

y(xi:xi+N-1)=y_seg(M:N+M-1);

end

结果:

x=[1 2 3 4 5 6 7];

h=[2 3 4 5 6 72 4 56 ];

y=overlaplus(x,h,10)

y =

7.0000 16.0000 30.0000 50.0000 142.0000 238.0000 374.0000 500.0000 615.0000 718.0000

3、 结合教材3.5.1节作运算量分析;

若有限长因果序列x(n)和h(n)的长度分别为N 和M ,计算其线性卷积y(n),需MN 次乘法运算,(M ‐1)(N ‐1)次加法运算。如果利用循环卷积方法,按基2 时域抽选法实现L 点FFT 和IFFT 。可以看出:(1)当M 、N 取值较大且相近时,可实现对线性卷积的快速计算;(2)当M 、N 有较大差异时,线性卷积和循环卷积运算量相当,此时若希望降低线性卷积计算开销,需采用重叠相加法或重叠保留法。重叠保留法和相加运行效率与分段长度关性较强。分段数和卷积运算的序列长度为非线性关系,在实际应用中,重叠保留和相加主要用于实施信号处理,在保证实时性的要求下,输入序列的分段不能太长。

4.总结实验过程中出现的问题以及解决问题的具体措施。

利用自定义函数解决代码重复使用的问题,避免多次输入同样代码。构造分段补零不会实现,通过上网查资料后获得实现相关功能的代码

二.周期序列的谱分析

利用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 并说明原因;

2*pi/0.8pi=5/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('n');

4、 令1()x n 表示()x n 的主值序列,绘制1(())DFT x 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');