实验(3)信号的频谱分析

本文的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) ON2,所以计算机的运算速度无法实时计算,为了简化运算的时间复杂度,设计了FFT变换.

2.2.1 基2时间抽取FFT算法

       将时域序列逐次分解为一组子序列,利用旋转因子的特性,按n的奇偶性对变换加以分解:
在这里插入图片描述
       根据旋转因子的隐含周期性,最终得到分为奇偶的两个子序列的DFT计算方法:
在这里插入图片描述
       将上式的运算过程用蝶形运算来表示,蝶形运算的过程如下图所示,一次蝶形运算包括一次乘法和两次加法。
在这里插入图片描述
       用蝶形运算来表示上述DFT计算过程如下:
在这里插入图片描述
       将此运算推广至整个过程就可以得到基2时间FFT算法,其中乘法的次数为 N / 2 ∗ l o g N N/2*logN N/2logN,加法的次数为 N ∗ l o g N N*logN NlogN
       下面列举当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;
  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值