Skocz do zawartości

[C] Jak skonstruować filtr cyfrowy?


Pomocna odpowiedź

Napisano

Witam

Mój projekt odczytuje pewne dane i wyświetla je na wyświetlaczu. Natknąłem się na taki problem że odczyty są dość niestabilne, oscylują wokół tego co powinno być. Chciałbym to jakoś wygładzić aby na wyświetlaczu odczyt tak nie skakał. Nie mam doświadczenia w filtrach cyfrowych ale spróbowałem zastosować filtr alfa-beta, jednak przy zadowalającym wygładzeniu sygnału przeregulowanie było już zbyt duże. Nie interesuje mnie szybki czas reakcji na zmianę mogą to być 2-4 sekundy.

Program działa w ten sposób, że odczytuje okres obrotu wału, zawiera się on w przedziale 0,1 - 2,5s (jednak zwykle nie jest to więcej niż 1s), a w przerwaniu ok. 10Hz mam przeliczanie okresu na prędkość i wysyłanie na wyświetlacz. I właśnie tutaj w przerwaniu po przeliczeniu chciałbym coś wstawić co sprawiło by że zmiany prędkości były by łagodniejsze. Nie mam znam się na filtracji wiec proszę o pomoc bardziej doświadczonych użytkowników.

Wesołych świąt 😃

Twój problem to w zasadzie typowe zagadnienie z przetwarzania sygnałów.

Masz częstotliwość próbkowania 10Hz.

Podstawową decyzją jest wybór typu filtru: nieskończona odpowiedź impulsowa (NOI/IIR) lub skończona odpowiedź impulsowa (SOI/FIR).

Ogólnie to nie da się (wg mnie) streścić zagadnienia w jednym poście (są całe przedmioty na studiach, które są poświęcone DSP) - zakładając, że chcesz dobrze problem rozwiązać. (ze zrozumieniem).

Mogę polecić Ci książkę 'Understanding Digital Signal Processing' (R. Lyons) - bardzo mi się podobała.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...