如何实现数据光滑处理
我想对下列数据进行光滑处理,以便找到其局部最大最小值,得到半周期(不定相等)请问一般有什么方法,我用平均法试过,效果不是很好
[ 本帖最后由 dangjt 于 2007-3-1 16:23 编辑 ] 用matlab进行样条插值即可 插值怎么可能呢?插值不改变当前数据点的值大小,我要求出局部极大极小值,如上图所示,图上有2个局部极小,2个局部极大,但是数据会稍带毛刺,那些小的毛刺没有办法去掉,用普通算法会当作局部极值! 原帖由 dangjt 于 2007-3-1 16:19 发表
插值怎么可能呢?插值不改变当前数据点的值大小,我要求出局部极大极小值,如上图所示,图上有2个局部极小,2个局部极大,但是数据会稍带毛刺,那些小的毛刺没有办法去掉,用普通算法会当作局部极值!
样条插值算很简单且可行的了,或者试试普通插值然后样条磨光 原帖由 eight 于 2007-3-1 16:34 发表
样条插值算很简单且可行的了,或者试试普通插值然后样条磨光
呵呵,怎么个搞法,我上面有数据,教我一下,给个代码,用matlab的就行! /* 二次抛物线法绘制曲线函数 */
void paowuxian(int *x,int *y,int n,unsigned int k)
{
unsigned int i,j;
float t1,t2,t3,t,a,b,c,d,tx,ty;
*x=*(x+1);*(y)=*(y+1);
*(x+n+1)=*(x+n);*(y+n+1)=*(y+n);
t=0.5/k;
setcolor(10);
moveto(*(x+1),*(y+1));
for(i=0;i<n-1;i++)
{
for(j=1;j<k;j++)
{
t1=j*t;
t2=t1*t1;
t3=t2*t1;
a=4*t2-t1-4*t3;
b=1-10*t2+12*t3;
c=t1+8*t2-12*t3;
d=4*t3-2*t2;
tx=a*(*(x+i))+b*(*(x+i+1))+c*(*(x+i+2))+d*(*(x+i+3));
ty=a*(*(y+i))+b*(*(y+i+1))+c*(*(y+i+2))+d*(*(y+i+3));
lineto(tx,ty);
}
}
lineto(*(x+i+2),*(y+i+2));
}
[ 本帖最后由 风花雪月 于 2007-3-4 04:23 编辑 ] /* 二次B样条法绘制曲线函数 */
void byangtiao(int *x,int *y,int n,unsigned int k)
{
unsigned int i,j;
float t,t1,t2,a,b,c,tx,ty;
*x=*(x+1);*y=*(y+1);
*(x+n+1)=*(x+n);*(y+n+1)=*(y+n);
t=1.0/k;
setcolor(13);
moveto((*x+(*(x+1)))/2.0,(*y+(*(y+1)))/2.0);
for(i=0;i<n;i++)
{
for(j=1;j<k;j++)
{
t1=j*t;
t2=t1*t1;
a=(t2-2*t1+1)/2.0;
b=t1-t2+1/2.0;
c=t2/2.0;
tx=a*(*(x+i))+b*(*(x+i+1))+c*(*(x+i+2));
ty=a*(*(y+i))+b*(*(y+i+1))+c*(*(y+i+2));
lineto(tx,ty);
}
}
}
[ 本帖最后由 风花雪月 于 2007-3-4 04:23 编辑 ] /*三次样条法*/
void parspl(int p[],int n,int k)
{
int i,j;
float t1,t2,t3,t,a,b,c,d,x,y;
p=p;p=p;
p=p;p=p;
t=0.5/k;
moveto(p,p+D);
for(i=0;i<n-1;i++)
{
for(j=1;j<k;j++)
{
t1=j*t;
t2=t1*t1;
t3=t2*t1;
a=4*t2-t1-4*t3;
b=1-10*t2+12*t3;
c=t1+8*t2-12*t3;
d=4*t3-2*t2;
x=a*p+b*p+c*p+d*p;
y=a*p+b*p+c*p+d*p;
lineto(x,y,15);
}
}
lineto(p,p,15);
} 试一下上面的几种方法 楼主要是解决了,能否共享一下啊?
页:
[1]