Witam!
Usiłuję napisać funkcję która obniży częstotliwość próbkowania sygnału "data" z "rate_in" na "rate_out":
int down_rate(double * data, int len, int rate_in, int rate_out){
static double sum = 0;
static int index = 0;
int i1=0, i2=0;
while(i1 < len){
sum += data[i1++];
index += rate_out;
if(index < rate_in)
continue;
data[i2++] = sum / ((double)index / rate_out);
index -= rate_out;
sum = 0;
}
return i2;
}
Obniżenie częstotliwości polega na uśrednieniu próbek tak aby ilość próbek wyjściowych była równa rate_in/rate_out razy mniejsza niż wejściowa.
Jednak mam wrażenie że algorytm nawala. Czy coś faktycznie z nią jest nie tak?
Kod pisałem z pamięci, więc przepraszam za ewentualne literówki.