数字信号处理实验教程一基于MATLAB语言4.可能用到的MATLAB函数与代码实验中DFT运算可采用MATLAB中提供的函数f来实现。DTFT可以利用MATLAB矩阵运算的方法进行计算e-jn2X(ejn)=x[nle-n [[n, ] x[n, ] ., x[n ](2-7)n=ne-inyQ例E2-1设x(n)=(-0.8)",0≤n≤10,试用MATLAB近似计算其频谱,并绘制其[0,2元]区间的曲线。解:我们在[0,2元|区间上以0.01元进行取样,计算对应频率上频谱的样本值。%Ex_2_1.mn=0:10;x=(-0.8).^n;w=0:0.01*pi:2*pi,X=x*exp(-j*n'*w);subplot(211);plot(w,abs(X);xlabel("Omega/pi');title(Magnitude'),axis tightsubplot(212);plot(w,angle(X)/pi);xlabel(lOmega/pi);title(Phase');axis tight计算得到的频谱曲线如图2-1所示。Magnitude30/元Phase0.230/元图2-1示例信号的频谱四、实验内容1.已知x(n)=(2-1,1,1),完成如下要求:(1)计算其DTFT,并画出[-元,元]区间的波形。(2)计算4点DFT,并把结果显示在(1)所画的图形中。3
数字信号处理实验教程—基于 MATLAB 语言 3 4. 可能用到的 MATLAB 函数与代码 实验中 DFT 运算可采用 MATLAB 中提供的函数 fft 来实现。 DTFT 可以利用 MATLAB 矩阵运算的方法进行计算 N N jn jn jn N n n n j j n e e e X e x n e x n x n x n 2 1 1 ( ) [ ] [ ], [ ], , [ ] 1 2 (2-7) 例E2-1 设 n x(n) (0.8) ,0≤n≤10,试用MATLAB近似计算其频谱,并绘制其[0,2 ] 区间的曲线。 解:我们在[0,2 ]区间上以 0.01 进行取样,计算对应频率上频谱的样本值。 %Ex_2_1.m n=0:10;x=(-0.8).^n; w=0:0.01*pi:2*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 计算得到的频谱曲线如图 2-1 所示。 图 2-1 示例信号的频谱 四、实验内容 1. 已知 ( ) {2,1,1,1} x n ,完成如下要求: (1)计算其 DTFT,并画出[ , ]区间的波形。 (2)计算 4 点 DFT,并把结果显示在(1)所画的图形中
数字信号处理实验教程一基于MATLAB语言(3)对x(n)补零,计算64点DFT,并显示结果。(4)根据实验结果,分析是否可以由DFT计算DTFT,如果可以,如何实现。2.考察序列x(n)=cos(0.48m)+cos(0.52m)(1)0≤n≤10时,用DFT估计x(n)的频谱;将x(n)补零加长到长度为100点序列用DFT估计x(n)的频谱。要求画出相应波形。(2)0≤n≤100时,用DFT估计xn)的频谱,并画出波形。(3)根据实验结果,分析怎样提高频谱分辨率。3.已知信号x(t)=0.15sin(2ft)+sin(2,t)-0.1sin(2t),其中f=1Hz,f=2Hz,J,=3Hz。从x(t)的表达式可以看出,它包含三个频率的正弦波,但是,从其时域波形(图E2-1)来看,似乎是一个正弦信号,利用DFT做频谱分析,确定适合的参数,使得到的频谱的频率分辨率符合需要。1.5:0.50.51.5D0.10.20.30.40.50.60.70.80.9图 E2-14.利用DFT近似分析连续时间信号x(t)=e-0.u(t)的频谱(幅度谱)。分析采用不同的采样间隔和截取长度进行计算的结果,并最终确定适合的参数。五、实验报告要求1.简述实验目的、实验原理、实验内容和实验过程。2.列出完成各项实验内容所编写的程序代码并给出实验结果,程序代码中在必要的地方应加上注释,必要时应对实验结果进行分析。3.总结实验中的主要结论、遇到的问题及解决方法,谈谈你的收获和体会
数字信号处理实验教程—基于 MATLAB 语言 4 (3)对 x(n) 补零,计算 64 点 DFT,并显示结果。 (4)根据实验结果,分析是否可以由 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)根据实验结果,分析怎样提高频谱分辨率。 3. 已 知 信 号 ( ) 0.15sin(2 ) sin(2 ) 0.1sin(2 ) 1 2 3 x t f t f t f t , 其 中 f 1Hz 1 , f 2Hz 2 , f 3Hz 3 。从 x(t) 的表达式可以看出,它包含三个频率的正弦波,但是,从其 时域波形(图 E2-1)来看,似乎是一个正弦信号,利用 DFT 做频谱分析,确定适合的参数, 使得到的频谱的频率分辨率符合需要。 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 -1.5 -1 -0.5 0 0.5 1 1.5 图 E2-1 4. 利用 DFT 近似分析连续时间信号 ( ) ( ) 0.1 x t e u t t 的频谱(幅度谱)。分析采用不同 的采样间隔和截取长度进行计算的结果,并最终确定适合的参数。 五、实验报告要求 1. 简述实验目的、实验原理、实验内容和实验过程。 2. 列出完成各项实验内容所编写的程序代码并给出实验结果,程序代码中在必要的地 方应加上注释,必要时应对实验结果进行分析。 3. 总结实验中的主要结论、遇到的问题及解决方法,谈谈你的收获和体会
数字信号处理实验教程一基于MATLAB语言实验2利用FFT计算线性卷积一、实验目的1.掌握利用FFT计算线性卷积的原理及具体实现方法。2.加深理解重叠相加法和重叠保留法。3.考察利用FFT计算线性卷积各种方法的适用范围。二、实验设备与环境计算机、MATLAB软件环境。三、实验基础理论1.线性积与圆周卷积设x(n)为L点序列,h(n)为M点序列,x(n)和h(n)的线性卷积为(3-1)y(n)= x(n)* h(n) = x(m)h(n-m)m=-ocyi(n)的长度为L+M-1。x(n)和h(n)的N点圆周卷积为-x(m)h(n-m)R(n)(3-2)y(n)=x(n) @ h(n)= )m=0圆周卷积与线性卷积相等而不产生交叠的必要条件为N≥L+M-1(3-3)圆周卷积定理:根据DFT的性质,x(n)和h(n)的N点圆周卷积的DFT等于它们DFT的乘积DFT[x(n) ? h(n))=X(k)H(k)(3-4)2.快速卷积快速卷积算法用圆周卷积实现线性卷积,根据圆周卷积定理利用FFT算法实现圆周卷积。可以将快速卷积的步骤归纳如下:(1)为了使线性卷积可以用圆周卷积来计算,必须选择N≥L+M-1;同时为了能使用基-2FFT完成卷积运算,要求N=2。采用补零的办法使x(n)和h(n)的长度均为N.(2)计算x(n)和h(n)的N点FFTx(n)FFT→X(k)h(n)FFTH(k)5
数字信号处理实验教程—基于 MATLAB 语言 5 实验 2 利用 FFT 计算线性卷积 一、实验目的 1. 掌握利用 FFT 计算线性卷积的原理及具体实现方法。 2. 加深理解重叠相加法和重叠保留法。 3. 考察利用 FFT 计算线性卷积各种方法的适用范围。 二、实验设备与环境 计算机、MATLAB 软件环境。 三、实验基础理论 1. 线性卷积与圆周卷积 设 x(n) 为 L 点序列, h(n) 为 M 点序列, x(n) 和 h(n) 的线性卷积为 m yl(n) x(n) h(n) x(m)h(n m) (3-1) y (n) l 的长度为 L M 1。 x(n) 和 h(n) 的 N 点圆周卷积为 y(n) x(n)○N 1 0 ( ) ( ) ( ) ( ) Nm h n x m h n m N RN n (3-2) 圆周卷积与线性卷积相等而不产生交叠的必要条件为 N L M 1 (3-3) 圆周卷积定理:根据 DFT 的性质,x(n) 和 h(n) 的 N 点圆周卷积的 DFT 等于它们 DFT 的乘积 DFT[x(n)○N h(n)] X (k)H(k) (3-4) 2. 快速卷积 快速卷积算法用圆周卷积实现线性卷积,根据圆周卷积定理利用 FFT 算法实现圆周卷 积。可以将快速卷积的步骤归纳如下: (1)为了使线性卷积可以用圆周卷积来计算,必须选择 N L M 1;同时为了能 使用基-2FFT 完成卷积运算,要求 N 2 。采用补零的办法使 x(n)和 h(n) 的长度均为 N 。 (2)计算 x(n)和 h(n) 的 N 点 FFT ( ) ( ) ( ) ( ) h n H k x n X k FFT FFT
数字信号处理实验教程一基于MATLAB语言(3)组成乘积Y(k)= X(k)H(k)(4)利用IFFT计算Y(k)的IDFT,得到线性卷积y(n)Y(k)IFFT→(n)3.分段卷积我们考察单位取样响应为h(n)的线性系统,输入为x(n),输出为y(n),则y(n)= x(n)*h(n)当输入序列x(n)极长时,如果要等x(n)全部集齐时再开始进行卷积,会使输出相对输入有较大的延时,再者如果序列太长,需要大量的存储单元。为此,我们把x(n)分段,分别求出每段的卷积,合在一起得到最后总的输出。这种方法称为分段卷积。分段卷积可细分为重叠相加法和重叠保留法。重叠保留法:设x(n)的长度为N,h(n)的长度为M。我们把序列x(n)分成多段N点序列x(n),每段与前一段重叠M-1个样本。由于第一段没有前一段保留信号,为了修正,我们在第一个输入段前面填充M一1个零。计算每一段与h(n)的圆周卷积,则其每段卷积结果的前M-1个样本不等于线性卷积值,不是正确的样本值。所以我们将每段卷积结果的前M-1个样本舍去,只保留后面的N-M+1个正确输出样本,把这些输出样本合起来,得到总得输出。利用FFT实现重叠保留法的步骤如下:(1)在x(n)前面填充M-1个零,扩大以后的序列为x(n) = (0,0,..,0,x(n)M-1个(2)将x(n)分为若干N点子段,设L=N-M+1为每一段的有效数据长度,则第i段x,(n)(0≤n≤N-1)的数据为x(n)= x(m)iL≤m≤iL+N-l,i≥0,0≤n≤N-1(3)计算每一段与h(n)的N点圆周卷积,利用FFT计算圆周卷积:x(n)FFTX(k)h(n)FFT→H(k)Y,(k)= X,(k)H(k)Y,(k)IFT→y(n)(4)舍去每一段卷积结果的前M-1个样本,连接剩下样本,得到卷积结果y(n)。重叠相加法:设hn)长度为M,将信号x(n)分解成长为L的子段,建议L选择与的M6
数字信号处理实验教程—基于 MATLAB 语言 6 (3)组成乘积 Y(k) X (k)H(k) (4)利用 IFFT 计算Y(k) 的 IDFT,得到线性卷积 y(n) Y(k) y(n) IFFT 3. 分段卷积 我们考察单位取样响应为 h(n) 的线性系统,输入为 x(n) ,输出为 y(n) ,则 y(n) x(n) h(n) 当输入序列 x(n) 极长时,如果要等 x(n) 全部集齐时再开始进行卷积,会使输出相对输 入有较大的延时,再者如果序列太长,需要大量的存储单元。为此,我们把 x(n) 分段,分 别求出每段的卷积,合在一起得到最后总的输出。这种方法称为分段卷积。分段卷积可细分 为重叠相加法和重叠保留法。 重叠保留法:设 x(n) 的长度为 Nx ,h(n) 的长度为 M 。我们把序列 x(n) 分成多段 N 点序列 x (n) i ,每段与前一段重叠 M 1个样本。由于第一段没有前一段保留信号,为了修 正,我们在第一个输入段前面填充 M 1个零。计算每一段与 h(n) 的圆周卷积,则其每段 卷积结果的前 M 1个样本不等于线性卷积值,不是正确的样本值。所以我们将每段卷积结 果的前 M 1个样本舍去,只保留后面的 N M 1个正确输出样本,把这些输出样本合起 来,得到总得输出。 利用 FFT 实现重叠保留法的步骤如下: (1)在 x(n) 前面填充 M 1个零,扩大以后的序列为 ˆ( ) {0,0, ,0, ( )} 1 x n x n M 个 (2)将 x(n) 分为若干 N 点子段,设 L N M 1为每一段的有效数据长度,则第i 段 x (n) i (0 n N 1)的数据为 xi(n) xˆ(m) iL m iL N 1,i 0, 0 n N 1 (3)计算每一段与 h(n) 的 N 点圆周卷积,利用 FFT 计算圆周卷积: ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) Y k y n Y k X k H k h n H k x n X k i IFFT i i i FFT i FFT i (4)舍去每一段卷积结果的前 M 1个样本,连接剩下样本,得到卷积结果 y(n)。 重叠相加法:设 h(n) 长度为 M ,将信号 x(n) 分解成长为 L 的子段,建议 L 选择与的 M
数字信号处理实验教程一基于MATLAB语言数量级相同。以x(n)表示每段信号,则x(n)=2x(n)1=0,0≤n≤L-1x(n+iL)x(n)=0其它x(n)* h(n)= x,(n)* h(n)i=0每一段卷积y(n)的长度为L+M-1,所以在做求和时,相邻两段序列有M-1个样本重叠,即前一段的最后M-1个样本和下一段的前M-1个序列重叠,这个重叠部分相加,再与不重叠部分共同组成输出y(n)。利用FFT实现重叠保留法的步骤如下:(1)将x(n)分为若干L点子段x(n)。(2)计算每一段与h(n)的卷积y,(n),根据快速卷积算法利用FFT计算卷积。(3)将各段y(n)(包括重叠部分)相加,得到输出y(n)y(n)=Zy(n-iL)i=04.可能用到的MATLAB函数实验中FFT运算可采用MATLAB中提供的函数ft来实现。MATLAB提供了函数conv用来计算线性卷积,实验中可以将编程计算的结果和conv函数的计算结果相比较,以验证结果的正确性,conv函数用法如下x和h为要进行卷积运算的两个序列,y为卷积结果。y= conv(x,h)统计程序运行时间可以利用MATLAB提供的tic和toc两个命令,具体用法如下:tic.需要运行的程序代码toc即,在需要统计运行时间的程序代码之前加上tic命令,之后加上toc命令,此时会在命令窗口中显示该程序的运行时间,例如将下列代码写入一个m文件并执行ticA=[1,2;3,4];B=[5,6;7,8];x=A/B;toc命令窗口中显示Elapsedtimeis0.000058seconds7
数字信号处理实验教程—基于 MATLAB 语言 7 数量级相同。以 x (n) i 表示每段信号,则 0 ( ) ( ) i x n xi n 0 1 0 ( ) ( ) ,其它 x n iL , n L xi n 0 ( ) ( ) ( ) ( ) i x n h n xi n h n 每一段卷积 y (n) i 的长度为 L M 1,所以在做求和时,相邻两段序列有 M 1个样 本重叠,即前一段的最后 M 1个样本和下一段的前 M 1个序列重叠,这个重叠部分相加, 再与不重叠部分共同组成输出 y(n)。 利用 FFT 实现重叠保留法的步骤如下: (1)将 x(n) 分为若干 L 点子段 x (n) i 。 (2)计算每一段与 h(n) 的卷积 y (n) i ,根据快速卷积算法利用 FFT 计算卷积。 (3)将各段 y (n) i (包括重叠部分)相加,得到输出 y(n) 0 ( ) ( ) i i y n y n iL 4. 可能用到的 MATLAB 函数 实验中 FFT 运算可采用 MATLAB 中提供的函数 fft 来实现。 MATLAB 提供了函数 conv 用来计算线性卷积,实验中可以将编程计算的结果和 conv 函数的计算结果相比较,以验证结果的正确性,conv 函数用法如下 y = conv(x,h) x 和 h 为要进行卷积运算的两个序列,y 为卷积结果。 统计程序运行时间可以利用 MATLAB 提供的 tic 和 toc 两个命令,具体用法如下: tic .需要运行的程序代码 toc 即,在需要统计运行时间的程序代码之前加上 tic 命令,之后加上 toc 命令,此时会在 命令窗口中显示该程序的运行时间,例如将下列代码写入一个 m 文件并执行 tic A=[1,2;3,4];B=[5,6;7,8]; x=A/B; toc 命令窗口中显示 Elapsed time is 0.000058 seconds