Matlab 数据数组中的更改检测
我有一个名为test.xlsx的文件,下面可以找到该文件的链接。它的图表是 根据图表,在第62点之后,图表有一个向上移动。有没有办法通过图像处理来识别这一点 我在MATLAB中使用了不同大小窗口的Matlab 数据数组中的更改检测,matlab,image-processing,Matlab,Image Processing,我有一个名为test.xlsx的文件,下面可以找到该文件的链接。它的图表是 根据图表,在第62点之后,图表有一个向上移动。有没有办法通过图像处理来识别这一点 我在MATLAB中使用了不同大小窗口的medfilt1(列表,5)(),但结果并不好 你能给我一些建议或意见吗 请参见下面的代码。代码使用ztest对数据的移动平均值(index-k:index)和数据(index)进行统计比较。指向ztest的链接为ztest测试data(index)=均值(data(index-k:index))的无效
medfilt1(列表,5)
(),但结果并不好
你能给我一些建议或意见吗
请参见下面的代码。代码使用
ztest
对数据的移动平均值(index-k:index)和数据(index)进行统计比较。指向ztest
的链接为ztest
测试data(index)=均值(data(index-k:index))
的无效假设。如果ztest
返回h=1
,则无效假设被拒绝,结论是数据(索引)平均值(数据(索引-k:index))
。在您的数据情况下,ztest
将检测指定的alpha
水平的升档或降档
使用您的数据尝试此代码。使用alpha=0.05
,代码能够检测index=48
和index=66
处的变化。这些是升档(或降档)发生的位置。请注意,您所描述的升档发生在index=66
处,而不是您所述的index=62
处
另外,尝试使用不同的alpha
和k
值
data=xlsread('test.xlsx');
m = length(data);
start_index = 11;
alpha = 0.05;
k = 10;
h_array = zeros(length(data),1);
for index = start_index:m
avg = mean(data(index-k:index));
stdev = std(data(index-k:index));
if index > start_index
val = data(index);
h = ztest(val,avg,stdev,'alpha',alpha);
h_array(index) = h;
end
end
为此,只需使用存储函数即可
detrend(list);
请添加您的代码。我找不到有关
medfit1
的任何文档,您是在哪里找到此函数的。是否有特定原因使用图像处理来完成此任务?@lida,我假设您的意思是medfilt1
,而不是medfit1
。我编辑了你的问题以反映这一点。@Takeshi,是的,你是对的。很抱歉出现此错误,感谢您的编辑。我应该补充一点,如果您想在index=62
检测更改,您需要知道数据(62:66)
的值。这是因为升档发生在数据(62:66)
期间。另外,请注意data=xlsread('test.xlsx')
,这从一开始就应该很明显。非常感谢。你的回答对我很有用。1.alpha和k值的选择标准是什么?2.您所说的“您需要知道数据的值(62:66)”是什么意思?Alpha设置了置信水平。α=0.05时,置信水平为95%。因此,从外行的角度来看,val
的置信度为95%,它不是来自由avg
和`stdev>定义的正态分布。k
设置窗口的大小,作为比较的基础。代码将val
与平均值和标准偏差进行比较。在前面的k
值中(代码中存在一些索引错误,因此这不是完全正确的)。k
值是任意设置的。请注意,k
的较大值比k的较小值更严格。严格地说,我的意思是h
值不太可能是1。非常感谢。我的第二个问题呢?你说“如果你想检测索引=62的变化,你需要知道数据的值(62:66)。”你是什么意思?“test.xlsx”文件实际上是每个批次(x轴)的错误(y轴)。非常感谢您的回复。你能解释一下detrend吗?(我阅读了matlab帮助)以及如何识别“我的列表”上的更改?