刘润数字信号处理实验报告.docx

上传人:a**** 文档编号:8432 上传时间:2017-10-21 格式:DOCX 页数:43 大小:782.78KB
返回 下载 相关 举报
刘润数字信号处理实验报告.docx_第1页
第1页 / 共43页
刘润数字信号处理实验报告.docx_第2页
第2页 / 共43页
点击查看更多>>
资源描述

《刘润数字信号处理实验报告.docx》由会员分享,可在线阅读,更多相关《刘润数字信号处理实验报告.docx(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 本科实验报告 实验名称: 数字信号处理实验 课程名称: 数字信号处理实验 实验时间: 2015 年 11 月 任课教师: 李慧琦 实验地点: 4-423 实验教师: 何冰松,范哲意 实验类型: 原理验证 综合设计 自主创新 学生姓名: 刘润 学号 /班级: 1120131167/05411301 组 号: 学 院: 信息与电子学院 同组搭档: 专 业: 电子科学与技术(微电子方 向) 成 绩: 目录 实验 1 利用 DFT 分析信号频谱 . 2 一、实验目的 . 2 二、实验原理 . 2 三、实验内容 . 4 四、实验代码及实验结果 . 4 五、心得与体会 . 14 实验 2 利用 FFT

2、计算线性卷积 . 14 一、实验目的 . 14 二、实验原理 .14 三、实验内容 . 17 四、实验代码及实验结果 . 17 五、心得与体会 . 22 实验 3 IIR 数字滤波器 . 22 一、实验目的 . 23 二、实验原理 . 23 三、实验内容 . 23 四、实验代码及实验结果 . 23 五、心得与体会 . 28 实验 4 FIR 数字滤波器 . 28 一、实验目的 . 29 二、实验原理 . 29 三、实验内容 . 29 四、实验代码及实验结果 . 29 五、心得与体会 . 41 收获感悟 . 42 j实验 1 利用 DFT 分析信号频谱 一、实验目的 1.加深对 DFT 原理的理

3、解。 2.应用 DFT 分析信号频谱。 3.深刻理解利用 DFT 分析信号频谱的原理,分析现实过程现象及解决办法。 二、实验原理 1、 DFT 和 DTFT 的关系 有 限 长 序 列 x(n) 的 离 散 时 间 傅 里 叶 变 换 X (e j) 在 频 率 区 间 (0 2) 的 N 个等分点 x(0), x(1), x(k ), x(N 1) 上的 N 个取样值 可以由下式表示: X (e N 1 ) |2k x(n)e 2 kn N X (k ) 0 k N 1 (2 1) k 0 由上式可知,序列 x(n) 的 N 点 DFT X (k ) ,实际上就是 x(n) 序列的 DTFT

4、 在 N 个等间隔频率点 X (0), X (1), X (k ), X (N 1) 上样本 X (k ) 。 2、利用 DFT 求 DTFT 方法 1:由 X (k ) 恢复出 X (e j) 的方法如图 2.1 所示: 图 2.1.由 N 点 DFT 恢复频谱 DTFT 的流程 由图 2.1 所示流程图可知: X (e j) x(n)ejn 1 X (k)W kn ejn (2 2) N 由式 2-2 可以得到 nN N nk 0 x(e j) X (k)(2k ) (2 3) k 1 N j 其中 (x) 为内插函数 sin(N) j N 1 () 2 e 2(2 4) N sin( 2

5、) 方法 2:然而在实际 MATLAB 计算中,上诉插值公式不见得是最好的方法。 由于 DFT 是 DTFT 的取样值,其相邻的两个频率样本点的间距为 2N ,所以如果 我们增加数据的长度 N,使得得到的 DFT 谱线就更加精细,其包络就越接近 DTFT 的结果,这样可以利用 DFT 来近似计算 DTFT。如果没有更多的数据,可以通过 补零来增加数据长度。 3、利用 DFT 分析连续时间信号的频谱 采用计算机分析连续时间信号的频谱,第一步就是把连续时间信号离散化, 这里需要进行连个操作:一是采样,二是截断。 对于连续非周期信号 x(t) ,按采样间隔 T 进行采样,截取长度为 M,那么 M 1

6、 X ( j) x (t)ejt dt T x n0 (nT )ejnT (2 5) 对 X( j) 进行 N 点的频率采样,得到 X( j) | M 1 2T x(nT )e 2 kn N TXM (k ) (2 6) k NT n0 因此,可以将利用 DFT 分析连续非周期信号频谱的步骤归纳如下: ( 1)确定时域采样间隔 T,得到离散序列 x(n) ; ( 2)确定截取长度 M,得到 M 点离散序列 xM (n) x(n)w(n) ,这里的 w(n) 为窗函数。 ( 3)确定频域采样点数 N,要求 N M 。 ( 4)利用 FFT 计算离散序列的 N 点 DFT,得到 XM (k) 。

7、( 5)根据式( 2-6)由 XM (k) 计算 X( j) 采样点的近似值。 采用上诉方法计算的频谱,需要注意如下三点问题: ( 1)频谱混叠。如果不满足采样定理的条件,频谱会很出现混叠误差。对于 频谱无限宽的信号,应考虑覆盖大部分主要频率的范围。 ( 2)栅栏效应和频谱分辨率。使用 DFT 计算频谱,得到的结果只是 N 个频谱 样本值,样本值之间的频谱是未知的,就像通过一个栅栏观察频谱,称为 “ 栅栏 效应 ” 。频谱分辨率与记录长度成正比,提高频谱分辨率,就要增加记录时间。 ( 3)频谱泄露。对于信号截断会把窗函数的频谱会引入到信号频谱中,造成 j 频谱泄露。解决这 问题的主要办法是采用

8、旁瓣小的窗函数,频谱泄露和窗函数均 会引起误差。 因此,要合理选取采样间隔和截取长度,必要时还需考虑适当的窗。 对于连续周期信号,我们在采用计算机进行计算时,也总是要进行截断,序列 总是有限长的,仍然可以采用上诉方法近似计算。 4、可能用到 MATLAB 函数与代码 实验中的 DFT 运算可以采用 MATLAB 中提供的 FFT 来实现。 DTFT 可以利用 MATLAB 矩阵运算的方法进行计算。 三、实验内容 1. x(n) 2, 1,1,1 ,完成如下要求: ( 1)计算其 DTFT,并画出 , 区间的波形。 ( 2)计算 4 点 DFT,并把结果显示在( 1)所画的图形中。 ( 3)对

9、x(n) 补零,计算 64 点 DFT,并显示结果。 ( 4)是否可以由 DFT 计算 DTFT,如果可以,请编程实现。 解: 实验代码: 解:( 1) 实验代码 x=2 -1 1 1; n=0:3; w=-pi:0.01*pi:pi; X=x*exp(-j*n*w); subplot(211); plot(w,abs(X);xlabel(Omega/pi);title(Magnitude);axis tight subplot(212); plot(w,angle(X)/pi);xlabel(Omega/pi);title(Phase);axis tight Magnitude 3 2 1

10、-3 -2 -1 0 1 2 3 / Phase 0.5 0 -0.5 -3 -2 -1 0 1 2 3 /(2)实验代码 w=(-pi):0.01*pi:pi; Y=2+(-1)*exp(-i*w)+exp(-i*2*w)+exp(-i*3*w); x=2,-1,1 1; n=0:3; X=fft(x); subplot(2,1,1); plot(w,abs(Y);hold on; stem(n,X,filled); subplot(2,1,2); plot(w,angle(Y);hold on; stem(n,angle(X),filled); 4 3 2 1 0 -4 -3 -2 -1

11、0 1 2 3 4 2 1 0 -1 -2 -4 -3 -2 -1 0 1 2 3 4 (3)实验代码 x=zeros(1,64); x(1)=2;x(2)=-1;x(3)=1;x(4)=1; X=fft(x,64); subplot(2,1,1); n=0:63; stem(n,X,filled); subplot(2,1,2); stem(n,angle(X),filled); 4 3 2 1 0 -1 0 10 20 30 40 50 60 70 2 1 0 -1 -2 0 10 20 30 40 50 60 70 ( 4)根据以上结果, DFT 是对 DTFT 在频域上离散点的取值。在

12、序列补零后,只要 离散的间隔足够小, DFT 就越来越逼近 DTFT,所以当令序列后面补无穷多个零的 时候,完全可以由 DFT来计算 DTFT。 2. 考察序列 x(n) cos(0.48n) cos(0.52n) ( 1) 0 n 10 时,用 DFT 估计 x(n) 的频谱;将 x(n) 补零加长到长度为 100 点序 列用 DFT 估计 x(n) 的频谱。要求画出相应波形。 ( 2) 0 n 100 时,用 DFT 估计 x(n)的频谱,并画出波形 (3)根据实验结果,分析怎样提高频谱分辨率。 解: (1) n=0:10; x=cos(0.48*pi*n)+cos(0.52*pi*n);

13、 X=fft(x); subplot(2,1,1); stem(n,abs(X),filled); subplot(2,1,2); stem(n,angle(X),filled); 补零后: n=0:10; x=cos(0.48*pi*n)+cos(0.52*pi*n); X=fft(x,100); m=0:99; subplot(2,1,1); stem(m,abs(X),filled); subplot(2,1,2); stem(m,angle(X),filled); 15 10 5 0 0 10 20 30 40 50 60 70 80 90 100 2 1 0 -1 -2 0 10 2

14、0 30 40 50 60 70 80 90 100 (2) n=0:100; x=cos(0.48*pi*n)+cos(0.52*pi*n); X=fft(x); subplot(2,1,1); stem(n,abs(X),filled); subplot(2,1,2); stem(n,angle(X),filled); 60 40 20 0 0 10 20 30 40 50 60 70 80 90 100 4 2 0 -2 -4 0 10 20 30 40 50 60 70 80 90 100 (3) 频谱分辨率与信号采集时间成反比,它的定义是在使用 DFT时,在频DFT 率轴上的所能得到

15、的最小频率间隔,也就是与采样间隔成反比。所以我们可以通 过增加时域内信号采样点数来增加分辨率。 3、已知信号,其中,。从x(t)的表达式可以看出,它包含三个 频率的正弦波, 但是从其时域波形(图 E2-1)来看,似乎是一个正弦信号,利用 DFT做频谱分析, 确定适合的参数,使得到的频谱的频率分辨率符合需要。 n=0:0.01:1; x=0.15*sin(2*pi*n)+sin(4*pi*n)-0.1*sin(6*pi*n); y=fft(x); subplot(211); stem(0:100,abs(y),filled); subplot(212); stem(0:100,angle(y),

16、filled); 50 40 30 20 10 0 0 10 20 30 40 50 60 70 80 90 100 4 2 0 -2 -4 0 10 20 30 40 50 60 70 80 90 100 由幅频特性曲线可以看出,这个信号中有三个频率成分。虽然时域波形像正弦波,但是 实际上是三个正弦波成分的叠加。 4、利用 DFT 近似分析连续时间信号 x(t) e0.1t u(t) 的频谱(幅度谱)。分析采用不同 的采样间隔和截取长度进行计算的结果,并最终确定适合的参数。 实验代码: N 从 0 到 50,取样间隔为 1,共取 51 个点 n=0:50; x=exp(-0.1*n); X1

17、=fft(x); stem(n,abs(X1),filled); 12 10 8 6 4 2 0 0 5 10 15 20 25 30 35 40 45 50 N 从 0 到 100,取样间隔为 1,共取 101个点 n=0:100; x=exp(-0.1*n); X2=fft(x); stem(n,abs(X2),filled); 12 10 8 6 4 2 0 0 10 20 30 40 50 60 70 80 90 100 N 从 0 到 100,取样间隔为 2,共取 51 个点 n=0:100; x=exp(-0.1*n); X2=fft(x); stem(n,abs(X2),fill

18、ed); 12 10 8 6 4 2 0 0 10 20 30 40 50 60 70 80 90 100 增加抽样序列的长度和减小抽样间隔都可以提高频谱分辨率。由以上三幅图像可以看出, 当 N的取值为 0到 100,抽样间隔为 2时,基本满足要求。 五、实验心得与体会 这次实验使我我加深了对 DFT 原理的理解,尤其是掌握了用 DFT 来模拟 DTFT 的过程。在上 课时,我很难理解这部分,做完试验我后准确地认识到了 DFT 是 DTFT 在几个点的抽样值这一 概念。而且我掌握了利用 MATLAB 来分析信号频谱的方法,这对我以后信号方面的学习提供了 一个很好的辅助工具。这次实验令我收获很大

19、。 实验 2 利用 FFT 计算线性卷积 一、实验目的 1.掌握利用 FFT 计算线性卷积的原理及具体实现方法。 2.加深理解重叠相加法和重叠保留法。 3.考察利用 FFT 计算线性卷积各种方法的适用范围。 二、实验原理 1.线性卷积与圆周卷积 设 x(n)为 L 点序列, h(n)为 M 点序 列, x(n)和 h(n)的线性卷积为 y1 (n) x(n)* h(n) mx(m)h(n m) y1 (n) 的长度为 L+M-1 x(n)和 h(n)的圆周卷积为 N 1 y(n) x(n) h(n) N x(m)h(n m)N RN (n) m0 圆周卷积与线性卷积相等而不产生交叠的必要条件为

20、 N L M 1 圆周卷积定理:根据 DFT 性质, x(n)和 h(n)的 N 点圆周卷积的 DFT 等于它们的 DFT 的乘积: (3-4) 2.快速卷积 快速卷积发运用圆周卷积实现线性卷积,根据圆周卷积定理利用 FFT 算法实 现圆周卷积。可将快速卷积运算的步骤归纳如下: (1)必须选择 ;为了能使用基 -2 算法,要求 。采用补零的 办法使得 x(n)和 h(n)的长度均为 N。 (2)计算 x(n)和 h(n)的 N 点 FFT。 x(n) F FT X (k ) h(n) F FT H (k ) 3)组成乘积 Y (k ) X (k )H (k ) (4)利用 IFFT 计算 Y(

21、k)的 IDFT,得到线性卷积 y(n) Y (k ) IFFT y(n) 3.分段卷积 我们考察单位取样响应为 h(n)的线性系统,输入为 x(n),输出为 y(n),则 当输入序列 x(n)极长时,如果要等 x(n)全部集齐时再开始进行卷积,会使 输出有较大延时;如果序列太长,需要大量存储单元。为此,我们把 x(n)分段, 为别求出每段的卷积,合在一起得到最后的总输出。这称为分段卷积。分段卷积 可以细分为重叠保留法和重叠相加法。 重叠保留法:设 x(n)的长度为 , h(n)的长度为 M。把序列 x(n)分成多段 N 点序列 ,每段雨前一段重写 M-1 个样本。并在第一个输入段前面补 M-

22、1 个 零。计算每一段与 h(n)的圆周卷积,其结果中前 M-1 个不等与线性卷积,应当 i i i i 舍去,只保留后面 N-M+1 个正确的输出样本,把它们合起来得到总的输出。 利用 FFT 实现重叠保留法的步骤如下: (1)在 x(n)前面填充 M-1 个零,扩大以后的序列为 (2)将 x(n)分为若干段 N 点子段,设 L=N-M+1 为每一段的有效长度,则第 i 段的 数据为: (3)计算每一段与 h(n)的 N 点圆周卷积,利用 FFT 计算圆周卷积 x (n) F FT X (k ) h(n) F FT H (k ) Y (k ) F FT X (k )H (k ) ( ) IF

23、FT ( ) Yi k y n (4)舍去每一段卷积结果的前 M-1 个样本,连接剩下的样本得到卷积结果 y(n)。 重叠相加法: 设 h(n)长度为 M,将信号 x(n)分解成长为 L 的子段。以 表示 没断信号,则: x(n) xi (n) i 0 每一段卷积 的长度为 L+M-1,所以在做求和时,相邻两段序列由 M-1 个样本 重叠,即前一段的最后 M-1 个样本和下一段前 M-1 个样本序列重叠,这个重叠部 分相加,再与不重叠的部分共同组成 y(n)。 利用 FFT 实现重叠保留法的步骤如下: (1)将 x(n)分为若干 L 点子段 。 (2)计算每一段与 h(n)的卷积,根据快速卷积

24、法利用 FFT 计算卷积。 (3)将各段相加,得到输出 y(n)。 y(n) yi (n iL) i0 4、可能得到的 MATLAB 函数 实验中 FFT 运算可采用 MATLAB 中提供的函数 fft 来实现。 三、实验内容 假设要计算序列 x(n)=u(n)-u(n-L),0nL 和 h(n)=cos(0.2n),0nM 的线性卷积完成以下实验内容。 1.设 L=M,根据线性卷积的表达式和快速卷积的原理分别编程实现计算两个序列 线性卷积的方法 ,比较当序列长度分别为 8,16,32,64,256,512,1024 时两种方法 计算线性卷积所需时间。 解:实验代码 线性卷积: L=input

25、(L=); M=input(M=); x=1; h=1; S=0; for k=1:L+M-2 S=S 0; end for i=1:L-1 x=1 x; h=h cos(0.2*pi*i); end tic for j=1:L for i=1:M y=x(i)*h(j); A(i+j-1)=A(i+j-1)+y; end end toc 实验结果 L=8 M=8 Elapsed time is 0.000005 seconds. L=16 M=16 Elapsed time is 0.000011 seconds. L=32 M=32 Elapsed time is 0.000034 sec

26、onds. L=64 M=64 Elapsed time is 0.000107 seconds. L=256 M=256 Elapsed time is 0.001564 seconds. L=512 M=512 Elapsed time is 0.006052 seconds. L=1024 M=1024 Elapsed time is 0.024066 seconds. 实验代码 快速卷积: L=input(L=); M=input(M=); x=1; h=1; for i=1:L-1 x=1 x; h=h cos(0.2*pi*i); end Num=pow2(nextpow2(M+L

27、-1); tic xs=fft(x,Num); hs=fft(h,Num); ys=xs.*hs; y=ifft(ys,Num); toc 实验结果 L=8 M=8 Elapsed time is 0.000072 seconds. L=16 M=16 Elapsed time is 0.000437 seconds. L=32 M=32 Elapsed time is 0.000683 seconds. L=64 M=64 Elapsed time is 0.000781 seconds. L=256 M=256 Elapsed time is 0.002095 seconds. L=512

28、 M=512 Elapsed time is 0.011870 seconds. L=1024 M=1024 Elapsed time is 0.003427 seconds. 分析:可见在在相同长度下,快速卷积比线性卷积快差不多一倍的时间。 2当 L=2048 且 M=256 时比较直接计算线性卷积和快速卷积所需的时间 ,进一步 考察当 L=4096 且 M=256 时两种算法所需的时间。 解: 实验代码 线性卷积: L=input(L=); M=input(M=); x=1; y=1; A=0; for k=1:L+M-2 A=A 0; end for i=1:L-1 x=1 x; end

29、 for j=1:M-1 y=y cos(0.2*pi*j); end tic for j=1:M for i=1:L z=x(i)*y(j); A(i+j-1)=A(i+j-1)+z; end end toc 快速卷积: L=input(L=); M=input(M=); x=1; y=1; for i=1:L-1 x=1 x; end for j=1:M-1 end y=y cos(0.2*pi*j); N=pow2(nextpow2(M+L-1); tic xk=fft(x,N); yk=fft(y,N); zk=xk.*yk; z=ifft(zk,N); toc 实验结果: 线性: L

30、=2048 M=256 Elapsed time is 0.012061 seconds. 快速: L=2048 M=256 Elapsed time is 0.000581 seconds. 分析:快速卷积比现行 卷积快。 3. 编程实现利用重叠相加法计算两个序列的线性卷积 ,考察 L=2048 且 M=256 时 计算线性卷积的时间 ,与 2 题的结果进行比较。 解: Lx=input(L=); M=input(M=); N=M+1; x=1; y=1; for i=1:L-1 x=1 x; y=y cos(0.2*pi*i); end x=x,zeros(1,N-1); t=zeros(

31、1,M-1); Y=zeros(1,Lx+M-1); a=floor(Lx/N); tic for k=0:a A=x(k*N+1:k*N+N); y1=fft(A,Lx+M-1); 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 toc L=2048 M=256 实验结果: L=2048 M=256 Elapsed time is 0.007656 seconds. 分析:较

32、第 2 题结果快。 4. 编程实现利用重叠保留法计算两个序列的线性卷积 ,考察 L=2048 且 M=256 时 计算线性卷积的时间 ,与 2 题的结果进行比较。 解: 实验代码: Lx=input(L=); M=input(M=); N=M+1; x=1; y=1; for i=1:L-1 x=1 x; y=y cos(0.2*pi*i); end 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); tic for k=0:a-1 xk=x

33、(k*L+1:k*L+N); b=fft(xk,N); C=fft(h,N); Z=b.*C; Y(k+1,:)=ifft(Z,N); end toc L=2048 M=256 pk nt k A 实验结果: L=2048 M=256 Elapsed time is 0.002848 seconds. 分析:较第 2 题结果快。 五、心得与体会 本次实验要求我们掌握利用 FFT 计算线性卷积的原理及具体实现方法,通过 实验加深理解重叠相加法和重叠保留法并考察利用 FFT 计算线性卷积各种方法 的适用范围。 本次实验让我切实看到了 FFT 算法的高效性及实用性,同时对重叠保留法、 重叠相加法也有

34、了更深的认识,对以后的实验有了很好的理论基础,受益颇多。 实验 3 IIR 数字滤波器设计 一、实验目的 1.掌握利用脉冲响应不变法设计 IIR 数字滤波器的原理及具体方法。 2.加深理解数字滤波器和模拟滤波器之间的技术指标转化。 3.掌握脉冲响应不变法设计 IIR 数字滤波器的优缺点及适用范围。 二、实验原理 1、基本原理 从时域响应出发,使数字滤波器的单位脉冲响应 h(n)模仿模拟滤波器的单 位冲激响应 ha (t) , h(n)等于 ha (t) 的取样值。 2、变换方法 思路: H (s) 拉 氏 变 换 h (t) 时 域 采 样 h (nT ) h(n) z变 换 H (z) a

35、a a N (1)将 H a (s) 进行部分分式展开 Ha (s) k k 1 s pk N (2)对 H a (s) 进行拉式变换 ha (t) Ak e u(t) k 1 N N (3)对 ha (t) 时域采样得到 h(n) h(n) Ak e u(nT ) Ak (e ) u(n) pk nt pkT n N (4)对 h(n)进行 z 变换 H (z) k 1 Ak p T 1 k 1 3、设计步骤 k 1 1e k z (1)确定数字滤波器的性能指标 p ,st , Rp , As 。 (2)将数字滤波器频率指标转换成响应的模拟滤波器频率指标 pp T st st T (3)根据指标 p , st , Rp 和 As 设计模拟滤波器 H a (s) 。 N A (4)将 H a (s) 展成部分分式形式 H a (s)= 。 k 1 s pk k N N 1 0 (5)把模拟极点 p 转换成数字极点 e pk T ,得到数字滤波器 N H (z) Ak 。 p T 1 k 1 1e k z 可见 H a (s) 至 H(z)间的变换关系为 1 1 z s sk 1 eskT z1 z

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

当前位置:首页 > 期刊短文 > 期刊

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁