Uploaded by 石汝成

20191060167 第3次实验

advertisement
《数字信号处理》实验报告
年级
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 页
Download