北邮大《数字信号处理》Matlab实验报告

上传人:豆浆 文档编号:28686136 上传时间:2018-01-19 格式:DOC 页数:20 大小:1.18MB
返回 下载 相关 举报
北邮大《数字信号处理》Matlab实验报告_第1页
第1页 / 共20页
北邮大《数字信号处理》Matlab实验报告_第2页
第2页 / 共20页
北邮大《数字信号处理》Matlab实验报告_第3页
第3页 / 共20页
北邮大《数字信号处理》Matlab实验报告_第4页
第4页 / 共20页
北邮大《数字信号处理》Matlab实验报告_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《北邮大《数字信号处理》Matlab实验报告》由会员分享,可在线阅读,更多相关《北邮大《数字信号处理》Matlab实验报告(20页珍藏版)》请在金锄头文库上搜索。

1、 北京邮电大学 数字信号处理Matlab 实验学院:班级:姓名:学号:班内序号:实验一【实验要求】实现重叠相加和重叠保留算法,完成线性卷积的分段计算。【实验原理】一、算法产生背景DFT 是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。对于线性非移变离散系统,可由线性卷积表示时域输入输出关系。即 y(n)=x(n)*h(n)。通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。因此,产生了重叠相加法和重叠保留法两种典型的算法,用以快速计算线性卷积,成为了 DFT 的一个重要应用。二、算法基本思想1.重叠相加法重叠相加法是将待过

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

3、-1 个点舍去,保留重叠的部分并输出,则可获得序列 y(n)。【流程图设计】1.重叠相加法2.重叠保留法【MATLAB 源代码】1.重叠相加法(1)function y = ovrlplus (x,h,N) %重叠相加法实现 M = length(h); %获得 h(n)的长度 if N Nerror(N must be=the length of x1)endif length(x2)Nerror(N must be=the length of x1)endx1=x1 zeros(1,N-length(x1);x2=x2 zeros(1,N-length(x2);m=0:1:N-1;x2=x

4、2(mod(-m,N)+1); H=zeros(N,N);for n=1:1:NH(n,:)=cirshftt(x2,n-1,N);endy=x1*conj(H);(3)function y=cirshftt(x,m,N)%循环移位实现if length(x)Nerror(N must be = the length of x)endx=x zeros(1,N-length(x);%补零函数(x(n)的长度小于 N,将不够的地方全部补零)n=0:1:N-1; n=mod(n-m,N);y=x(n+1);2.重叠保留法(1)functiony=ovrlpsav(x,h,N)%实现重叠保留的主函数

5、Lenx=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);K=floor(Lenx+M1-1)/(L);Y=zeros(K+1,N);for k=0:Kxk=x(k*L+1:k*L+N);Y(k+1,:)=circonvt(xk,h,N);endY=Y(:,M:N);y=(Y(:);(2)functiony=circonvt(x1,x2,N)%循环卷积if length(x1)Nerror(N must be=the length of x1)endif length(x2)N

6、error(N must be=the length of x1)endx1=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:NH(n,:)=cirshftt(x2,n-1,N);endy=x1*conj(H);(3)function y=cirshftt(x,m,N)%循环移位if length(x)Nerror(N must be = the length of x)endx=x zeros(1,N-length(x);%补零函数(

7、x(n)的长度小于 N,将不够的地方全部补零)n=0:1:N-1; n=mod(n-m,N);y=x(n+1);(4)functionXK=dft(xn,N);%DFT 函数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;【实验结果与分析】1.重叠相加法x1=1:10x2=1,0,-1ovrlplus (x1,x2,4) 2.重叠保留法x1=1:10x2=1,0,-1ovrlpsav(x1,x2,4)【运算量分析】有限长因果序列 x(n)、h(n)的长度分别为 Lx 和 M,直接计算线性卷积 y(n),y(n

8、)可视为 M 个序列的叠加结果,序列长度为 Lx,所以每生成一个序列需完成 Lx 次乘法,共需完成 M*Lx 次乘法运算。这 M 个序列依次向右移动一位故需(Lx-1 ) *(M-1)次加法运算。N 越大快此算法的运算量相对来说越小,即实现重叠相加法和重叠保留法的运算量节省的越多。结合教材 3.5.1 节作运算量分析1.重叠相加法分段长度序列长度4 10 100 1000 1000010 0.013151 0.000266 0.018963 0.027378 0.074834100 0.001173 0.000605 0.000319 0.000917 0.0100071000 0.00993

9、6 0.002824 0.00092 0.000746 0.01392710000 0.074181 0.027121 0.006682 0.00406 0.009922100000 0.606933 0.265476 0.052852 0.030106 0.0482451000000 6.033528 2.483526 0.396206 0.246052 0.3338710000000 59.93776 25.10466 3.897444 2.328122 3.2314992.重叠保留法分段长度序列长度4 10 100 1000 1000010 0.000512 0.000225 0.001

10、249 0.000881 0.008454100 0.001014 0.000514 0.000272 0.000836 0.0088021000 0.009297 0.002402 0.000787 0.000687 0.01110710000 0.05674 0.023194 0.006122 0.003941 0.011083100000 0.558865 0.216818 0.039175 0.026044 0.0426431000000 5.221879 2.144089 0.357428 0.236277 0.32753910000000 52.2464 22.02215 3.59

11、3282 2.335725 3.251762由上表可以看出,同重叠相加法类似,随着数据规模的增大,运算耗时呈线性增长,算法的时间复杂度为 O(n),其中 n 为数据规模。同样由于分配的缓存空间只由分段长度确定,空间复杂度为 O(1)。综合考察,重叠保留法也具有较好的时间和空间复杂度。当数据量达到千万量级时,运算延时最少大约为2.335s,可运用于对信号的实时处理。【问题与分析】本次试验中遇到的主要问题就是不熟悉 Matlab 软件的使用方法和编程语言,经过认真阅读教科书和课程讲义上的 Matlab 介绍以及例题分析,终于完成代码编写和实验操作。实验二 周期序列的谱分析【实验要求】利用 DFT

12、分析模拟信号 之频谱。cos16axtt1、设定采样周期 并说明原因;T由奈奎斯特抽样定理可知,应有 f0=2fmax,取 f0=20Hz,可保证抽样后的信号不产生混叠。f0=20Hz,T0=0.05s,=T=160.05=0.8.二、若令 ,确定该序列之周期 并说明原因;()cos(16)xnTN=T=160.05=0.8, 2=2.5,N 取 2.5 的倍数 10。3、绘制 10 个周期内 的取值情况;()xnn=0:99;x=cos(0.8*pi*n);plot(n,x)4、令 表示 的主值序列,绘制 ,解释取值情况;1()xn() 1()DFTxnn=0:9;x1=cos(0.8*pi

13、*n);y=fft(x1,10);stem(abs(y);主值序列可以反映周期序列的全貌。5、令 表示 的任一周期,绘制 ,解释取值情况;1()xn() 1()DFTxnn=21:30;x2=cos(0.8*pi*n);y=fft(x2);stem(abs(y);任意周期序列的频谱应该和主值序列的频谱相同。6、令 表示 的 2 个周期,绘制 ,解释取值情况;1()xn() 1()DFTxnn=0:19;x1=cos(0.8*pi*n);y=fft(x1);stem(abs(y);取两倍周期的 DFT,结果是原点数的两倍,并在其他点补零即可。7、(选作)若 ,而 M 不是 周期的整数倍,绘制1(

14、)()xnRn()xn,解释取值情况。1()DFTn=14:29;x1=cos(0.8*pi*n);y=fft(x1);stem(abs(y);取 M=16,得 如下图,由图可见出现了失真。1()DFTxn实验三 梳状滤波器的应用【实验要求】录制一段自己的话音,时间长度及取样频率自定;对该段声音加入一次反射、三次反射和无穷多次反射。【实验原理】回声往往是原始声音衰减后的多个延迟叠加而组成的,因此回声可以用延迟单元来生成。x(n)表示原始声音信号, 为衰减系数,T 为延迟周期,回声信号.Z 变换后的系统函)(.)2()()(y2 NTnxnxnxn 数 H(Z)可由梳状滤波器实现。MATLAB

15、filter 函数可用来仿真差分方程,本次实验用的就是这个函数。【实验过程与结果】在同一张图上,绘制原声音序列 、加入一次反射后的声音序列 、加入()xn1()xn三次反射后的声音序列 和加入无穷多次反射后的声音序列 。3() I源代码:x, fs =wavread(C:UsersMoonDesktopmine.wav) ;sound(x, fs);a = 0.6; T = 0.2;%衰减系数与延时y1 = filter(1, zeros(1,T*fs-1), a, 1, x);%加一次反射sound(y1, fs); y2=filter(1,zeros(1,T*fs-1),a,zeros(1,T*fs-1),a2,1,x);%加两次反射sound(y2, fs); y3=filter(1,zeros(1,T*fs-1),a,zeros(1,T*fs-1),a2,zeros(1,T*fs-1), a3, 1, x); %加三次反射sound(y3, fs); y0 = filter(1, 1, zeros(1,T*fs-1), a, x); %加无数次反射s

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号