请教: 样条插值积分
我想对一列有误差的加速度值进行样条函数插值积分以求得位移(使用已知解析表达式的函数是为了验证用此方法的正确性),以下为我的程序,但是结果不正确,请各位高手帮忙看看,我的思路有问题还是函数用的不对?多谢多谢!n=1024;
t=0:1/fs:n/fs
y1=50*sin(4*pi*t)+100*sin(10*pi*t); %各采样得到的加速度值
sp1=csapi(t,y2); %三次样条插值
Cformint=fnint(sp1,0); %对插值得到的函数进行积分
varCformint=fnval(Cformint,t); %得到积分后在各时间点的值(速度值)
sp2=csapi(t,varCformint); %对插值得到的速度值再次进行三次样条插值
Cformint2=fnint(sp2,0); %对插值得到函数进行积分以求得位移
varCformint2=fnval(Cformint2,t); %得到积分后位移在各时间点的值
figure
plot(t,varCformint2)
得到的结果不是正弦曲线而是一条斜率为正的直线,这是为什么呢,请各位高手帮忙解答一下,感激不尽! 估计是积分造成的,希望给出完整的代码 实在不好意思,我为了尽量减少帖子的字数,删减了原来程序的一部分内容,没想到把有用的部分也给删掉了,以下的程序是可以运行的:
n=1024;
fs=20;
t=0:1/fs:n/fs;
y1=100*sin(10*pi*t);
sp1=csapi(t,y1);
Cformint=fnint(sp1,0);
varCformint=fnval(Cformint,t);
sp2=csapi(t,varCformint);
Cformint2=fnint(sp2,0);
varCformint2=fnval(Cformint2,t);
figure
plot(t,varCformint2)
我的问题是y1这个正弦函数如果进行两次积分的话,得到的结果应该还是正弦函数,
但是我对其用样条函数进行插值,然后进行数值积分,得到却不是正弦函数曲线,自己找不出原因,请各位高手多加指点,多谢多谢! Cformint=fnint(sp1,0);
是这个语句造成的
实际积分的结果应该是F(x)+C,你用这个语句表示的是C=0
而实际上C并不等于零,换句话说就是在你第一次积分的过程中引入了直流量
所以第二次积分的时候这个直流量就是就变成了斜线量
由于这个量在数值上远大于波动量,所以看上去是斜线,实际上放大看的话也应该是波动的
这就需要将程序中将着一直流量滤掉 非常感谢您的解答!能否再请问您该如何去除这个直流项?
因为我既使将 Cformint=fnint(sp1,0); 这个语句改成 Cformint=fnint(sp1,-100/10/pi); 其中,-100/10/pi是当t=0时使位移为0,得到的积分常数C的值, 再运行程序,得到的结果仍然是斜直线。 这是怎么回事呢?请多多指教! 一般采用滤波的方法,这个问题论坛讨论过好多
比如:http://forum.vibunion.com/forum/viewthread.php?tid=20424
http://forum.vibunion.com/forum/viewthread.php?tid=329
[ 本帖最后由 happy 于 2006-8-17 17:08 编辑 ]
谢谢!
谢谢您的回复,我会找相关讨论来好好学习的!再次感谢!
页:
[1]