public static void lowPassFilter(int data[], int wynik[], int length)
{
int n=12;
wynik[n-1]=0;
wynik[n-2]=0;
for (n=12; n < length; n++)
{
wynik[n]= 2 * wynik[n-1] - wynik [n-2] + data[n] - 2 * data [n-6] + data [n-12];
}
}
Jednak wynik jest zupełnie inny niż bym się spodziewał. Tutaj wygląd oryginalnego sygnału:
podałeś bardzo mały kawałek kodu z którego nie wiele da się wywnioskować. Jeśli pytasz czy dobrze przepisałeś wzór matematyczny na kod Javy to tak. Jest według mnie ok.
Mógłbym się czepiać ogólnego stylu itp. ale to nie jest meritum problemu. Jeśli podasz więcej danych być może będzie łatwiej rozwiązać ten problem.
cała tablica data jest pełna danych, więc wszystko co jest data[n - X] da na początku dużo.
Tak jest zapisany wzór w publikacjach z których korzystałem. A że wynik[n] odnosi się do wcześniejszych pozycji (które nie są na początku jeszcze policzone) to podstawiam tam 0. Później w tablicy wynik również będzie “dużo”.
Ten filtr jest częścią większego algorytmu i o dziwo cały algorytm działa, choć prawdopodobnie ten filtr jest niepoprawny.