一段振动信号有尖峰,可以用什么方法给平滑掉,python示例

需求

一段振动信号有尖峰,可以用什么方法给平滑掉

思路

平滑振动信号以去除尖峰,常用的方法包括移动平均(Moving Average)、高斯滤波(Gaussian Filter)、中值滤波(Median Filter)等。这里提供一个使用移动平均和中值滤波的Python示例:

移动平均法

移动平均是一种简单的平滑技术,通过计算数据点的局部平均值来平滑数据序列

import numpy as np
import matplotlib.pyplot as plt

# 假设vibration_signal是你的振动信号
vibration_signal = np.random.normal(0, 1, 1000)
vibration_signal[::100] += 10  # 添加尖峰

# 移动平均
def moving_average(signal, window_size):
    return np.convolve(signal, np.ones(window_size)/window_size, mode='valid')

smoothed_signal_ma = moving_average(vibration_signal, 50)

plt.plot(vibration_signal, label='Original Signal')
plt.plot(smoothed_signal_ma, label='Smoothed Signal (MA)', color='red')
plt.legend()
plt.show()

在这里插入图片描述

中值滤波法

中值滤波是一种非线性的滤波技术,通过替换数据点为其邻域中值来减少噪声。

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import medfilt
# 假设vibration_signal是你的振动信号
vibration_signal = np.random.normal(0, 1, 1000)
vibration_signal[::100] += 10  # 添加尖峰

# 中值滤波
smoothed_signal_median = medfilt(vibration_signal, kernel_size=5)

plt.plot(vibration_signal, label='Original Signal')
plt.plot(smoothed_signal_median, label='Smoothed Signal (Median)', color='green')
plt.legend()
plt.show()

在这里插入图片描述

高斯滤波

高斯滤波是一种基于高斯函数的平滑技术,适用于去除高斯噪声。

from scipy.ndimage import gaussian_filter

# 高斯滤波
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter

# 假设vibration_signal是你的振动信号
vibration_signal = np.random.normal(0, 1, 1000)
vibration_signal[::100] += 10  # 添加尖峰

# 高斯滤波
smoothed_signal_gaussian = gaussian_filter(vibration_signal, sigma=5)

plt.plot(vibration_signal, label='Original Signal')
plt.plot(smoothed_signal_gaussian, label='Smoothed Signal (Gaussian)', color='orange')
plt.legend()
plt.show()

在这里插入图片描述

每种方法都有其优缺点,适用于不同的场景。移动平均简单易用,但可能不适合处理有尖锐峰值的信号;中值滤波对于去除尖峰噪声效果较好,但可能会改变信号的形状;高斯滤波在平滑数据的同时保持了边缘信息,但参数选择(如sigma)对结果影响较大。你可以根据实际情况选择最适合的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

故障诊断与python学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值