振动传感器数据的FFT分析(python)

在工业应用领域中,经常会处理传感器接收到的振动信号(vibration signal)。但是原始的信号是处于时间域的,对于某些情况来说,频率域的信号也许对于对系统的分析有着更大的帮助(频域信号可能更具有某些独特的特征),傅立叶变换所要解决的问题便是将时域信号变换到频域信号。但是他有一些致命的缺点:计算量太大,时间复杂度太高,如果采样点数过多的话,会导致计算缓慢,因此便出现了快速傅立叶变换(FFT)。

关于FFT的具体理论分析,这里不再赘述,网上关于FFT的理论分析、公式推导到处都是(其实是我也没有理解透彻 )。这里主要讲一下在python中的实现过程,以及其相关的一些信号处理过程。

整个功能实现在了fftprocess函数中,包括图像的绘制、fft变化、归一化、取对数等操作。

首先绘制图像,观察原始信号的趋势图和分布图。

sampling_rate为数据点的采样频率(Hz),fft_size代表一个样本中包含的数据点的个数,signal代表传入的信号,时间标的单位为ms,linespace函数用来生成指定间隔内均匀间隔的数字,tstemp代表横坐标的时间标。下面是绘制出的图像。

接下来执行傅立叶变换的操作,在np.fft的包中,有两种fft方法供选择,一种是fft,另一种是rfft,如果样本数据点的个数为N,则fft方法返回N个变换后的数据点,rfft返回N/2+1个变换后的数据点。N个处理后的数据点事左右对称的,实际有效的数据只有N/2+1个,rfft返回的结果可以直接使用,不需要进行折半处理。

处理过后的结果,我们查看一下前五个数据的形式:

fft处理过后的数据是复数的形式,为了方便我们对数据进行处理,我们取它的绝对值(即取模运算,得到振幅),并计算每点对应的频率值(通过linspace),绘制出振幅谱

通常在工程应用中,要对取绝对值后的结果进行归一化与取log的操作,归一化既可以在取模前进行,也可以在取模后进行,取对数可以缩小大值和小值之间的差距。

np.clip将输入限制在min(1e-20)与max(1e1000)之间,防止出现log(0)无法计算的情况。

最后返回经过快速傅立叶变换处理过后的信号数据。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值