Я только что нашел алгоритм пихты в Википедии
http://en.wikipedia.org/wiki/Digital_filter
// if the size of NB_COEF = 2^n use a bit mask instead of the modulo (%)
// %=NB_COEF => &=(NB_COEF-1)
// pipe is a circular buffer
#define NB_COEF 16 // numbers of coefficients of the filter
double x_buffer[NB_COEF]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
double coef[NB_COEF]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int ptr_x_buffer=0;
double FiltreFIR(double x)
// x: Signal d'entrée
// y: Signal de sortie
{
int n, y=0;
x_buffer[ptr_x_buffer++] = x;
ptr_x_buffer %= NB_COEF;
for( n = (NB_COEF-1) ; n >= 0 ; n-- )
{
y += coef[n] * x_buffer[ptr_x_buffer++];
ptr_x_buffer %= NB_COEF;
}
return(y);
}
-Может кто-нибудь сказать мне, почему мы должны постоянно делать это выражение
ptr_x_buffer%= NB_COEFF.
Потому что для меня это будет означать, что переменная ptr_x_buffer всегда принимает значение 0 ?!
И это кажется мне далеким от логики?!
А также может кто-нибудь объяснить мне первый комментарий о битовой маскировке и по модулю.
спасибо заранее
:)