matlab根据两段波形绘制正弦函数

请教如何在matlab中根据两段波形,延长并绘制出正弦函数P =a + b sin (ct + d)的形式?
如图所示,实线是原始波形,虚线是拟合出的正弦函数波形。通过阴影部分对应的上升支(ab段)和下降支(cd段)的两段实线,进而拟合出正弦函数(虚线)。现已知ab段和cd段的各点(x,y)值,请问该如何绘制正弦函数并求出顶点值?谢谢!!

img

比方说你知道(xa,ya),(xb,yb),(xc,yc),(xd,yd)
然后你原先的波形为x和y两个向量,那么有

p  = x<=xb & x>=xa | (x<=xd & x>=xc);
xp = x(p);
yp = y(p);
modelFun = @(a, x) a(1)+a(2)*sin(a(3)*x+a(4));
beta = nlinfit(xp,yp,modelFun,rand(1,4));
a = beta(1);
b = beta(2);
c = beta(3);
d = beta(4);

楼上的代码是对的。
已知ab段和cd段的各点(x,y)值:就是说有 a-b 段 若干点的值,c-d 段若干点的值,由这些值的集合来进行正弦曲线的拟合。
(1)首先对 a-b 段、c-d 段进行切片,拼接,生成拟合数据集Snew(也就是把实线原始波形中 a-b.c-d 以外的数据点删除):
p = x<=xb & x>=xa | (x<=xd & x>=xc);
xp = x(p);
yp = y(p)
(2)然后用 Snew 进行曲线拟合:
modelFun = @(a, x) a(1)+a(2)*sin(a(3)*x+a(4));
beta = nlinfit(xp,yp,modelFun,rand(1,4))
(3)写清楚一点:yPred =a1 + b1 sin (c1t + d1)
a1 = beta(1);
b1 = beta(2);
c1= beta(3);
d1 = beta(4);

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632