我有一个数据向量,它包含-20 20范围内的整数。
Bellow是一个带有以下值的图:

这是来自矢量数据的96个元素的样本。从上图可以看出,大多数元素位于区间-2,2中。
我想消除数据中的噪音。我想去掉低振幅的峰值,而保留高振幅的峰值,也就是指数为74的峰值。
基本上,我只想增加高振幅峰值和低振幅峰值之间的对比度,以及是否有可能消除低振幅峰值。
你能给我推荐一个这样做的方法吗?
我尝试过mapstd函数,但问题是它也会对高振幅峰值进行归一化。
我正在考虑使用小波变换工具箱,但我不知道如何准确地从小波分解系数中重建数据。
你能给我推荐一个这样做的方法吗?
发布于 2011-07-29 21:27:25
如果它仅用于演示目的,并且您实际上不会将这些缩放值用于任何事情,我有时喜欢通过以下方式增加对比度:
% your data is in variable 'a'
plot(a.*abs(a)/max(abs(a)))编辑:由于我们正在发布图片,下面是我的(之前/之后):

发布于 2011-07-29 21:58:01
检测异常值的一种方法是使用three standard deviation rule。举个例子:
%# some random data resembling yours
x = randn(100,1);
x(75) = -14;
subplot(211), plot(x)
%# tone down the noisy points
mu = mean(x); sd = std(x); Z = 3;
idx = ( abs(x-mu) > Z*sd ); %# outliers
x(idx) = Z*sd .* sign(x(idx)); %# cap values at 3*STD(X)
subplot(212), plot(x)

编辑:
看起来我误解了这里的目标。如果你想反其道而行之,也许可以这样做:
%# some random data resembling yours
x = randn(100,1);
x(75) = -14; x(25) = 20;
subplot(211), plot(x)
%# zero out everything but the high peaks
mu = mean(x); sd = std(x); Z = 3;
x( abs(x-mu) < Z*sd ) = 0;
subplot(212), plot(x)

发布于 2011-07-29 22:46:50
您可以尝试使用拆分窗口过滤器。如果x是您当前的样本,则过滤器将如下所示:
k = [L L L L L L 0 0 0 x 0 0 0 R R R R R R]对于每个样本x,您对左侧的周围样本带(L)和右侧的周围样本带进行平均。如果你的样本是阳性和阴性(就像你的一样),你应该做腹肌检查。价值优先。然后将样本x除以周围样本的平均值。
y[n] = x[n] / mean(abs(x([L R])))每次这样做时,峰值都会突出,噪波会变平。您可以执行多个过程来增加效果。它对这些频带的宽度的选择有些敏感,但可以工作。例如:

两次通过:

https://stackoverflow.com/questions/6873683
复制相似问题