简单易学的几大经典滤波算法(含代码及仿真)简单易学的几大经典滤波算法(含代码及仿真)
一、限幅滤波法一、限幅滤波法
设定两次采样允许的最大偏差为A
如果(本次值-上次值)的绝对值大于A,则本次值无效,用上次值代替本次值
如果(本次值-上次值)的绝对值大于A,则本次值有效,采用本次值
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.figure(figsize = (20,8))
list_s = []
s = np.random.normal(0,25,400)
plt.plot(s,label = '原始数据')
for i in range(len(s)-1):
if abs(s[i+1] - s[i]) >= 15:
s[i+1] = s[i] list_s.append(s[i+1])
plt.plot(list_s,label = '滤波后数据')
plt.title('限幅滤波法')
plt.legend()
plt.show()
二、中位值滤波法二、中位值滤波法
连续采样N次,N取奇数
把N次值按从小到大或从大到小顺序排列,取中位数为本次有效结果
plt.figure(figsize = (20,8))
s = np.random.normal(0,25,400)
plt.plot(s,label = '原始数据')
n = 7 #一次采样的次数
rank = [] for i in range(int(len(s)/n)):
select_s = s[i*n:(i+1)*n] #切片选取一次采样的个数
mid_s = np.median(select_s)
for j in range(n): #将取到的值都赋值为中值,方便画图体现,实际中可以只要一次值
rank.append(mid_s)
plt.plot(rank,label = '滤波后的数据')
plt.title('中值滤波算法')
plt.legend()
plt.show()