实验七 离散信号的频域分析
1.实验目的
(1)掌握离散信号DTFT和DFT的计算的MATLAB实现。
(2)验证DFT与DTFT的关系。
(3)验证DFT圆周卷积定理。
2.实验原理
(1)DTFT的计算
序列x(n)的DTFT是的连续函数。在MATLAB中只能以数值形式计算其在给定区间中离散频率点上的值。可以用函数freqz计算,调用格式如下:
[X,w] = freqz(x,1,N);[X,w] = freqz(x,1,N,'whole');X=freqz(x,1,w)
第一种格式求出的是0~π之间的频谱,第二种格式求出的是0~2π之间的频谱。第三种格式求的是指定频率w对应的频谱值。
式子中,x为时间序列,N是欲求的频谱值的个数,X是频谱值,w为对应的频率值,两者均为列向量。如果x是有限长序列,可求得精确值;如果x是无限长序列,求得的是近似值。
(2)DFT计算
序列x(n)的DFT可以用函数fft计算,调用格式如下:
X = fft(x,N);
其中,x为时间序列,N为DFT的点数,X为x的DFT值。如果N与序列长度相等,可以省略,此时调用格式为:X = fft(x);
(3)DFT与DTFT的关系
长度为L的序列的N点DFT与其DTFT的关系为
根据这个关系,可以得到计算DFT的另一种方法:
X = freqz(x,1,N, 'whole');
(4)DFT圆周卷积定理
圆周卷积定理:
3.实验内容及其步骤
(1)序列x={1,2,3,4},求x在-π~π之间的DTFT,画出幅度谱和相位谱。
提示:用函数freqz,abs,angle,subplot,plot
部分参考代码:
x= [1 2 3 4];
w=linspace(-pi,pi,500);
X=freqz(x,1,w);
(2)分别用两种方法求上述序列的8点DFT,16点DFT并画图比较。
提示:用函数fft,freqz,subplot,plot,hold on
部分参考代码:
X1 = fft(x,8);%8点FFT
X2 =freqz(x,1,8,'whole');%利用DTFT求DFT
subplot(211);
plot(X1,'o');
hold on;
plot(X2,'+');
(3) 用序列x1={1,2,3,4}和序列x2={4,3,2,1}来验证圆周卷积性质。
圆周卷积可以用以下函数求得:
function y = circconv(x1,x2,N)
K = length(x1);
M = length(x2);
L = K+M-1;
x1 = x1(:).';
x2 =x2(:).';
y1=conv(x1,x2);
if N >=L
y = [y1,zeros(1,N-L)];
else
m=L-N;
y2 = circshift(y1,m);
y3 = [y2(1:m),zeros(1,N-m)];
y = y1(1:N)+y3;
end
函数中调用的circshift代码如下:
function y=circshift(x,m)
% y=x((n-m))
N = length(x)
if abs(m)>N
m= rem(m,N);linspace函数调用的格式为
end
n=0:N-1;
y=x(mod(n-m,N)+1);
提示:
分别计算x1、x2的DFT,相乘,求逆(用ifft),将结果与圆周卷积的序列比较。
4.实验用MATLAB函数介绍
用到的函数有:
freqz,linspce,fft,ifft,subplot,plot,abs,angle,xlabel,title,hold on,conv,length,rem,mod等。
5. 思考题
(1)如果,如何比较精确的求出其DTFT?
(2) 利用圆周卷积的矩阵形式,重新写一个计算圆周卷积的函数。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论