传感数据分析——中值滤波和均值滤波
本节将叙述在传感数据中基于滑动窗口的中值滤波和均值滤波,并基于Python实现
·
传感数据分析——中值滤波和均值滤波
前言
文章传感数据分析——Entropy Weight Method (熵权法)中叙述了熵权法的基本步骤。
之前几期文章已经叙述了信息熵权法、TOPSIS熵权法、近似熵权法、样本熵权法、模糊熵权法、排列熵权法。
本节将叙述在传感数据中基于滑动窗口的中值滤波和均值滤波,并基于Python实现。
废话不多说,直接上代码。
本文正文内容
一、运行环境
系统: Windows 10 / Ubuntu 20.04
编程语言: Python 3.8
文本编译器: Vscode
所需库:matplotlib >= 2.2.2 , numpy >= 1.19.5
二、Python实现
代码如下(示例):
import numpy as np
import matplotlib.pyplot as plt
def MidFilter(data, window_size):
"""
中值滤波算法
:param data: 一维数据
:param window_size: 窗口大小
:return: filtered_data: 滤波后的数据
"""
half_window = window_size // 2
if half_window <= 1:
return data
filtered_data = np.copy(data)
# 移动窗口向右滑动,直至到最后
for i in range(half_window, len(data) - half_window):
window = filtered_data[i - half_window: i + half_window + 1]
filtered_data[i] = np.median(window)
return filtered_data
def MeanFilter(data, window_size):
"""
均值滤波算法
输入:
data: 一维数据
:param window_size: 窗口大小
:return: filtered_data: 滤波后的数据
"""
half_window = window_size // 2
if half_window <= 1:
return data
filtered_data = np.copy(data)
# 移动窗口向右滑动,直至到最后
for i in range(half_window, len(data) - half_window):
window = filtered_data[i - half_window: i + half_window + 1]
filtered_data[i] = np.mean(window)
return filtered_data
if __name__ == '__main__':
# 导入数据
data= np.random.rand(1000)
# 保存路径
save_path = './result/'
# 测试数据
data_filter_mid = MidFilter(data, 10)
data_filter_mean = MeanFilter(data, 10)
# 绘图并保存
plt.figure(figsize=(16,9))
plt.plot(data)
plt.plot(data_filter_mid)
plt.plot(data_filter_mean)
plt.legend(['Original', 'Mid-Filter','Mean-Filter'])
plt.title("Filters Test", fontsize=18)
plt.savefig(save_path + "Filter_test.png")
plt.show()
结果图
可以发现,原数据噪声较多,中值滤波后相对平滑,均值滤波后效果较差,对于本数据情况,中值滤波更加合适。
总结
以上就是本节对传感数据进行滤波算法的内容,本文简单介绍了传感数据分析中值滤波和均值滤波Python的实现,具体见资源传感数据分析-中值滤波和均值滤波,后续还会持续更新本系列,收藏过100,后台联系我,我会免费将全部相关的代码都发给你。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)