一、实验目的 1.学习用 FFT和IFFT计算线性卷积的方法。 2.编制 IFFT程序。 3.实现用 FFT 程序计算线性卷积。
二、实验原理 利用 FFT 计算线性卷积,是将 x(n)、h(n) 用补零法延长到 N M-1 用循环卷积定理完成的,因此要求 x(n) 、 h(n)延长后的长度 既满足 L>=N M-1 又满足 L = 2γ ,(γ 为任意正整数)后者是 FFT 时间抽选奇偶分解算法要求的,程序中都要给于保证。 三、实验内容 1、 已知两个序列:
分别用直接法和 FFT 方法计算它们的线性卷积,并比较其结果。
参考流程图:
输入序列 x(n),h(n)长度分别为N 和 M
2、利用 FFT 实现两序列的卷积运算,并研究 FFT 点数与混叠的关系。 给定 x(n) = nR16 (n), h(n) = R8 (n) ,用 FFT 和 IFFT 分别求线性卷积和混叠结果输出,并画出相应图形。 参考流程图:
四、实验报告及要求 1. 简述实验原理及目的。 2. 整理好经过运行并证明是正确的程序。 3. 对计算线性卷积的两种方法,直接法和FFT 法进行比较。 4. 分析研究如何将本程序改造成完成分段卷积的程序。
代码语言:javascript复制N=10;M=15;
nx=0:N-1;
x=[nx<=5];
n1=0:11;
h1=0.8.^n1;
nh=0:M-1;
h=zeros(1,M);
h(find(nh<=11))=h1;
y1=conv(x,h);
n01=min(nx) min(nh);
n02=max(nx) max(nh);
ny1=[n01:n02];
subplot(321),stem(nx,x,'.');
text(8,0.7,'x(n)');
subplot(322),stem(nh,h,'.');
text(11,0.7,'h(n)');
subplot(312),stem(ny1,y1,'.');
text(18,3,'直接线性卷积');
n=0:N M-2;
L=length(n);
xk=fft(x,L);
hk=fft(h,L);
yk=xk.*hk;
y2=ifft(yk);
y2=abs(y2);
subplot(313),stem(n,y2,'.');
text(18,3,'用FFT进行卷积');
代码语言:javascript复制n1=0:15;
x1=n1;
n2=0:7;
M=length(n2);
x2=ones(1,M);
y1=conv(x1,x2);
n01=min(n1) min(n2);
n02=max(n1) max(n2);
ny1=[n01:n02];
subplot(421),stem(n1,x1,'.');
title('x1(n)');
subplot(422),stem(n2,x2,'.');
title('x2(n)');
subplot(423),stem(ny1,y1,'.');
title('线性卷积');
for L=17:3:29
n=0:L-1;
xk1=fft(x1,L);
xk2=fft(x2,L);
yk=xk1.*xk2;
y2=ifft(yk);
y2=abs(y2);
subplot(4,2,(L-5)/3),stem(n,y2,'.');
title('用FFT进行卷积');
end