答:DTFT 是关于 ?的周期函数么?是周期函数 周期是 - 2π
相位谱中跳变的原因是 - 对相位进行归一化。
实验名称:离散傅立叶变换和z变换
实验目的和任务:
掌握离散傅立叶变换(DFT)及逆变换(IDFT)、z变换及逆变换的计算和分析。利用Matlab语言,完成DFT和IDFT的计算及常用性质的验证,用DFT实现线性卷积,实现z变换的零极点分析,求有理逆z变换。 实验内容:
DFT和IDFT计算: Q3.23~3.24
DFT的性质: Q3.26~3.29,Q3.36,Q3.38,Q3.40 z变换分析:Q3.46~3.48 逆z变换:Q3.50
实验过程与结果分析:…参见实验一格式…
Q3.23编写一个MATLAB程序,计算并画出长度为N的L点离散傅里叶变换X[k]的值, 其中L≥N,然后计算并画出L点离散傅里叶逆变换X[k]。对不同长度N和不同的离散傅里叶变换长度L,运行程序。讨论你的结果。
clf; N=200; L=256; nn=[0:N-1];
kk=[0:L-1];
xR=[0.1*(1:100) zeros(1,N-100)]; xI=[zeros(1,N)]; x=xR+i*xI; XF=fft(x,L); subplot(3,2,1); grid; plot(nn,xR); grid;
title('Re\\{x[n]\\}'); xlabel('Time index n'); ylabel('Amplitude'); subplot(3,2,2); plot(nn,xI); grid;
title('Im\\{x[n]\\}'); xlabel('Time index n'); ylabel('Amplitude'); subplot(3,2,3); plot(kk,real(XF)); grid;
title('Re\\{x[n]\\}'); xlabel('Frequency index k'); ylabel('Amplitude'); subplot(3,2,4); plot(kk,imag(XF)); grid;
title('Im\\{x[n]\\}'); xlabel('Frequency index k'); ylabel('Amplitude'); xx=ifft(XF,L); subplot(3,2,5); plot(kk,real(xx)); grid;
title('Real part of IDFT\\{x[n]\\}'); xlabel('Time index n'); ylabel('Amplitude'); subplot(3,2,6); plot(kk,imag(xx)); grid;
title('Imag part of IDFT\\{x[n]\\}'); xlabel('Time index n'); ylabel('Amplitude');
Q3.26在函数circshift中,命令rem的作用是什么? 答:Rem(x,y)是用y对x求余数函数。
Q3.27 解释函数circshift怎样实现圆周移位运算。
答:在输入序列x由M的位置开始被循环移位,如果M>0,则circlshift删除从矢量x最左边开始的M个元素和它们附加在右侧的剩余元素,以获得循环移位序列。如果M<0,则circlshift首先通过x的长度来弥补M,即序列x最右边的长度的M样本从x中删除和附加在其余的M个样本的右侧,以获得循环移位序列。 Q3.28在函数circonv中,运算符~=的作用是什么? 答:“~=”表示不等于。
Q3.29解释函数circonv怎样实现圆周卷积运算。
答:输入时两个长度都为L的向量x1和x2,它是非常有用的定期延长X2的函数。让x2p成为x2延长无限长的周期的序列。从概念上讲,在定点时间上通过时序交换后的x2p的长度L交换x2p序列和x2tr等于1的元素。然后元素1至L的输出向量y是通过取x1和获得的长度为L的sh矢量之间的内积得到通过循环右移的时间反转向量x2tr。对于输出样本Y[n]的1≤N≤L时,右循环移位的量为n-1个位置上。
Q3.30通过加入合适的注释语句和程序语句,修改程序P3.7,对程序生成的图形中的两个轴加标记。哪一个参数决定时移量?若时移量大于序列长度,将会发生什么?
function y = circshift(x,M) if abs(M) > length(x) M = rem(M,length(x)); end if M < 0
M = M + length(x); end
y = [x(M+1:length(x)) x(1:M)];
clf; M = 6;
a = [0 1 2 3 4 5 6 7 8 9]; b = circshift(a,M); L = length(a)-1; n = 0:L; subplot(2,1,1);
stem(n,a);axis([0,L,min(a),max(a)]); title('Original Sequence'); xlabel('time index k'); ylabel('a[n]'); subplot(2,1,2);
stem(n,b);axis([0,L,min(a),max(a)]);
title(['Sequence Obtained by Circularly Shifting by',num2str(M),'Samples']); xlabel('time index n'); ylabel('b[n]');
D决定时移量,左移M位。
Q3.31运行修改后的程序并验证圆周时移运算。 修改后的程序如下:
Q3.32通过加入合适的注释语句和程序语句,修改程序P3.8,对程序生成的图形中的两个轴加标记。时移量是多少?
clf;