Matlab 对两轴数据应用中值滤波

Matlab 对两轴数据应用中值滤波,matlab,filter,signal-processing,Matlab,Filter,Signal Processing,我有以下代码: x = VarName3; y = VarName4; x = (x/6000)/60; plot(x, y) 其中VarName3和VarName4是3000x1。我想在MATLAB中对此应用中值滤波器。然而,我遇到的问题是,如果我使用medfilt1,那么我只能输入单个变量数组作为第一个参数。对于medfilt2,我只能输入一个矩阵作为第一个参数。但是如果我将x和y转换成矩阵,数据看起来非常模糊 x是时间,y是整数列表。我希望能够过滤掉尖峰和低谷。我该怎么做呢?我正在考虑通

我有以下代码:

x = VarName3;
y = VarName4;
x = (x/6000)/60;
plot(x, y)
其中
VarName3
VarName4
3000x1
。我想在MATLAB中对此应用中值滤波器。然而,我遇到的问题是,如果我使用
medfilt1
,那么我只能输入单个变量数组作为第一个参数。对于
medfilt2
,我只能输入一个矩阵作为第一个参数。但是如果我将
x
y
转换成矩阵,数据看起来非常模糊


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

我使用
排序找到了一个解决方案

中间元素是中心元素,因此您可以对三个元素进行排序,并将中间元素作为中间元素。
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

我使用
排序
找到了一个解决方案

中间元素是中心元素,因此您可以对三个元素进行排序,并将中间元素作为中间元素。
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

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

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

您的问题中提到了两个过滤器。中值滤波器不会过滤出高于或低于某个范围的值。你需要这两者中的哪一个?但是中值滤波器不能帮助我消除数据中的尖峰吗?是的,但不是“值高于或低于某个范围”对不起,这是错误的措辞。我想要的是去除异常值。我已经编辑了OP。medfilt1有什么问题?似乎是正确的选择您的问题中提到了两个过滤器。中值滤波器不会过滤出高于或低于某个范围的值。你需要这两者中的哪一个?但是中值滤波器不能帮助我消除数据中的尖峰吗?是的,但不是“值高于或低于某个范围”对不起,这是错误的措辞。我想要的是去除异常值。我已经编辑了OP。medfilt1有什么问题?似乎是正确的选择