Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在向量中找到合理的(无噪声)最大元素

考虑一个充满噪声元素的向量V。找到合理的最大元素的最快(或任何一种)方法是什么?

例如

V = [1 2 3 4 100 1000] rmax = 4; 我当时正在考虑对元素进行排序,并找到第二个差异{即diff(diff(diff(unique(V)))}}。

编辑:对不起,延迟。

我无法发布任何代表数据,因为它包含6.15e5元素。但这是排序元素的图。



只看图,分段线性函数可能起作用。

无论如何,关于我以前关于使用微分的猜想,这是diff(sort(V));



我希望现在更加清楚。

编辑:只是要清楚,所需的“最大”值将是排序的元素图中的步骤之前的值。


回答:
新答案:

根据您的排序幅度图,您的diff(sort(V))算法可能会很好地工作。您只需要为构成“太大”的排序值之间的差异选择一个阈值。然后,使用diff(sort(V))向量中超过该阈值的第一点来获取要用于V的阈值。例如:

diffThreshold = 2e5; sortedVector = sort(V); index = find(diff(sortedVector) > diffThreshold,1,'first'); signalThreshold = sortedVector(index); 如果您有兴趣使用它,另一种选择是使用HISTC对数据进行装箱 。您最终将获得高振幅的低和高幅度的垃圾箱组,介于它们之间的是稀疏的垃圾箱。然后就可以确定要算作低振幅组的一部分的仓(例如,至少包含X个计数的仓的第一组)。例如:

binEdges = min(V):1e7:max(V); % Create vector of bin edges n = histc(V,binEdges); % Bin amplitude data binThreshold = 100; % Pick threshold for number of elements in bin index = find(n < binThreshold,1,'first'); % Find first bin whose count is low signalThreshold = binEdges(index); 旧答案(供后代使用):

找到“合理的最大元素”完全取决于您对合理的定义。您可以通过多种方式将一个点定义为离群值 ,例如仅选择一组阈值并忽略定义为“合理”的所有内容。假设您的数据具有正态分布,则可以使用简单的数据驱动阈值方法使用MEANSTD函数从向量V去除异常值:

nDevs = 2; % The number of standard deviations to use as a threshold index = abs(V-mean(V))
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:44


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.