我需要在 C 中实现这个(IIR 滤波器的)差分方程。
int a[3]={ 1 , -1 , 2 };
int b[3]={1,2,3}
int in[100]=some numbers;
for(i=0;i<100;i++)
y[i]=(b[0]*in1[i])+(b[1]*in[i-1])+(b[2]*in[i-2])-(a[1]*y[i-1])-(a[2]*y[i-2]); `
我需要使 in[-ve index]=0
。如何处理这个差分方程?
我不能使用 if
语句,因为它是在 DSP 中实现的。
也有人可以建议 hold 在 c 中使用指针实现循环缓冲区,这将有助于我的事业。
最佳答案
首先对 in
数组中的前两个条目进行计算,其中用零替换具有负索引的条目,然后从 2 开始循环。
y[0]=(b[0]*in1[0])+(b[1]*0) +(b[2]*0)-(a[1]*0) -(a[2]*0);
y[1]=(b[0]*in1[1])+(b[1]*in[0])+(b[2]*0)-(a[1]*y[0])-(a[2]*0);
for (int i = 2; i < 100; ++i)
...
由于您要与零进行几次乘法运算,因此这些计算当然可以缩短。
对于循环缓冲区,只需做一个固定大小的数组,以及一个不断增加的索引,然后使用取模操作来限制。
所以
int *circular[10]; /* A ten-entry circular buffer for integer pointers */
int circularIndex = 0;
/* Adding a new entry */
circular[circularIndex] = somePointer;
circularIndex = (circularIndex + 1) % 10; /* Make sure the index goes from 0 to 9 */
关于c - IIR滤波器差分方程中负指标的处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21085664/