将中值滤波器应用于具有2个轴的数据

时间:2017-02-23 09:02:53

标签: matlab filter signal-processing

我有以下代码:

x = VarName3;
y = VarName4;
x = (x/6000)/60;
plot(x, y)

VarName3VarName43000x1的位置。我想在MATLAB中对此应用中值滤波器。但是,我遇到的问题是,如果我使用medfilt1,那么我只能输入一个变量数组作为第一个参数。而对于medfilt2,我只能输入一个矩阵作为第一个参数。但是,如果我将xy转换为矩阵,则数据看起来非常模糊。

x是时间,y是整数列表。我希望能够过滤掉尖峰和逢低。我该怎么做呢?我想通过直接操纵数据文件来消除错误的数据点。但是,我并没有真正得到中值滤波器的效果。

2 个答案:

答案 0 :(得分:0)

我找到了使用sort的解决方案。

中位数是中心元素,因此您可以对三个元素进行排序,并将中间元素作为中位数 sort函数还返回先前语法的索引 我使用索引信息来恢复X的匹配值。

这是我的代码示例:

%X - simulates time.
X = [1 2 3 4 5 6 7 8 9 10];

%Y - simulates data
Y = [0 1 2 0 100 1 1 1 2 3];

%Create three vectors:
Y0 = [0, Y(1:end-1)]; %Left elements   [0 0 1 2 0 2 1 1 1 2]
Y1 = Y;               %Center elements [0 1 2 0 2 1 1 1 2 3]
Y2 = [Y(2:end), 0];   %Right elements  [1 2 0 2 1 1 1 2 3 0]

%Concatenate Y0, Y1 and Y2.
YYY = [Y0; Y1; Y2];

%Sort YYY:
%sortedYYY(2, :) equals medfilt1(Y)
%I(2, :) equals the index: value 1 for Y0, 2 for Y1 and 3 for Y2.
[sortedYYY, I] = sort(YYY);

%Median is the center of sorted 3 elements.
medY = sortedYYY(2, :);

%Corrected X index of medY
medX = X + I(2, :) - 2;

%Protect X from exceeding original boundries.
medX = min(max(medX, min(X)), max(X));

结果:

medX =

     1     2     2     3     6     7     7     8     9     9

>> medY

medY =

     0     1     1     2     1     1     1     1     2     2

答案 1 :(得分:0)

在以给定时间为中心的数据向量上使用滑动窗口。此时过滤输出的值是滑动窗口中数据的中值。滑动窗口的大小是奇数值,不一定固定为3.