什么是平滑,我该怎么做?
我在 Matlab 中有一个数组,它是语音信号的幅度谱(FFT 的 128 个点的幅度)。如何使用移动平均线平滑它?据我了解,我应该取一定数量元素的窗口大小,取平均值,这将成为新的第一个元素。然后将窗口向右移动一个元素,取平均值,成为第二个元素,依此类推。真的是这样吗?我不确定自己,因为如果我这样做,在我的最终结果中我将拥有少于 128 个元素。那么它是如何工作的以及它如何帮助平滑数据点呢?或者有没有其他方法可以对数据进行平滑处理?
编辑:链接到后续问题
什么是平滑,我该怎么做?
我在 Matlab 中有一个数组,它是语音信号的幅度谱(FFT 的 128 个点的幅度)。如何使用移动平均线平滑它?据我了解,我应该取一定数量元素的窗口大小,取平均值,这将成为新的第一个元素。然后将窗口向右移动一个元素,取平均值,成为第二个元素,依此类推。真的是这样吗?我不确定自己,因为如果我这样做,在我的最终结果中我将拥有少于 128 个元素。那么它是如何工作的以及它如何帮助平滑数据点呢?或者有没有其他方法可以对数据进行平滑处理?
编辑:链接到后续问题
平滑可以通过多种方式完成,但在非常基本和一般的术语中,这意味着您可以通过将其元素与其相邻元素混合来平衡信号。您可以稍微涂抹/模糊信号以消除噪音。例如,一个非常简单的平滑技术是,将每个信号元素重新计算f(t)
为原始值的 0.8,加上每个相邻元素的 0.1:
f'(t) = 0.1*f(t-1) + 0.8*f(t) + 0.1*f(t+1)
请注意乘法因子或权重如何加起来为 1。因此,如果信号相当恒定,则平滑不会对其产生太大影响。但是,如果信号包含突然的变化,那么来自其邻居的贡献将有助于稍微清除这种噪声。
您在此重新计算函数中使用的权重可以称为内核。在您的情况下,应该使用一维高斯函数或任何其他基本内核。
一种特殊平滑的好例子:
上图:未
平滑信号 下图:平滑信号
您可以找到完整的 matlab 代码,用于对不同长度的抽头进行平滑移动平均滤波器。www.gaussianwaves.com/2010/11/moving-average-filter-ma-filter-2/
平滑意味着使用来自相邻样本的信息来改变相邻样本之间的关系。对于有限向量,在末端,一侧没有相邻信息。您的选择是:不平滑/过滤末端,接受较短的平滑矢量,组成数据并对其进行平滑(取决于末端任何预测的准确性/有用性),或者可能使用不同的不对称平滑内核结束(无论如何最终都会缩短信号中的信息内容)。