引用: 引用 8 楼 schlafenhamster 的回复:
你的算法不是"滑动平均的算法",只是"平均算法",滑窗的算法是“加进减出”,刚开始窗口内没东西不能输出数据,窗口宽度后,数据率就是输入数据率。
你的算法是把窗口填满后输出一个数据然后重来。
你的算法会使信号的带宽减小,不知道你的信号有多快?
你好,可能我对自己的算法没有表达清楚。
我现在的算法中,一个窗的宽度有24个系数。并且一共有3个窗,每个窗之间相差8个系数
那么第一个窗就是b1={a1,a2......a24} 第二个窗就是b2={a9,a10...a32} 第三个窗就是b3={a17,a18...a40}
所以总的窗就是b={a1,a2...a40}
输入数据的序号用i表示,p表示24个系数中的第几个系数,则p=i%24
算法的大致程序如下
for(i=0; ; i++)
{
if(i%24==0)
p=24;
else
p=i%24;
sum0=sum0+Vin(i)*(b[0]+p)
sum1=sum1+Vin(i)*(b[8]+p)
sum2=sum2+Vin(i)*(b[16]+p)
if (p == 8)
{Out =Sum2;
Sum2 = 0;}
elseif (p ==16)
{Out = Sum1;
Sum1 = 0;}
elseif p == 24
{Out = Sum0
Sum0 = 0;}
}
看这个算法,大致意思就是p对输入数据的序号i进行取模,p=i%24,即24是一个循环。每当p=8,16,24时,
都会得到一个sum,并且这个sum是24个Vin(i)*系数之和。 所以每当输入24个数据之后,都会得到三个SUM,最后把这三个SUM都除以24个系数之和,就得到了3个数据。
得出的结论就是每输入24个数据,就会得到3个数据,不知道这个算不算是“滑动平均”还是只是“平均”,谢谢。