首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >利用matlab /倍频程求最小反射点

利用matlab /倍频程求最小反射点
EN

Stack Overflow用户
提问于 2014-12-25 17:39:59
回答 1查看 410关注 0票数 0

我有一个数据集红线。如果我使用数据集的反射/镜像,我试图找到在黄色中突出显示的最小点。

参见下面的示例代码/绘图--我正在试图找到一种方法,即在反射线(黑线)下面的dataset (蓝线)的反射/镜像的黄色中高亮显示的最小点。

请注意,这只是一个简单的数据集,100000+周围将有更大的数据集。

PS:我用的是Octave 3.8.1,就像matlab一样

代码语言:javascript
运行
复制
clear all,clf, clc,tic

x1=[0.;2.04;4.08;6.12;8.16;10.2;12.24;14.28;16.32;18.36]
y1=[2;2.86;4;2;1;4;5;2;7;1]
x2=[0.;2.04;4.08;6.12;8.16;10.2;12.24;14.28;16.32;18.36]
y2=abs(y1-max(y1));
data1 = y2; 
reflection_line=max(y1)/2
[pks3 idx3] = findpeaks(data1,"DoubleSided","MinPeakHeight",0.1);

line([min(x1) max(x1)], [reflection_line reflection_line]);
hold on;
plot(x1,reflection_line)
hold on;
plot(x1,y1,'-r',x2,y2,'-b')

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-26 19:01:35

我并不反映您的原始数据,而是查找原始值的局部最大值,这些值比给定的行要大。

使用DIY替代findpeaks:如果值大于(或等于)其前身和后继值,则为局部最大值。

代码语言:javascript
运行
复制
%% Setup
x1 = [0.;2.04;4.08;6.12;8.16;10.2;12.24;14.28;16.32;18.36];
y1 = [2;2.86;4;2;1;4;5;2;7;1];
reflection_line = max(y1)/2;
%% Sort by x value
[x1, I] = sort(x1);
y1 = y1(I);
%% Compute peaks
maxima = @(y) [true; y(2:end)>=y(1:end-1)] & ... % Value larger than predecessor
              [y(1:end-1)>=y(2:end); true];      % Value larger than successor
maximaLargerThanLine =  maxima(y1) & (y1>reflection_line);
%% Plotting
plot(x1,y1);
hold on;
plot(x1(maximaLargerThanLine),y1(maximaLargerThanLine),'rx');
line([min(x1) max(x1)], [reflection_line reflection_line]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27649436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档