数字信号处理(一):时频域信号转换与时域滤波

时频域信号转换与时域滤波

现在有这样一个项目需求:在传感器端只能获取到时域信号相关振动数据(速度、加速度等),要针对振动信号进行故障分析,而要实现它,第一步就是要实现时频域信号间的互相转换,并叠加时域滤波。

FFT快速傅里叶变换

了解FFT相关基础可以参考以下知乎大佬的文章:

FFT基础指路☞傅里叶分析之掐死教程

要实现时频域信号间的高效转换,就要用到FFT快速傅里叶变换,通过python的第三方scipy库中的fft函数就能快速实现需求。

scipy中有两个模块scipy.fft和scipy.fftpack都可以实现FFT,这两个模块非常相似,但scipy.fft模块较新,应优先于scipy.fftpack使用。

import numpy as np
import matplotlib.pyplot as plt
from scipy import fft, signal

时域图像展示

利用with open() as f方法导入时域信号数据后,可以利用以下代码展示时域图像:

def timeWave(SAMPLE_RATE, DURATION, Slist):
    # 计算采样的点数
    N = int(SAMPLE_RATE * DURATION)
    t = np.linspace(0, DURATION, N, endpoint=False)
    plt.plot(t, Slist)
    plt.xlabel('时间(s)')
    plt.ylabel('振动幅值')
    plt.title('时域波形图')
    plt.show()

其中涉及到一个公式采样点数=采样频率*采样时间

这是我生成的图像:
时域图像

转化为频域信号

通过scipy.fft转化为频域信号

# 对数组数据进行傅里叶变换
    yf = fft.fft(Slist)
    # 计算频率的中心,用来绘制x轴的数值
    xf = fft.fftfreq(N, 1 / SAMPLE_RATE)
    yf = np.abs(yf)
    # 归一化
    yf1 = yf / len(yf)

时域滤波

利用巴特沃斯滤波器进行时域滤波

def butter_filter(s1, s2, SAMPLE_RATE, Slist):
    # 构造巴特沃斯滤波器
    # 我们假设采样频率为12800hz,信号本身最大的频率为6400hz,要滤除100hz以上频率成分,即截至频率为100hz,则wn=2*100/12800=0.2
    s1 = 4 * s1 / SAMPLE_RATE
    s2 = 4 * s2 / SAMPLE_RATE
    b, a = butter(N = 7, Wn = [s1, s2], btype = 'bandpass')  # 带通滤波:配置滤波器N表示滤波器的阶数
    # 使用滤波函数进行滤波操作
    filtedData = signal.filtfilt(b, a, Slist)  # 要过滤的信号
    return filtedData
  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FelixBug

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

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

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

打赏作者

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

抵扣说明:

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

余额充值