信号采样基本概念 —— 5. 加权移动平均滤波(Weighted Moving Average Filtering)
在上一章,我们介绍了使用滑动窗口以及平均值denoising,那么既然可以使用平均值denoising,那么也必然可以用权重替代均值进行denoising。
文章目录
- 什么是加权移动平均滤波(Weighted Moving Average Filtering)
- 实现代码
什么是加权移动平均滤波(Weighted Moving Average Filtering)
加权移动平均滤波(Weighted Moving Average Filtering)是一种对移动平均滤波的改进,它在计算滑动窗口内样本的平均值时为不同的样本赋予不同的权重,以便更好地适应信号的变化。
与移动平均滤波不同,加权移动平均滤波使用一个权重向量来对窗口内的样本进行加权平均。这个权重向量定义了每个样本在平均计算中的重要性。通常情况下,权重向量是根据一定的规则或特定的设计目标来确定的。
因此,这里常见的权重设计方法就有了,例如:
- 线性权重:在滑动窗口中,最早的样本权重最小,最新的样本权重最大。这种权重设计假设信号的最新样本更重要,而旧样本的重要性逐渐减小。
- 高斯权重:使用高斯分布函数来定义权重,使得距离当前样本较近的样本具有较高的权重,而距离较远的样本具有较低的权重。
那么,我们以高斯权重为例,来看看加权移动平均滤波如何实现。
关于高斯函数
高斯函数是一种连续的概率分布函数,具有钟形曲线的形状。它在统计学和信号处理中经常被使用,因为它具有许多良好的性质。
在加权移动平均滤波中,高斯权重函数被用于给予离当前时间点越近的数据点越高的权重,离当前时间点越远的数据点则具有较低的权重。这样做的目的是为了更加强调近期的数据点,同时减弱较远的数据点对平均值的影响,从而实现平滑效果。
其中,
w ( i ) = exp ( − ( i − c ) 2 2 σ 2 ) w(i) = \exp \left ( - \frac{(i - c)^2}{2 \sigma^2} \right ) w(i)=exp(−2σ2(i−c)2)
这里 w ( i ) w(i) w(i) 是第 i i i 个数据点的权重, c c c 是当前时间点, σ \sigma σ 是高斯函数的标准差。这个权重函数将时间点 i 与当前时间点 c 的距离考虑在内,距离越近的数据点权重越高,距离越远的数据点权重越低。
在实际应用中,通常选择合适的标准差 σ 来控制权重函数的宽度,从而平衡平滑效果和对数据点的响应速度。
通过将每个数据点乘以对应的权重,然后将它们相加再除以权重的总和,可以得到加权移动平均滤波的结果。这样计算得到的平均值对近期数据的响应更强,对远期数据的响应较弱,从而实现了平滑效果。
实现代码
我们基于之前的 信号采样基本概念 —— 4. 移动平均滤波(Moving Average Filtering) 的代码为例,对该代码修改后,于是有了:
import numpy as np
import matplotlib.pyplot as pltdef gaussian_weighted_moving_average(signal, window_size, sigma):t = np.linspace(-window_size // 2, window_size // 2, window_size)weight = np.exp(-t**2 / (2 * sigma**2)) # 高斯权重# 归一化权重,使其总和为1weight /= np.sum(weight)return np.convolve(signal, weight, mode='same')# 生成示例信号
t = np.linspace(0, 10, 100) # 时间轴
signal = np.sin(t) + np.random.randn(100) * 0.2 # 添加噪声的正弦信号# 进行加权移动平均滤波
filtered_signal = gaussian_weighted_moving_average(signal, window_size=10, sigma=2)# 绘制原始信号和滤波后的信号
plt.figure(figsize=(10, 4))
plt.plot(t, signal, label='Original Signals')
plt.plot(t, filtered_signal, label='Filtered Signals')
plt.xlabel('Time')
plt.ylabel('Amplitude')
plt.title('Gaussian Weighted Moving Average Filtering')
plt.legend()
plt.grid(True)
plt.show()
然后看看实现效果如何:
信号采样基本概念 —— 5. 加权移动平均滤波(Weighted Moving Average Filtering)相关推荐
- EWMA(Exponentially Weighted Moving Average)指数加权移动平均
原博:http://blog.csdn.net/sony_zhang/article/details/7256646 EWMA(Exponentially Weighted Moving Averag ...
- YOLOv5的Tricks | 【Trick7】指数移动平均(Exponential Moving Average,EMA)
如有错误,恳请指出. 文章目录 1. 移动平均法 2. 指数移动平均 3. TensorFlow中的EMA使用 4. Yolov5中的EMA使用 这篇博客主要用于整理网上对EMA(指数移动平均)的介绍 ...
- 信号采样基本概念 —— 1. 冲激函数
文章目录 冲激函数(Impulse Function)的数学定义 对连续信号的采样 冲激函数对任意位置的扩展应用 对离散情况也适用 对信号的采样 冲激函数的高级扩展 傅里叶分析 卷积 冲激函数(Imp ...
- 信号采样基本概念 —— 2. 频谱与功率谱
文章目录 经常我们会在很多地方或者文件中看见 频率谱 和 功率谱 这两个名词,今天在这篇文章里,我们就来解释这两个经常听到的名词. 频率谱/频率图 频率谱是指将信号的频率成分分离出来后的图像,它可以用 ...
- EWMA之——EWMA指数加权移动平均模型的Java实现
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/79141435 具体代码如下: package com.lyz.storm.ewma ...
- EWMA 指数加权移动平均 模型
Exponentially Weighted Moving Average(EWMA)指数加权移动平均是一种常用的序列数据处理方式,如下: 在时间 t, 根据实际的观测值(或量测值)我们可以求取 EW ...
- 移动平均(Moving Average)
作者:石川 链接:https://zhuanlan.zhihu.com/p/38276041 来源:知乎 已获得作者同意转载. 1 前言 移动平均(Moving Average,MA),又称移动平均线 ...
- java 移动平均_EWMA之——EWMA指数加权移动平均模型的Java实现
具体代码如下: package com.lyz.storm.ewma; import java.io.Serializable; /** * 实现指数移动平均值计算 * 实现中使用了流式风格的buil ...
- Python 金融量化 均线系统交易策略专题(简单移动平均,加权移动平均,指数加权移动平均,异同移动平均MACD等解读与绘图)
捕捉趋势最普遍的方法为移动平均线,根据求平均的方式不同,移动平均数又可分为简单移动平均数(Simple Moving Average, SMA),加权移动平均数(Weighted Moving Ave ...
最新文章
- java并发编程_Java并发编程之 synchronized
- gif分解工具_Python之GIF图倒放,沙雕快乐源泉
- Java实现Huffman哈夫曼树(数组实现)
- 基于嵌入式操作系统VxWorks的多任务并发程序设计――中断与任务
- linux字符驱动向vxworks移植,VxWorks驱动移植至SylixOS总结
- 初识 Vue(11)---(Vue 中的事件绑定)
- android 清屏函数,浅谈android截屏问题
- 最小生成树之迪杰斯特拉算法(Dijkstra算法)之单源最短路径
- android 讲程序设为默认主屏幕_轻松搞定 PC 副屏,双屏幕更方便!
- Memcached:高性能的分布式内存缓存服务器
- linux的文件系统简单介绍
- 图像处理之基础---ffmpeg 中的图像缩放
- QTeewidget逐行进行遍历(递归)
- 小榕flash管理器xp 是什么
- su室内插件_SketchUp必学插件TOP100,每一个都是[室内/装饰/景观]设计的效率神器...
- PHP爬虫微博某个话题的所有内容,GitHub - wansho/sina_weibo_crawl: 爬取新浪微博某一话题的数据,可以替代微博搜索接口...
- 语聊房玩法解析,如何快速打造一款语音社交产品
- iGoogle自定义
- 1997年小学生计算机知识竞赛,2019年中小学优秀传统文化知识竞赛试题(小学组)97题附全答案...
- iOS弱引用表 SideTable weak_table_t weak_entry_t