如何找到本地"手段"从Matlab的嘈杂信号?

时间:2014-11-14 15:53:03

标签: matlab

我有一个测量的二维数据,如下所示:

matlab noisy data

噪声导致Y数据在[4.03,4.1]范围内。如何获得每组点的平均值(x,y),例如对于图形,这将是(0.3,4.07),(1.6,4.08),(2.3,4.05),(3,4.07)?

我看到了一些关于nlfilter的内容,但大多数关于它的例子代表了一个二维图像。谢谢你的帮助!

编辑:

我生成下面的图:

plot(t, y);

t数据显示为:

t(some_condition(1:40))

ans =

   1.0e-04 *

  Columns 1 through 6

    0.0216    0.0216    0.0216    0.0216    0.0216    0.0217

  Columns 7 through 12

    0.0217    0.0217    0.0217    0.0217    0.0218    0.0928

  Columns 13 through 18

    0.0928    0.0928    0.0928


  >> mean(t(some_condition))

  ans =

   1.6686e-05

所以,我只得到t中的平均值,而我想要4个均值(实际上,2个点大约为0.8)也是噪音。

2 个答案:

答案 0 :(得分:2)

您可以尝试以下操作:

x_filter = [0.03  0.16 0.23 0.30]*1e-5; % Insert value you want to filter here and exluce those which not

for i = 1:numel(x_filter)
    ind = abs(t-x_filter(i))<0.01e-5; % Or any other offset
    x_m = mean(t(ind));
    y_m = mean(y(ind));
    plot(x_m,y_m,'x','MarkerSize',20);
end

答案 1 :(得分:1)

在MATLAB中,均值函数按列操作,因此使用mean(ydata)会给出一个包含每个x位置均值的数组。如果我说得对,这里有一个示例代码,它可以完成您的工作(我认为):

clear
clc

%// Generate dummy data
x = repmat(1:4,10,1);
y = rand(10,4);

My = mean(y)

我看起来像这样:

My =

0.5854    0.6799    0.5431    0.2933

然后使用scatter绘制点:

hold on

for k = 1:size(y,2)
scatter(x(:,k),y(:,k))
markerarea = 200;
scatter(k,My(k),markerarea,'filled','d') %// Represent the mean as a diamond.
end
hold off

axis([0 5 0 1])

看起来像这样:

enter image description here

这是你的想法吗?如果没有,请告诉我,我将编辑/删除我的答案:)