资源描述
电信类课程试验报告
学 院:基础信息工程
系 别:电子信息工程
课程名称:数字信号处理
姓 名:
学 号:
日 期:
实验五
实验名称:利用FFT实现快速卷积
一、实验目的
1.加深理解FFT在实现数字滤波(或快速卷积)中的重要作用,更好地利用FFT进行数字信号处理。
2.进一步掌握圆周卷积和线性卷积两者之间的关系。
二、主要函数简介
MATLAB中计算序列的离散傅里叶变换和逆变换是采用快速算法,利用fft和ifft函数实现。
1、[x]=fft(x, N)
输入参数:为待计算DFT的序列,N为序列的长度。
输出参数:为序列 的IDFT。
2、
输入参数:x为待计算IDFT的序列,N为序列x的长度。
输出参数:X 为序列x的IDFT。
三、实验内容
⑴给定两个序列x(n)=[2,1,1,2],h(n)=[1,-1,-1,1]。首先直接在时域计算两者的线性卷积;其次用FFT快速计算二者的线性卷积,验证结果。
⑵数字滤波器的脉冲响应为h(n)=(- ,N可自定,本实验取N 输入序列x(n)可选下列几种情况:
①X(n)=R(n),N可自取16
②x(n)=cos(,N=16
③X(n)=( R(n), N=16
⑶实验前,预先编制一个应用FFT实现数字滤波器的通用程序。
⑷上机独立调试,并打印或记录实验结果。
⑸将实验结果与预先笔算的结果比较,验证其正确性。
(1)
clear;clc;
xn=[2 1 1 2];
hn=[1 -1 -1 1];
yn=conv(xn,hn);
stem(yn);
ylabel('xn与hn卷积的幅度');
xlabel('xn的值');
用FFT:
clear;clc;
n=[0:1:3];
m=[0:1:3];
N1=length(n);
N2=length(m);
xn=[2 1 1 2];
hn=[1 -1 -1 1];
N=N1+N2-1;
XK=fft(xn,N);
HK=fft(hn,N);
YK=XK.*HK;
yn=ifft(YK,N);
if all(imag(xn)==0)&(all(imag(hn)==0))
yn=real(yn);
end
x=0:N-1;
stem(x,yn,'.')
(2)
①
n=[0:1:16];
m=[0:1:5];
N1=length(n);
N2=length(m);
xn=(-0.5).^n;
hn=ones(1,N2);
N=N1+N2-1;
XK=fft(xn,N);
HK=fft(hn,N);
YK=XK.*HK;
yn=ifft(YK,N);
if all(imag(xn)==0)&(all(imag(hn)==0)) %实序列的循环卷积仍然为实序列
yn=real(yn);
end
x=0:N-1;
stem(x,yn,'.')
②
n=[0:1:16];
m=[0:1:10];
N1=length(n);
N2=length(m);
xn=cos(2*pi*n/N1);
hn=ones(1,N2);
N=N1+N2-1;
XK=fft(xn,N);
HK=fft(hn,N);
YK=XK.*HK;
yn=ifft(YK,N);
if all(imag(xn)==0)&(all(imag(hn)==0)) %实序列的循环卷积仍然为实序列
yn=real(yn);
end
x=0:N-1;
stem(x,yn,'.')
③
n=[0:1:16];
m=[0:1:10];
N1=length(n);
N2=length(m);
xn=(1/3).^n;
hn=ones(1,N2);
N=N1+N2-1;
XK=fft(xn,N);
HK=fft(hn,N);
YK=XK.*HK;
yn=ifft(YK,N);
if all(imag(xn)==0)&(all(imag(hn)==0))
yn=real(yn);
end
x=0:N-1;
stem(x,yn,'.')
四、实验小结
五、教师评语
教师签字: 年 月 日
展开阅读全文