本文的pdf文件:link
一、实验目的
设计计算机程序,产生序列并计算序列的FFT和IFFT,绘制其幅频特性和相频特性曲线;模拟产生离散系统的输入序列和单位脉冲响应,分析FFT的计算长度对系统输出响应的影响;模拟产生连续时间信号,选取适当的采样频率对其采样,并用FFT算法计算其频谱,分析信号的观测时间长度,FFT的计算长度对信号频谱计算结果的影响。
二、实验原理
2.1 DFT
DFT是离散时间信号分析和处理中的一种重要变换,为了减少其运算量,FFT算法是DFT的一种快速算法。其基本思想是把N点的DFT分解为几个较短的DFT,并利用旋转因子W_Nnk=e(-j2 pi/N nk)的周期性、对称性和可约性实现分解。
由DFT的求解公式可知:
N称为DFT变换区间长度,N>=M。
下面选择不同的DFT长度,观察其对同一序列的DFT结果:
由上图可知,DFT实际上是对信号幅频响应的等间隔采样,N取值越大,则采样点数越多。
2.2 FFT
DFT根据其公式我们可以将其求解过程用如下矩阵来表示:
根据其运算过程我们可以推到出如果按照常规方式计算序列的DFT,则其时间复杂度为
O
(
N
2
)
O(N^2)
O(N2),所以计算机的运算速度无法实时计算,为了简化运算的时间复杂度,设计了FFT变换.
2.2.1 基2时间抽取FFT算法
将时域序列逐次分解为一组子序列,利用旋转因子的特性,按n的奇偶性对变换加以分解:
根据旋转因子的隐含周期性,最终得到分为奇偶的两个子序列的DFT计算方法:
将上式的运算过程用蝶形运算来表示,蝶形运算的过程如下图所示,一次蝶形运算包括一次乘法和两次加法。
用蝶形运算来表示上述DFT计算过程如下:
将此运算推广至整个过程就可以得到基2时间FFT算法,其中乘法的次数为
N
/
2
∗
l
o
g
N
N/2*logN
N/2∗logN,加法的次数为
N
∗
l
o
g
N
N*logN
N∗logN。
下面列举当N=8时,FFT的计算过程:
2.2.2 基2频域抽取FFT算法
将序列前后对半分开,然后分别计算其DFT:
根据旋转因子的特性,最后可以得到类似于基2时间FFT算法,其N=8时的运算流图如下所示:
对比上述两种FFT算法,其计算的时间复杂度相同,两类时间复杂度的运行时间区别如下图所示:
由上图可知,FFT算法确实显著的降低了计算的次数。
三、实验过程
3.1 FFT
给定一个序列,计算其FFT,并画出其幅频响应曲线。
X
(
n
)
=
[
0
,
1
,
2
,
3
,
4
,
5
]
X(n)=[0 ,1 ,2 ,3 ,4 ,5]
X(n)=[0,1,2,3,4,5]
其幅频特性如下:
相频特性如下:
计算其八点FFT
15.0000000000000 + 0.00000000000000i, -8.94974746830583 - 1.29289321881345i
2.00000000000000 - 3.00000000000000i, 0.949747468305833 + 2.70710678118655i
-3.00000000000000 + 0.00000000000000i, 0.949747468305833 - 2.70710678118655i
2.00000000000000 + 3.00000000000000i ,-8.94974746830583 + 1.29289321881345i
幅频特性为:
相频特性为:
3.2 计算系统的输出
给定一个系统的输入序列和单位脉冲响应
x
(
n
)
=
[
1
,
2
,
3
,
4
,
5
]
,
h
(
n
)
=
[
1
,
2
,
3
,
4
]
x(n)=[1,2,3,4,5] ,h(n)=[1,2,3,4]
x(n)=[1,2,3,4,5],h(n)=[1,2,3,4]
用FFT以及ITFT算法求出系统输出y(n),改变L的长度,观察y的不同。
L=9
L=8
L=7
L=6
3.3 采样输出信号的FFT
设置模拟信号为
f
=
s
i
n
(
p
i
/
4
)
f=sin(pi/4)
f=sin(pi/4),首先对其进行采样,得到离散时间信号,然后对其进行FFT变换。得到其幅频特性为:
相频特性为:
四、结果分析
根据实验结果可知,FFT为DFT的一种快速算法,其计算结果受到长度的影响,FFT可以用来计算系统的响应,也可以用来计算卷积操作,都可以大大减少运算时间。
五、matlab代码
% 设计计算机程序,产生序列并计算序列的FFT和IFFT,绘制其幅频特性和相频特性曲线;
% 模拟产生离散系统的输入序列和单位脉冲响应,分析FFT的计算长度对系统输出响应的影响;
% 模拟产生连续时间信号,选取适当的采样频率对其采样,
% 并用FFT算法计算器频谱,分析信号的观测时间长度,FFT的计算长度对信号频谱计算结果的影响。
x=[0,1,2,3,4,5];
N=8;
X=fft(x,N);
x=ifft(X,N);
figure(1)
n=0:1:7;
stem(n,abs(x));
xlabel('n');
ylabel('幅频');
grid on;
figure(2)
stem(n,angle(x));
xlabel('n');
ylabel('相频');
grid on;
figure(3)
n=0:1:7;
stem(n,abs(X));
xlabel('k');
ylabel('幅频');
grid on;
figure(4)
stem(n,angle(X)/pi);
xlabel('k');
ylabel('相频');
grid on;
%利用FFT和IFFT算法计算系统的输出响应
h=[1,2,3,4];
x=[1,2,3,4,5];
for j=-1:1:2
L=8-j;
y=ifft(fft(h,L).*fft(x,L));
i=0:1:L-1;
figure(3)
subplot(4,1,j+2)
stem(i,y);
grid on;
end
%采样n=0:1:7
f=sin(n*0.25*pi);
F=fft(f,8);
figure(4)
stem(n,abs(F))
grid on;
figure(5)
stem(n,angle(F))
grid on;