FFT进行频谱分析

本文详细介绍了如何利用快速傅里叶变换(FFT)进行频谱分析,强调了采样定理的重要性,即采样频率至少为信号频率的两倍。在1秒内采样1048点,得到的最高信号频率为1047Hz,频率分辨率则为1Hz。通过Python代码展示了如何计算每个采样点对应的频率值,并找到信号的最大频率。最后,给出了求取信号最大频率值的代码片段,这在信号处理和频谱分析中非常关键。
摘要由CSDN通过智能技术生成

采样定理:采样频率要大于信号频率的两倍。
N个采样点经过FFT变换后得到N个点的以复数形式记录的FFT结果。假设采样频率为Fs,采样点数为N。那么FFT运算的结果就是N个复数(或N个点),每一个复数就对应着一个频率值以及该频率信号的幅值和相位。第一个点对应的频率为0Hz(即直流分量),最后一个点N的下一个点对应采样频率Fs。其中任意一个采样点n所代表的信号频率:

   Fn=(n-1)*Fs/N。
   这表明,频谱分析得到的信号频率最大为(N-1)*Fs/N,对频率的分辨能力是Fs/N。采样频率和采样时间制约着通过FFT运算能分析得到的信号频率上限,同时也限定了分析得到的信号频率的分辨率。每一个复数的模值对应该点所对应的频率值的幅度特性。

现在我们要对该信号在0-1秒时间内进行频谱分析,我们在这1秒时间内采样1048点,则我们的采样频率为1048Hz。这两个设定决定了我们频谱分析所能得到的最高信号频率是1047Hz (1048Hz*(1048-1)/1048),但只有小于524Hz的频率才可能是真实的信号频率。我们能分辨的最小频率差为1Hz(1048Hz/1048)。输入如下的python代码:

		N=len(t)                  # 采样点数
		fs=1048.0                   # 采样频率`在这里插入代码片`
      df = fs/(N-1)                    # 分辨率
      f = [df*n for n in range(0,N)]          # 构建频率数组

使用下面的代码进行快速傅里叶变换并对结果模值进行缩放:

      Y = np.fft.fft(y)*2/N  #*2/N 反映了FFT变换的结果与实际信号幅值之间的关系
    absY = [np.abs(x) for x in Y]      #求傅里叶变换结果的模

此时我们得到了信号的FFT分析结果,它存储在列表Y内,同时我们也获取了Y内每一个元素(是复数)的模组成的列表absY。根据理论分析,absY内的元素大部分都极其接近0,只有极少数峰值提示的是信号频率的幅度。我们写一段代码来求信号的最大频率值。代码如下:

max_Y= max(absY )      ##峰值
absY_index_imax = absY.index(max(absY ))      ###最大值对应的点数
fre = (absY_index_imax - 1 )*fs/N                       ##信号的频率
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值