y1949b 发表于 2013-4-1 23:45:21

曲线包络线生成问题

有一条曲线(下图中的“曲线2”),想生成其的峰值点的包络线(如下图中的“曲线2”),并得到这个曲线的离散点,请问在mathcad中(或者其他软件)能否实现,曲线1是由离散点构成的,而不是图片,还请您具体说说!


非常感谢您的热心回答!

y1949b 发表于 2013-4-3 15:38:24

在另一个论坛,有热心网友提到可以使用函数解决这个问题,在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文件)也一并发上来了,非常感谢您的热心帮助,再次感谢!!








y1949b 发表于 2013-4-6 17:10:51

希望知道这个生成方法的热心人能说一说,主要是我学的是电机,这个东西有些隔行,没有思路,其实我觉得是不是有专门的软件可以处理和生成的啊 ?

y1949b 发表于 2013-4-16 17:03:15

虽然在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]
查看完整版本: 曲线包络线生成问题