Matlab 并将峰值降低,使其与信号的总体平均值更加一致

Matlab 并将峰值降低,使其与信号的总体平均值更加一致,matlab,signal-processing,octave,Matlab,Signal Processing,Octave,我有信号 在其中产生尖峰。我有没有办法使这些峰值的振幅降低到与信号的总体平均值更一致的程度? 数据图像 我使用的是Octave 3.2.4/Matlab 谢谢看来您需要一些可靠估计平均值的方法。 我能想到的一种方法是定义异常值的百分比(比如5%),然后对条目进行排序并丢弃前5%的条目。取剩下的平均值——就这样 s = sort( abs(signal) ); TopPer = 0.05; % remove top 5% as outliers n = floor( numel(signal)

我有信号 在其中产生尖峰。我有没有办法使这些峰值的振幅降低到与信号的总体平均值更一致的程度?

数据图像

我使用的是Octave 3.2.4/Matlab


谢谢

看来您需要一些可靠估计平均值的方法。 我能想到的一种方法是定义异常值的百分比(比如5%),然后对条目进行排序并丢弃前5%的条目。取剩下的平均值——就这样

s = sort( abs(signal) );
TopPer = 0.05; % remove top 5% as outliers
n = floor( numel(signal) * ( 1 - TopPer ) );
robustMean = mean( s(1:n) );
% clamped signal
clampedSignal = min( max( signal, -robustMean ), robustMean );

看起来你需要一些可靠的方法来估计你的平均值。 我能想到的一种方法是定义异常值的百分比(比如5%),然后对条目进行排序并丢弃前5%的条目。取剩下的平均值——就这样

s = sort( abs(signal) );
TopPer = 0.05; % remove top 5% as outliers
n = floor( numel(signal) * ( 1 - TopPer ) );
robustMean = mean( s(1:n) );
% clamped signal
clampedSignal = min( max( signal, -robustMean ), robustMean );

你能用最大/最小操作将这些尖峰钳制到一个可接受的范围吗?@Paul R是的,但我如何使两条绿线之间的范围降低到?你可以使用例如平均值+/-3 SD。或者另一种方法可能是中值滤波。你能用最大/最小运算将这些峰值钳制到一个可接受的范围吗?@Paul R是的,但我如何使两条绿线之间的范围降低到可接受的范围?你可以使用例如平均值+/-3 SD。或者另一种方法可能是中值滤波。这是一个音频信号,因此我无法对值进行排序。这是一个音频信号,因此我无法对值进行排序。