g=[1 -3 4 2 0 -2]; h=[3 0 1 -1 2 1]; l=length(g); L=2*l-1; GE=fft(g,L); HE=fft(h,L); y1=ifft(GE.*HE); for n=1:l if n+l<=L
y2(n)=y1(n)+y1(n+l); else
y2(n)=y1(n); end end y2
stem(0:l-1,y2) xlabel('k') ylabel('y(k)') title('循环卷积')
(2)
循环卷积结果
-71.0000 -213.0000 89.0000 267.0000 73.0000 219.0000
第6页
程序代码
k=0:5;
x=cos(pi.*k./2); y=3.^k; l=length(x); L=2*l-1; GE=fft(x,L); HE=fft(y,L); y1=ifft(GE.*HE); for n=1:l if n+l<=L
y2(n)=y1(n)+y1(n+l); else
y2(n)=y1(n); end end y2
stem(0:l-1,y2) xlabel('k') ylabel('y’(k)') title('循环卷积')
第7页
M2-2 已知序列x[k]???cos(k?/2N),|k|?N
0,其他?(1)计算序列DTFT的表达式X(ej?),并画出N=10时,X(ej?)的曲线。
(2)编写一MATLAB程序,利用fft函数,计算N=10时,序列x[k]的DTFT在?m?2?m/N的抽样值。利用hold函数,将抽样点画在X(ej?)的曲线上。
解:
(1) X(e)?DTFT{x[k]}?j?k????x[k]e??j?k?k??N?cos(k?/2N)eN?j?k
程序代码
N=10; k=-N:N;
x=cos(k.*pi./(2*N)); W=linspace(-pi,pi,512);
第8页
X=zeros(1,length(W)); for k=-N:N
X1=x(k+N+1).*exp(-j.*W.*k); X=X+X1; end
plot(W,abs(X)) xlabel('W'); ylabel('abs(X)');
(2)
程序代码
N=10; k=-N:N;
x=cos(k.*pi./(2*N)); X_21=fft(x,21); L=-10:10;
W=linspace(-pi,pi,1024); X=zeros(1,length(W)); for k=-N:N
X1=x(k+N+1).*exp(-j.*W.*k); X=X+X1; end
第9页
plot(W,abs(X));hold on;
plot(2*pi*L/21,fftshift(abs(X_21)),'o'); xlabel('W'); ylabel('abs(X)');
M2-3 已知一离散序列为x[k]?Acos?0k?Bcos[(?0???)k]。用长度N=64的Hamming窗对信号截短后近似计算其频谱。试用不同的A和B的取值,确定用Hamming窗能分辨的最小的谱峰间隔??w?c的值。
解:f1=100Hz f2=120Hz时
2?中cN
f2=140Hz时
第10页