曲线包络线生成问题
有一条曲线(下图中的“曲线2”),想生成其的峰值点的包络线(如下图中的“曲线2”),并得到这个曲线的离散点,请问在mathcad中(或者其他软件)能否实现,曲线1是由离散点构成的,而不是图片,还请您具体说说!非常感谢您的热心回答!
在另一个论坛,有热心网友提到可以使用函数解决这个问题,在matlab中 我写了如下代码
=Uigetfile({'*.txt';'*.dat'},'选择数据文件');
str=;
fid=fopen(str,'r');
A = fscanf(fid,'%f',);
fclose(fid);
y=A(2,:);
plot(A(1,:),y);
z = abs(hilbert(y));
hold on;
plot(A(1,:),z,'r')
将a.dat中的数据做楼上提到的包络线,单很遗憾,出现了下图这个情况
在每个峰值点之间并不是平滑过渡的,而是由一些波谷,这个如何处理呢?
另外,还想问问,若是想要“曲线2”的 最小值峰点(就是y坐标负值那面)的包络线,该如何处理呢?
将matlab代码,和需要处理的曲线2(a.dat文件)也一并发上来了,非常感谢您的热心帮助,再次感谢!!
希望知道这个生成方法的热心人能说一说,主要是我学的是电机,这个东西有些隔行,没有思路,其实我觉得是不是有专门的软件可以处理和生成的啊 ? 虽然在simwe没有得到满意的答案,但在 matlab中文论坛 由其的zhanglu版主给出了一个用matlb实现的方法,如下:
clc,clear,close all
warning off all
=Uigetfile({'*.txt';'*.dat'},'选择数据文件');
str=;
fid=fopen(str,'r');
A = fscanf(fid,'%f',);
fclose(fid);
x=A(1,:);
y=A(2,:);
plot(x,y);
x1=x(find(diff(diff()>0)>0));
y1=y(find(diff(diff()>0)>0));
xm1=linspace(min(x1),max(x1)); %将曲线光滑
ym1=spline(x1,y1,xm1);
x2=x(find(diff(diff()>0)<0));
y2=y(find(diff(diff()>0)<0));
xm2=linspace(min(x2),max(x2)); %将曲线光滑
ym2=spline(x2,y2,xm2);
hold on;
plot(xm1,ym1,'r',xm2,ym2,'g')
一方面,算是对这个提问帖的总结吧,另外,也想有热心的网友能根据以上的代码,转换为mathcad的实现的方法,最后感谢matlab中文论坛zhanglu版主的热心帮助。
页:
[1]