《数字信号处理》实验报告 年级 2019 级 姓名 吴健铖 指导教师 日期 专业 物联网工程 学号 20191060167 周浩 2022.5.3 云南大学信息学院 成绩 《数字信号处理》实验报告 离散时间信号的频域分析 (1)实验代码与结果 Q3.2 运行程序 P3.1,求离散时间傅里叶变换得的实部、虚部以及幅度和香相位谱。 离散时间傅里叶变换是 w 的周期函数吗?若是,周期是多少?描述这四个图形表示的 对称性。 代码如下: w=-4*pi:8*pi/511:4*pi; num=[2 1];den=[1 -0.6]; h=freqz(num,den,w); subplot(2,1,1); plot(w/pi,real(h));grid; title('H(e^{j\omega})的实部'); xlabel('\omega/\pi'); ylabel('振幅'); subplot(2,1,2); plot(w/pi,imag(h));grid; title('H(e^{j\omega})的虚部'); xlabel('\omega/\pi'); ylabel('振幅'); pause; subplot(2,1,1); plot(w/pi,abs(h));grid; title('|H(e^{j\omega}|幅度谱'); xlabel('\omega/\pi'); ylabel('振幅');subplot(2,1,2); plot(w/pi,angle(h));grid; title('相位谱 arg[H(e^{j\omega})]'); xlabel('\omega/\pi'); ylabel('以弧度为单位的相位'); 图像如下: 第 1 页 《数字信号处理》实验报告 离散时间傅立叶变换是 w 的周期函数,周期是 2π;这四个图形都是周期图形, 周期为 2π,H (e jw ) 的实部是关于 y 轴对称的偶函数,H (e jw ) 的虚部是关于原点对称 的奇函数,| H (e jw ) |幅度谱是关于 y 轴对称的偶函数, H (e jw ) 的相位谱是关于原点对 称的奇函数。 Q3.3 修改程序 P3.1,在范围 0≤ w≤π内计算如下序列的离散时间傅里叶变换: U (e jw ) 0.7 0.5e jw 0.3e j 2 w e j 3 w 1 0.3e jw 0.5e j 2 w 0.7e j 3 w 并重做习题 P3.2,讨论你的结果。你能解释相位谱中的跳变吗?MATLAB 命令 unwarp 可以移除变化。试求跳变被移除后的相位谱。 代码如下: clf; w=0:8*pi/511:pi; num=[0.7 -0.5 0.3 1];den=[1 0.3 -0.5 0.7]; h=freqz(num,den,w); subplot(2,1,1); plot(w/pi,real(h));grid; title('H(e^{j\omega})的实部'); xlabel('\omega/\pi'); ylabel('振幅'); subplot(2,1,2); plot(w/pi,imag(h));grid; title('H(e^{j\omega})的虚部'); xlabel('\omega/\pi'); ylabel('振幅'); pause; subplot(2,1,1); plot(w/pi,abs(h));grid; title('|H(e^{j\omega}|幅度谱'); xlabel('\omega/\pi'); ylabel('振幅'); subplot(2,1,2); plot(w/pi,angle(h));grid; title('相位谱 arg[H(e^{j\omega})]'); xlabel('\omega/\pi'); ylabel('以弧度为单位的相位'); //移出跳变后的代码 clf; w=0:8*pi/511:pi; num=[0.7 -0.5 0.3 1]; den=[1 0.3 -0.5 0.7]; h=freqz(num,den,w); plot(w/pi,unwrap(angle(h))); grid; title('相位谱 arg[H(e^{j\omega})]'); xlabel('\omega/\pi'); ylabel('以弧度为单位的相位'); 第 2 页 《数字信号处理》实验报告 图像如下: 该离散时间傅立叶变换也是 w 的周期函数,周期是 2π; H (e jw ) 的实部是关于 y 轴对称的偶函数, H (e jw ) 的虚部是关于原点对称的奇函数,| H (e jw ) |幅度谱是关于 y 轴对称的偶函数,这里特别说明 H (e jw ) 是幅度值恒为 1 的直线, H (e jw ) 的相位谱是 关于原点对称的奇函数。 解释跳变:在 matlab 中规定的角度范围是-π~π,而角度值实际上是 0~2π,所 以在结果中,弧度从 0 到π,当超过π之后就变成-π最后回到 0,所以在弧度为π时 发生跳变,跳变的幅度为 2π。 Q3.4 修改程序 P3.1,计算如下有限长序列的离散时间傅里叶变换; g[n]= [1 3 5 7 911131517] 并重做习题 03.2。讨论你的结果。你能解释相位谱中的跳变吗? 第 3 页 《数字信号处理》实验报告 代码如下: clf; w=-4*pi:8*pi/511:4*pi; num1=[1 3 5 7 9 11 13 15 17]; h=freqz(num,1,w); subplot(2,1,1); plot(w/pi,real(h));grid; title('H(e^{j\omega})的实部'); xlabel('\omega/\pi'); ylabel('振幅'); subplot(2,1,2); plot(w/pi,imag(h));grid; title('H(e^{j\omega})的虚部'); xlabel('\omega/\pi'); ylabel('振幅'); pause; subplot(2,1,1); plot(w/pi,abs(h));grid; title('|H(e^{j\omega}|幅度谱'); xlabel('\omega/\pi'); ylabel('振幅'); subplot(2,1,2); plot(w/pi,angle(h));grid; title('相位谱 arg[H(e^{j\omega})]'); xlabel('\omega/\pi'); ylabel('以弧度为单位的相位'); 图像如下: 结果显示也是周期函数,周期是 2π,各个图形的对称性也和上述结果一致,原 理一样。其跳变的原因也和 3.3 中一样。 Q3.6 通过加入合适的注释语句和程序语句,修改程序 P3.2,对程序生成的图形中的 两个轴加标记。哪个参数控制时移量? 代码如下: w=-pi:2*pi/255:pi;wo=0.4*pi;D=10; 第 4 页 《数字信号处理》实验报告 num=[1 2 3 4 5 6 7 8 9];h1=freqz(num,1,w); h2=freqz([zeros(1,D) num],1,w);%时移后的傅立叶变换得到的序列 subplot(2,2,1);plot(w/pi,abs(h1));grid;xlabel('\omega/\pi'); ylabel('振幅');title('原序列的幅度谱'); subplot(2,2,2);plot(w/pi,abs(h2)); xlabel('\omega/\pi');ylabel('振幅'); title('时移后序列的幅度谱'); subplot(2,2,3); plot(w/pi,angle(h1));grid; xlabel('\omega/\pi'); ylabel('以弧度为单位的相位'); title('原序列的相位谱'); subplot(2,2,4); plot(w/pi,angle(h2));grid; xlabel('\omega/\pi'); ylabel('以弧度为单位的相位'); title('时移后序列的相位谱'); 图像如下: 参数 D 控制时移量 Q3.7 运行修改后的程序并讨论你的结果。 图像如下: 第 5 页 《数字信号处理》实验报告 根据结果可知当 D 增大时,序列的幅度谱不变;相位谱变密,周期缩短。 Q3.9 选取两个改变了长度的序列以及两个不同的时移值,重做习题 Q3.7。 代码如下: %p3.2 %离散时间傅里叶变换的时移性质 clf; w=-pi:2*pi/255:pi; w0=0.4*pi; D=50; num=[1 2 3 4 5 6 7]; h1=freqz(num,1,w); h2=freqz([zeros(1,D) num],1,w); subplot(2,2,1); plot(w/pi,abs(h1));grid title('原序列的幅度谱'); subplot(2,2,2); plot(w/pi,abs(h2));grid title('时移后序列的幅度谱'); subplot(2,2,3) plot(w/pi,angle(h1));grid title('原序列的相位谱') subplot(2,2,4) plot(w/pi,angle(h2));grid title('时移后序列的相位谱') 图像如下: 第 6 页 《数字信号处理》实验报告 其中,左图为 D=50;num=[1 2 3 4 5 6 7]的结果;右图为 D=100;num=[1 2 3 4 5 6 7 8 9 10]的结果。 Q3.11 运行修改后的程序并讨论你的结果。 代码如下: %程序 P3_3 %离散时间傅里叶变换的频移性质 clf; w = -pi:2*pi/255:pi;wo=0.4*pi; num1=[1 3 5 7 9 11 13 15 17]; L=length(num1); h1=freqz(num1,1,w); n=0:L-1; num2=exp(wo*i*n).*num1; h2=freqz(num2,1,w); subplot(2,2,1) plot(w/pi,abs(h1));grid title('原序列的幅度谱') subplot(2,2,2) plot(w/pi,abs(h2));grid title('频移后序列的幅度谱') subplot(2,2,3) plot(w/pi,angle(h1));grid title('原序列的相位谱') subplot(2,2,4) plot(w/pi,angle(h2));grid title('频移后序列的相位谱') 图像如下: 第 7 页 《数字信号处理》实验报告 由结果可知:离散时间傅立叶变换的幅度谱和相位谱向右移动了 k 个单位。 Q3.13 选取两个改变了长度的序列以及两个不同的频移值,重做习题 Q3.11。 代码如下: %程序 P3_3 %离散时间傅里叶变换的频移性质 clf; w = -pi:2*pi/255:pi;wo=2*pi; num1=[1 3 5 7 9 11 13 15 17 19]; L=length(num1); h1=freqz(num1,1,w); n=0:L-1; num2=exp(wo*i*n).*num1; h2=freqz(num2,1,w); subplot(2,2,1) plot(w/pi,abs(h1));grid title('原序列的幅度谱') subplot(2,2,2) plot(w/pi,abs(h2));grid title('频移后序列的幅度谱') subplot(2,2,3) plot(w/pi,angle(h1));grid title('原序列的相位谱') subplot(2,2,4) plot(w/pi,angle(h2));grid title('频移后序列的相位谱') 图像如下: 其 中 左 图 为 wo=2*pi;num1=[1 3 5 7 9 11 13 15 17 19 ] 的 结 果 ; 右 图 为 wo=20*pi;num1=[1 3 5 7 9 11]的结果; 第 8 页 《数字信号处理》实验报告 Q3.14 通过加入合适的注释语句和程序语句,修改程序 P3.4,对程序生成的图形中 两个轴加标记。 代码如下: %程序 P3_4 %离散时间傅里叶变换的时移性质 clf; w = -pi:2*pi/255:pi; x1=[1 3 5 7 9 11 13 15 17]; x2=[1 -2 3 -2 1]; y=conv(x1,x2); h1=freqz(x1,1,w); h2=freqz(x2,1,w); hp=h1 .* h2; h3=freqz(y,1,w); subplot(2,2,1) plot(w/pi,abs(hp));grid title('幅度谱的乘积') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('振幅');%将 y 轴标记为振幅 subplot(2,2,2) plot(w/pi,abs(h3));grid title('卷积后序列的幅度谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('振幅');%将 y 轴标记为振幅 subplot(2,2,3) plot(w/pi,angle(hp));grid title('相位谱的和') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('以弧度为单位的相位');%将 y 轴记为以弧度为单位的相位; subplot(2,2,4) plot(w/pi,angle(h3));grid title('卷积后序列的相位谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('以弧度为单位的相位');%将 y 轴记为以弧度为单位的相位; 图像如下: 第 9 页 《数字信号处理》实验报告 Q3.16 选取两个改变了长度的序列,重做 Q3.15。 代码如下: %程序 P3_4 %离散时间傅里叶变换的时移性质 clf; w = -pi:2*pi/255:pi; x1=[1 3 5 7 9 11 13 15]; x2=[1 2 3 -2 1 -1 -2 1]; y=conv(x1,x2); h1=freqz(x1,1,w); h2=freqz(x2,1,w); hp=h1 .* h2; h3=freqz(y,1,w); subplot(2,2,1) plot(w/pi,abs(hp));grid title('幅度谱的乘积') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('振幅');%将 y 轴标记为振幅 subplot(2,2,2) plot(w/pi,abs(h3));grid title('卷积后序列的幅度谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('振幅');%将 y 轴标记为振幅 subplot(2,2,3) plot(w/pi,angle(hp));grid title('相位谱的和') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('以弧度为单位的相位');%将 y 轴记为以弧度为单位的相位; subplot(2,2,4) plot(w/pi,angle(h3));grid title('卷积后序列的相位谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('以弧度为单位的相位');%将 y 轴记为以弧度为单位的相位; 图像如下: 第 10 页 《数字信号处理》实验报告 其中左图为 x1=[1 3 5 7 9 11 ];x2=[1 -3 2 -3 1 -3]的结果;右图为 x1=[1 3 5 7 9 11 13 15 ];x2=[1 2 3 -2 1 -1 -2 1]的结果; Q3.19 选取两个改变了长度的序列,重做习题 Q3.18。 代码如下: %程序 P3_5 %离散时间傅里叶变换的调制性质 clf; w = -pi:2*pi/255:pi; x1=[1 3 5 7 9 11 13 15 17 21]; x2=[1 -1 1 -1 1 -1 1 -1 -1 -1]; y=x1.*x2; h1=freqz(x1,1,w); h2=freqz(x2,1,w); h3=freqz(y,1,w); subplot(3,1,1) plot(w/pi,abs(h1));grid title('第一序列的幅度谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('振幅');%将 y 轴标记为振幅 subplot(3,1,2) plot(w/pi,abs(h2));grid title('第一序列的幅度谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('振幅');%将 y 轴标记为振幅 subplot(3,1,3) plot(w/pi,abs(h3));grid title('乘积序列的幅度谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('振幅');%将 y 轴标记为振幅 图像如下: 其中左图为 x1=[1 3 5 7 9 11 13 15];x2=[1 -1 1 -1 1 -1 1 -1]的结果; 右图为 x1=[1 3 5 7 9 11 13 15 17 21];x2=[1 -1 1 -1 1 -1 1 -1 -1 -1]的结果; 第 11 页 《数字信号处理》实验报告 Q3.22 选取两个不同长度的序列,重做习题 Q3.21。 代码如下: %程序 P3_6 %离散时间傅里叶变换的时间反转性质 clf; w = -pi:2*pi/255:pi; num = [1 2 3 4 ]; L = length(num)-1; h1 = freqz(num, 1, w); h2 = freqz(fliplr(num), 1, w); h3 = exp(w*L*i).*h2; subplot(2,2,1) plot(w/pi,abs(h1));grid title('原序列的幅度谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('振幅');%将 y 轴标记为振幅 subplot(2,2,2) plot(w/pi,abs(h3));grid title('时间反转后序列的幅度谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('振幅');%将 y 轴标记为振幅 subplot(2,2,3) plot(w/pi,angle(h1));grid title('原序列的相位谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('以弧度为单位的相位');%将 y 轴记为以弧度为单位的相位; subplot(2,2,4) plot(w/pi,angle(h3));grid title('时间反转后序列的相位谱') xlabel('\omega /\pi');%将 x 轴标记为ω/π ylabel('以弧度为单位的相位');%将 y 轴记为以弧度为单位的相位; 图像如下: 其中左图为 num = [1 2 3 4 5 6 7]的结果;右图为 num = [1 2 3 4 ]的结果; 第 12 页 《数字信号处理》实验报告 Q3.23 编写一个 MATLAB 程序,计算并画出长度为为 N 的 L 点离散傅里叶变换 X[k] 的值,其中 L≥N,然后计算并画出 L 点离散傅里叶逆变换 X[k]。对不同长度 N 和不 同的离散傅里叶变换长度 L,运行程序。讨论你的结果。 代码如下: %原始序列是 x=[1 2 3 ...], N=10; %N=10 L=10 L=20; %w1 代表频率点 w1 = -pi:2*pi/L:pi; n=1:L; for i=1:L w(i)=w1(i); end for i=1:N %N=10 L=20 x(i)=i; end xx=[x zeros(1,L-N)]; y=fft(xx,L); xk=ifft(y,L); subplot(3,1,1) plot(w/pi,abs(y));grid xlabel('\omega/\pi'); ylabel('振幅'); title('幅度谱') %N=10 L=50 subplot(3,1,2) plot(w/pi,angle(y));grid xlabel('\omega/\pi'); ylabel('以弧度为单位的相位'); title('相位谱') subplot(3,1,3) stem(n,xk);grid xlabel('n'); ylabel('振幅'); title('原始序列') %N=50 L=50 图像如下: 第 13 页 《数字信号处理》实验报告 对于傅立叶逆变换(IFFT),由图形可知,可完全将被经过 FFT 后的序列还原 出来,序列的长度和 L 一样长。当 N<L 时,FFT 将先在序列后面补 L-N 个 0,再进 行傅立叶变换,最后还原回来也就是长度变为 L;对于 N>L,FFT 将先把序列中的后 面的 N-L 个值丢弃再进行傅立叶变换,最后还原回来也就是长度变为 L。 Q3.25 编写一个 MATLAB 程序,用两个 N 点离散傅里叶变换计算一个长度为 2N 的实数 序列的 2N 点离散傅里叶变换,并将结果同直接使用一个 2N 点离散傅里叶变换得到的 结果进行比较。 代码如下: N=6; %给定 N 的值 n=0:2*N-1; %设定 n 的范围 x=cos(pi/6.*n); %给定序列 x[n] m=0:N-1; %设定 m 的范围 x1=cos(pi/6.*(2*m)); %取 n 为偶数时 x[n]的值组成序列 x1[n] x2=cos(pi/6.*(2*m+1)); %取 n 为奇数时 x[n]的值组成序列 x2[n] figure, subplot(3,1,1)%指定位置 1,绘制序列 x[n] stem(n,x); xlabel('n'); %设定序列 x[n]的横轴标注和纵轴标注 ylabel('x'); title('原序列 x[n]') subplot(3,1,2)%指定位置 2,绘制序列 x1[n] stem(m,x1); xlabel('m'); %设定序列 x1[n]的横轴标注和纵轴标注 ylabel('x1'); title('取 n 为偶数时 x[n]的值组成序列 x1[n]') subplot(3,1,3)%指定位置 3,绘制序列 x2[n] stem(m,x2); xlabel('m'); %设定序列 x2[n]的横轴标注和纵轴标注 第 14 页 《数字信号处理》实验报告 ylabel('x2'); title('取 n 为奇数时 x[n]的值组成序列 x2[n]') k1=0:N-1; %设定 k1 的范围 k2=0:N-1; %设定 k2 的范围 X1=fft(x1); %求序列 x1[n]的离散傅?叶变换 X2=fft(x2); %求序列 x2[n]的离散傅?叶变换 figure, subplot(2,1,1)%指定位置 1,绘制 X1(k) stem(k1,real(X1)); xlabel('k1'); %设定 X1(k)的横轴标注和纵轴标注 ylabel('X1'); title('序列 x1[n]的离散傅?叶变换 X1(k)') subplot(2,1,2) %指定位置 2,绘制 X2(k) stem(k2,real(X2)); xlabel('k2'); %设定 X2(k)的横轴标注和纵轴标注 ylabel('X2'); title('序列 x2[n]的离散傅?叶变换 X2(k)') W=exp(-1i*pi/N).^k2; %给定 W 的值 Y=X1+X2.*W; %给定 Y X=fft(x); %求序列 x[n]的离散傅?叶变换 k=0:2*N-1; %设定 k 的范围 figure, subplot(2,1,1) %指定位置 1,绘制 X(k) stem(k,real(X)); xlabel('k'); %设定 X(k)的横轴标注和纵轴标注 ylabel('X'); title('2N 点离散傅?叶变换结果') subplot(2,1,2)%指定位置 2,绘制 Y(k) stem(k1,real(Y)); xlabel('k1'); %设定 Y(k)的横轴标注和纵轴标注 ylabel('Y'); title('由两个 N 点离散傅?叶变换得到的结果') 图像如下: 序列 x[n],x1[n],x2[n]: 第 15 页 《数字信号处理》实验报告 序列 x1[n]和 x2[n]的离散傅⾥叶变换 X1(k)和 X2(k): 两种傅⾥叶变换结果⽐较: 第 16 页 《数字信号处理》实验报告 Q3.27 解释函数 circshift 怎样实现圆周移位运算。 首先分析 M 值,当 M 大于序列长度时,让其减小到小于序列长度的情况;根据 圆周移位的性质,如果此时 M 为负数则将其变为与其对应的正数,公式为 M=M+length(x),最后把序列中第 M 个点后面的所有点的值依次放到序列的最前 面,实现圆周移位。 Q3.29 解释函数 circconv 怎样实现圆周卷积运算。 首先判定卷积的两个序列是否相等,在相等的情况下,把 x2 的第一个点后面的 所有点进行倒序排列;然后将其圆周移位(1-k)个单位(k 从 1 递增到序列 x1 的长 度值),之后和 x1 相乘得到新的序列,把该序列加到一起就是圆周卷积位于第 k 点 的值;最后从圆周移位处开始循环,获取圆周卷积位于每一个点的值,最后即可输 出卷积结果。 Q3.32 通过加入合适的注释语句和程序语句,修改程序 P3.8,对程序生成的图形中 的两个轴加标记。时移量是多少? 代码如下: clf; 第 17 页 《数字信号处理》实验报告 x = [0 2 4 6 8 10 12 14 16]; N = length(x)-1; n = 0:N; y = circshift(x,5); XF = fft(x); YF = fft(y); subplot(2,2,1) stem(n,abs(XF));grid xlabel('n'); ylabel('振幅'); title('原序列的离散傅立叶变换的幅度'); subplot(2,2,2) stem(n,abs(YF));grid xlabel('n'); ylabel('振幅'); title('圆周移位后的序列的离散傅立叶变换的幅度'); subplot(2,2,3) stem(n,angle(XF));grid xlabel('n'); ylabel('以弧度为单位的相位'); title('原序列的离散傅立叶变换的相位'); subplot(2,2,4) stem(n,angle(YF));grid xlabel('n'); ylabel('以弧度为单位的相位'); title('圆周移位后的序列的离散傅立叶变换的相位'); 图像如下: 时移量为 5. Q3.33 运行修改后的程序并验证离散傅里叶变换的圆周时移性质。 代码如下: clf; x = [0 2 4 6 8 10 12 14 16]; N = length(x)-1; n = 0:N; 第 18 页 《数字信号处理》实验报告 y = circshift(x,5); XF = fft(x); YF = fft(y); subplot(2,2,1) stem(n,abs(XF));grid xlabel('n'); ylabel('振幅'); title('原序列的离散傅立叶变换的幅度'); subplot(2,2,2) stem(n,abs(YF));grid xlabel('n'); ylabel('振幅'); %当时移值取 18(序列长为 9)时的图形输出如下: title('圆周移位后的序列的离散傅立叶变换的幅度'); subplot(2,2,3) stem(n,angle(XF));grid xlabel('n'); ylabel('以弧度为单位的相位'); title('原序列的离散傅立叶变换的相位'); subplot(2,2,4) stem(n,angle(YF));grid xlabel('n'); ylabel('以弧度为单位的相位'); title('圆周移位后的序列的离散傅立叶变换的相位'); 图像如下: 验证如下: 由运行的程序结果可以发现幅度没有发生变化,相位发生变化。但有一个特殊值是: 时移值为序列长度的整数倍时,则相位不变。如:当时移 18 个单位(18/9=2)时输 出的图形是没有变化的。由此验证了时移性质。 第 19 页 《数字信号处理》实验报告 Q3.34 选取两个不同的时移量,重做习题 Q3.33 代码如下: %离散傅里叶变换的圆周时移性质,时移为 10 x=[0 2 4 6 8 10 12 14 16]; N=length(x)-1;n=0:N; y=circshift(x,10); XF=fft(x); YF=fft(y); subplot(2,2,1); stem(n,abs(XF));grid title('原序列的离散傅里叶变换的幅度'); xlabel('时间序号 n'); ylabel('振幅'); subplot(2,2,2); stem(n,abs(YF));grid title('圆周移位 10 后的序列的离散傅里叶变换的幅度'); xlabel('时间序号 n');ylabel('振幅'); subplot(2,2,3); stem(n,angle(XF));grid title('原序列的离散傅里叶变换的相位'); xlabel('时间序号 n'); ylabel('相位'); subplot(2,2,4); stem(n,angle(YF));grid title('圆周移位 10 后的序列的离散傅里叶变换的相位'); xlabel('时间序号 n'); ylabel('相位'); 图像如下: 左图是时移量为 10 的结果;右图是时移量为 20 的结果。 Q3.37 选取另外两组等长序列重做习题 Q3.36 代码如下: g1 = [1 2 3 4 5 6]; g2 = [2 -2 1 2 -2 1]; 第 20 页 《数字信号处理》实验报告 ycir = circonv(g1,g2); disp('圆周卷积的结果 = ');disp(ycir) G1 = fft(g1); G2 = fft(g2); yc = real(ifft(G1.*G2)); disp('离散傅立叶变换乘积的离散傅立叶逆变换的结果 = ');disp(yc) 第一组输入:g1 = [1 2 3 4 5 6]; g2 = [2 2 1 -1 2 -1]; 圆周卷积的结果 = 19 26 15 22 11 12 离散傅立叶变换乘积的离散傅立叶逆变换的结果 = 19 12 11 22 15 26 第二组输入:g1 = [1 2 3 4 5]; g2 = [2 2 -1 2 2]; 圆周卷积的结果 = 18 21 24 27 15 离散傅立叶变换乘积的离散傅立叶逆变换的结果 = 18 15 27 24 21 Q3.38 运行程序 P3.10 并验证线性卷积可通过圆周卷积得到。 代码如下: g1 = [1 2 3 4 5];g2 = [2 2 0 1 1]; g1e = [g1 zeros(1,length(g2)-1)]; g2e = [g2 zeros(1,length(g1)-1)]; ylin = circonv(g1e,g2e); disp('通过圆周卷积的线性卷积= ');disp(ylin); y = conv(g1, g2); disp('直接线性卷积 = ');disp(y); 输出如下: 通过圆周卷积的线性卷积= 2 5 9 7 15 21 15 10 6 10 15 21 15 7 9 5 直接线性卷积 = 2 6 输出结果完全一样,验证了线性卷积可通过圆周卷积得到,但圆周卷积时需要在 g1,g2 序列后面分别补 length(g2)-1)个和 length(g1)-1)个 0,此时圆周卷积的长度即 为补零后的两个序列的长度(补零后的两个序列的长度一样长),而线性卷积长度为 第 21 页 《数字信号处理》实验报告 length(g1)+length(g2)-1。 Q3.40 编写一个 MATLAB 程序,对两个序列做离散傅里叶变换,以生成它们的线性卷积。 用此程序验证习题 Q3.38 和习题 Q3.39 的结果。 代码如下: %验证 Q3.38 g1=[1 2 3 4 5]; g2=[2 2 0 1 1]; g1e = [g1 zeros(1, length(g2)-1)]; g2e = [g2 zeros(1, length(g1)-1)]; G1EF=fft(g1e) ; G2EF=fft(g2e) ; ylin=real(ifft(G1EF.*G2EF)) ; disp('Linear convolution via DFT =') ;disp(ylin) ; %验证 Q3.39 gl=[ 1 2 3 4 5]; g2=[2 2 0 1 1 5]; g1e = [g1 zeros(1, length(g2)-1)]; g2e = [g2 zeros(1, length(g1)-1)]; G1EF=fft(g1e) ; G2EF=fft(g2e) ; ylin=real(ifft(G1EF.*G2EF )); disp ( ' Linear convolution via DFT =') ;disp(ylin) ; 验证 Q3.38 输出: Linear convolution via DFT = 1 至 7 列 2.0000 6.0000 10.0000 15.0000 8 至 9 列 9.0000 5.0000 验证 Q3.39 输出: Linear convolution via DFT = 1 至 6 列 第 22 页 21.0000 15.0000 7.0000 《数字信号处理》实验报告 2.0000 6.0000 10.0000 15.0000 24.0000 25.0000 25.0000 21.0000 20.0000 7 至 10 列 17.0000 Q3.41 序列 x1[n]和 x2[n]之间的关系是什么? x[n]和 x1[n]关系:x1[n]是 x[n]的第一个点之后的其他点进行倒序排列的序列。 相当于 x[n]序列左右翻转之后进行一个单位的圆周移位。 Q3.42 运行程序 P3.11。由于周期序列的偶数部分的离散傅里叶变换是原序列的 XEF 的实数部分,XEF 的虚部应该为零。你能验证它们吗?你怎样解释仿真结果? 代码如下: x = [1 2 4 2 6 32 6 4 2 zeros(1,247)]; x1 = [x(1) x(256:-1:2)]; xe = 0.5 *(x + x1); XF = fft(x); XEF = fft(xe); clf; k = 0:255; subplot(2,2,1); plot(k/128,real(XF)); grid; ylabel('振幅'); title('Re(DFT\{x[n]\})'); subplot(2,2,2); plot(k/128,imag(XF)); grid; ylabel('振幅'); title('Im(DFT\{x[n]\})'); subplot(2,2,3); plot(k/128,real(XEF)); grid; xlabel('时间序号 n');ylabel('振幅'); title('Re(DFT\{x_{e}[n]\})'); subplot(2,2,4); plot(k/128,imag(XEF)); grid; xlabel('Time index n');ylabel('振幅'); title('Im(DFT\{x_{e}[n]\})'); 图像如下: 第 23 页 《数字信号处理》实验报告 仿真结果可以看出 XEF 的虚部很小,可以认为为 0。所以和题目中所说的 XEF 虚部为 0 是一致的,下面证明偶数部分的傅立叶变换是原序列的实数部分傅立叶变 换: xev [n] 1 1 1 ( x[n] x[ n]) DTFT ( x(e jw ) x(e jw )) ( x(e jw ) x* (e jw )) xre (e jw ) 2 2 2 所以 xev [n] 的傅立叶变换就是原序列的实数部分的傅立叶变换。 Q3.43 试修改源程序,验证周期序列的偶数部分的离散傅里叶变换和 XEF 的虚部之 间的关系。 (2) 实验心得 本次实验深刻体会了离散时间傅立叶变换和离散傅立叶变换的不同,其关系为: F ( n ) F ( e j ) | 2 n N ,其中,F(n)为离散傅立叶变换的结果, F (e j ) 为离散时间傅 立叶变换的结果,F(n)是对 F (e j ) 离散化的结果,F (e j ) 是周期为 2π的连续函数, F(n)是对 F (e j ) 在 2π的周期内进行 N 次取样的样值。 总的来说,本次实验让我发现了自己在 DSP 领域的知识的无限匮乏,有的仿真 结果无法自己解释出来,最后通过网上查阅的方式解决了问题。本次实验结束也让 我明白,学习的深度还完全不够,以后的学习必须更加努力。 第 24 页