Python 信号处理——傅里叶变换

Python 信号处理——傅里叶变化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

以前matab作为信号处理流形工具,里面丰富的信号处理函数那是真香。目前,python作为数据分析常用软件,其在信号处理方面的功能还有点欠缺。因此,博主将利用python逐步实现matlab中的信号处理函数。
下一个功能计划实现信号的包络分析。


一、傅里叶变化原理和用途

傅里叶变化主要是将信号从时域转换到频域,以获得信号的频谱特征。在使用过程中需要注意谱线数和信号截断影响,具体可以参考相应文献。程序中已考虑该两者影响。

二、使用步骤

1.主要代码

代码如下(示例):

import numpy as np

def FFT_demo(x,N,fs):
 	'''
    :param x: 输入信号
    :param N: 谱线数
    :param fs: 信号采样频率
    :return: 频谱值, 频率
    '''
    if N % 2 > 0:
        N -= 1
    if N > len(x):
        xs = np.append(x,np.zeros(N-len(x)))
    else:
        xs = x[:N]
    xf = np.fft.rfft(xs)/N
    freq = np.linspace(0,fs/2,int(N/2+1))
    xf = np.abs(xf)*2
    return xf, freq

2.示例Demo

代码如下(示例):

import numpy as np
import matplotlib.pyplot as plt

def FFT_demo(x,N,fs):
    if N % 2 > 0:
        N -= 1
    if N > len(x):
        xs = np.append(x,np.zeros(N-len(x)))
    else:
        xs = x[:N]
    xf = np.fft.rfft(xs)/N
    freq = np.linspace(0,fs/2,int(N/2+1))
    xf = np.abs(xf)*2
    return xf, freq
    
w = 5 # fre of rotational speed
z = 30 # gear teeth
fs = 1024 # vib signal sampling rate
fsw = 5 # rotational speed sampling rate
Time = 1 
f = w * z
t = np.linspace(0,Time-1/fs,int(Time*fs))
x = (1+1*np.sin(2*np.pi*20*t))*np.sin(2*np.pi*f*t)
Amplitude, fre = FFT1(x,1024,fs)
plt.subplot(2,1,1)
plt.plot(t,x)
plt.title('original')
plt.ylabel('Amplitude')
plt.subplot(2,1,2)
plt.plot(fre,Amplitude)
plt.title('Frequency')
plt.ylabel('Amplitude')
plt.show()

总结

欢迎各位交流,后续有啥想实现的信号处理功能,请在下方评论区留言,或者关注公众号(PS提现更新):不说话上代码在这里插入图片描述

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不说话上代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值