Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Dolnoprzepustowy filtr cyfrowy - jak filtrować software'owo?

inhalt 14 Jul 2006 17:19 5475 5
  • #1
    inhalt
    Level 11  
    Witam Forumowiczów. Na początkek się przedstawiam - Inhalt z Trójmiasta.

    Mam kłopot z filtracją sygnału. Przeszukałem forum, ale nie znalazłem odpowiedzi.
    Mam pomierzone czasowe rozkłady ciśnień (i nie tylko). Posługiwałem się czujnikami pracującymi w pętli prądowej. Sygnał analogowy, który z nich otrzymywłem prókowałem co 1 ms, co 10 ms i co 100 ms (mam zapisane trzy oddzielne serie dla każdego rodzaju pomiaru). Wiem, że powinienem mieć w układzie filtr dolnoprzepustowy (fizyczny), ale nie miałem.
    W tej chwili mam więc zapisane pomiary w postaci sekwencji liczb. No i niestety są mocno zaszumione. Częstotliwość tej "sieczki" jest znacznie większa niż oczekiwana częstotliwość zjawiska mierzonego, skąd wnioskuję, że można to skutecznie odfiltrować.
    Poszukuję łatwej procedury filtrującej taki wektor z pomiarami. Wyobrażam to sobie tak:
    a) importuję do excela serię pomiarową; wpisuję formułę obliczeniową, którą poda mi ktoś z forum i mam.
    b) importuję serię pomiarową do Matlaba (jestem bardzo początkującym użytkownikiem, ale trochę już wiem o co chodzi); traktuję wektor z pomiarami jakąś funkcją i otrzymuję wektor wynikowy tej samej długości, ale już po filtracji.
    Oczywiście w obu sytuacjach pozostanie kwestia doboru parametrów filtra, ale mniej więcej wiem co mam uzyskać więc nawet eksperymentalnie jest szansa to dobrać. A pewnie są też procedury doboru?
    Będę wdzięczny za pomoc.
  • #2
    _jta_
    Electronics specialist
    Można zastosować transformację Fouriera, żeby mieć w tabeli zależność od częstotliwości, odciąć zbyt wysokie
    (po prostu zerując część tabel), i przetransformować z powrotem. A jak ci się nie chce aż tak kombinować, to
    można wyliczyć średnią z kolejnych wartości: x[i]=(x[i]+x[i+1])/2 i powtórzyć to kilka razy. W Excelu pewnie tak:
    wpisujesz dane do kolumny B, i do C1 wpisujesz (B1+B2)/2, a potem kopiujesz na całą kolumnę C, potem D,E...
  • #3
    inhalt
    Level 11  
    Procedura uśredniania przesuwa mi sygnał w fazie, co nie jest w tym wypadku bez znaczenia.
    Podoba mi się pomysł z Fourierem. Rozumiem, że znajdę widmo mojego sygnału, potem obetnę wszystko co moim zdaniem ma zbyt dużą częstotliwość i odwrócę widmo na sygnał. Tylko jak to zrobić. Nie ukrywam, że jestem zielony, a to odfiltrowanie jest tylko małą częścią całego badania, które wykonuję.
    Czy są jakieś gotowe programy (dostępne i w miarę łatwe w użyciu, albo m-pliki matlaba), które przetransformują mi sygnał na jego widmo, obetną częstotliwości powyżej zadanej i potem to odwrócą? Chodzi o to, żebym nie musiał przy tym za wiele myśleć, a jedynie wprowadzić serie pomiarowe i podać częstotliwość odcięcia.
  • #4
    _jta_
    Electronics specialist
    Można uśredniać według wzoru: x_new[i]=(x_old{i-1]+2*x_old{i]+x_old{i+1])/4 - wtedy nie przesunie.

    Transformata Fouriera powinna być dostępna w Matlabie, jest tylko problem z brzegiem zakresu, zastanawiam się, czy
    nie należałoby zrobić tak, żeby do danych dołożyć te same dane w odwrotnej kolejności, i dopiero to transformować
    (czyli, jak masz np. 4 dane, x1,x2,x3,x4, to transformujesz x1,x2,x3,x4,x4,x3,x2,x1).
    Proponuję poeksperymentować (tzw. matematyka doświadczalna): bierzesz jakieś dane, robisz transformację Fouriera,
    z wyniku zostawiasz fragment tablicy, resztę zerujesz, i transformujesz z powrotem. Po pierwsze sprawdź, czy jeśli nic
    nie zmieniasz w tablicy, to dostajesz z powrotem to samo - jeśli nie, to znaczy, że nieprawidłowo wywołujesz funkcję.
    Po drugie, które zakresy (początek, koniec) zawierają wolnozmienne składowe, a które szybkozmienne. Różne wersje
    funkcji do transformacji Fouriera mogą się pod tym względem różnie zachowywać, więc albo doświadczenie, albo czytanie
    podręcznika, który zwykle jest napisany tak, że nie da rady zrozumieć, o co chodzi - dlatego proponuję doświadczenie.

    To będzie się sprowadzać do tego, że z tablicy zostawiasz tylko początek, albo początek i koniec, o długości, która będzie
    proporcjonalna do częstotliwości odcięcia. Masz sprawdzić, czy koniec też jest potrzebny, i współczynnik proporcjonalności.

    Aha, można jeszcze testować tak: bierzesz tabelę, wypełniasz zerami, na jednej pozycji wpisujesz coś innego, i robisz
    odwrotną transformację Fouriera. Wyjdzie z tego jakaś sinusoida, masz ją przetłumaczyć na częstotliwość w skali, której
    używasz. Sprawdź co będzie jak wpiszesz blisko początku, blisko końca, nieco przed i nieco za środkiem.
  • #5
    inhalt
    Level 11  
    Dzięki. Spróbuję zrobić to w Matlabie i jeśli tylko dam radę transformować w obie strony, to poeksperymentuję jak mówisz.

    Jeśli ktoś ma jeszcze jakieś pomysły, to chętnie słucham.
  • Helpful post
    #6
    qrdel
    Level 28  
    Jeżeli przeszkadza w czymś przesunięcie fazy to odradzam metodę z wymazywaniem kanałów w transformacie.
    Ze względu na "skupienie" ingerencji w dziedzinie częstotliwości (od Fx tniemy wszystko) metoda zmienia sygnał w dziedzinie czasu propagacji (efekt wychodzi w przesunięciu fazowym) w całym dostępnym zakresie.
    "Porządne" metody filtrowania są zawsze kompromisem między precyzyjnym określeniem charakterystyki amplitudowej i fazowej.
    Matlab dysponuje prostymi metodami generowania współczynników filtrów w kilku (aż za dużo) wersjach. Dodatkowo użycie procedurki filtfilt (pamiętam dokładnie) zamiast filt (chyba tak się nazywa) daje filtrację 'bez przesunięcia fazy' (tak naprawdę to filtruje dwukrotnie, raz w przód, raz w tył i przesunięcia się znoszą).
    Wywołania są w miarę proste. Proponuję przeczytać firmowe demo (niestety nie mam teraz przy sobie Matlaba) i helpa od funkcji bessel czy cheby (do wyznaczania współczynników).
    Ideologia jest prosta:
    1. zależnie od potrzeb generujemy wspólczynniki,
    należy podać rząd filtru (im wyższy tym selektywniejszy, chyba 3 dB co 1 stopień, _nie_pamiętam_dokładnie_ ),
    nazwisko mądrego faceta dobieramy stosownie do tego czy ma świetnie zachowywać fazę, czy też mało zaburzać amplitudę w paśmie przenoszenia etc.
    parametrami są częstotliwości stosownie do specyfiki danego filtru,
    zwykle częstotliwości podawane są w skali 0-1 gdzie 1 to częstotliwość Nyquista (1/2 f-próbkowania).
    Otrzymuje się 2 wektorki standardowo oznaczane a i b.
    2. Filtrowanie procedurka filt (chyba?) z parametrami :
    ciąg wejściowy, a, b na wyjściu sygnał przefiltrowany.

    Mam nadzieję, że nic nie zapomniałem bo chyba z rok nie filtrowałem.

    Istnieje procedurka wyliczająca z a i b charakterystyki przenoszenia amplitudy i fazy. (zapomniałem nazwy, szukać w helpach)

    Później można rozważyć używanie okien (jak już się czuje potrzebę zastosowania, to samo użycie jest trywialne)

    Działanie można prosto sprawdzić "na oko" filtrując sygnał sinusa (albo kilka sinusów, a może jeszcze z szumem)

    Do oglądania sygnału przed i po najprościej użyć procedurki spectrum czy może specpow (znów skleroza), pokazuje na wykresie gotowe widma, a w przypadku pracy z dwoma sygnałami (np. wejścia i wyjścia procesu badanego) to nawet więcej.

    W Excelu w zasadzie tylko najprostsze sztuczki są możliwe i zwykle nie ma takiego wsparcia jak w Matlabie żeby posprawdzać działanie algorytmu; trzeba wierzyć że nikt się w znaku nie kopnął.