首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab -信号去噪

Matlab -信号去噪
EN

Stack Overflow用户
提问于 2011-07-29 21:14:17
回答 5查看 36.4K关注 0票数 8

我有一个数据向量,它包含-20 20范围内的整数。

Bellow是一个带有以下值的图:

这是来自矢量数据的96个元素的样本。从上图可以看出,大多数元素位于区间-2,2中。

我想消除数据中的噪音。我想去掉低振幅的峰值,而保留高振幅的峰值,也就是指数为74的峰值。

基本上,我只想增加高振幅峰值和低振幅峰值之间的对比度,以及是否有可能消除低振幅峰值。

你能给我推荐一个这样做的方法吗?

我尝试过mapstd函数,但问题是它也会对高振幅峰值进行归一化。

我正在考虑使用小波变换工具箱,但我不知道如何准确地从小波分解系数中重建数据。

你能给我推荐一个这样做的方法吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-07-29 21:27:25

如果它仅用于演示目的,并且您实际上不会将这些缩放值用于任何事情,我有时喜欢通过以下方式增加对比度:

代码语言:javascript
复制
% your data is in variable 'a'
plot(a.*abs(a)/max(abs(a)))

编辑:由于我们正在发布图片,下面是我的(之前/之后):

票数 7
EN

Stack Overflow用户

发布于 2011-07-29 21:58:01

检测异常值的一种方法是使用three standard deviation rule。举个例子:

代码语言:javascript
复制
%# 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)

编辑:

看起来我误解了这里的目标。如果你想反其道而行之,也许可以这样做:

代码语言:javascript
复制
%# 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)

票数 9
EN

Stack Overflow用户

发布于 2011-07-29 22:46:50

您可以尝试使用拆分窗口过滤器。如果x是您当前的样本,则过滤器将如下所示:

代码语言:javascript
复制
k = [L L L L L L 0 0 0 x 0 0 0 R R R R R R]

对于每个样本x,您对左侧的周围样本带(L)和右侧的周围样本带进行平均。如果你的样本是阳性和阴性(就像你的一样),你应该做腹肌检查。价值优先。然后将样本x除以周围样本的平均值。

代码语言:javascript
复制
y[n] = x[n] / mean(abs(x([L R])))

每次这样做时,峰值都会突出,噪波会变平。您可以执行多个过程来增加效果。它对这些频带的宽度的选择有些敏感,但可以工作。例如:

两次通过:

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6873683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档