MATLAB:获取直方图群体的成员,不包括介于两者之间的成员

信息处理 matlab 直方图
2022-02-19 16:12:20

问题

我有一个(嘈杂的)方波信号,只需要提取构成“基线”和“高原”的数据点。我不希望数据起起落落。到目前为止,我已经完成了以下工作:

指定为“基线”或“高原”的数据点叠加到原始信号上

我将“基线”数据点定义为从最小值到最低 25% 信号的平均值 + 1 个最低 25% 信号的标准差。

同样,我将“高原”数据点定义为从最大值到最高 25% 信号的平均值的数据点 - 最高 25% 信号的 1 个标准差。

这没问题,但正如您所见:有时 1 个标准偏差不足以封装所有基线噪声。2 标准偏差通常包含过多的信号上升/下降。

谁能为此提供更优雅的解决方案?

我的目标是测量方脉冲的信噪比,因此我需要提取能够提供基线噪声和平均脉冲高度的总体。

2个回答

假设

你的噪音是高斯的。

建议的解决方案

计算数据的直方图。将有两个峰值,如您显示的直方图所示。提取峰的近似位置,并使用这些值作为起始值,将两条高斯曲线拟合到两个峰,每个峰都有拟合参数μ(平均信号,即高斯的位置)和σ(高斯的宽度)。

然后,您的信号将是高斯位置的差异,并且您的噪声由它们的宽度给出。

是的,仍然会有来自直脉搏两侧的贡献。但是,可能没有办法完全摆脱它们,因为您需要一些标准来区分高原值和旁瓣值,如果一个点接近基线/高原,这总是会出现问题。您可以通过使用直方图值不仅作为拟合的数据点,而且作为拟合权重来减轻这种影响。通过这样做,与(大量)高原/基线值相比,(少量)旁瓣值的权重更小。

我能够通过使用这里回答的方法来解决这个问题:https ://stackoverflow.com/questions/36583451/matlab-signal-clipping-method-skips-array-indexes