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有什么问题?似乎是正确的选择