logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Cyfrowy kod programu w języku C

imagia 28 Gru 2015 10:55 8661 18
  • #1 15275353
    imagia
    Poziom 11  
    Potrzebuje filtr cyfrowy FIR napisany w C możliwie jak najszybszy pomiędzy zakresem 300-3400Hz (bandpass). Szukam i szukam a samemu nie jestem w stanie napisać.

    Znalazłem coś takiego ale to na 1-300Hz podobno
    Kod: C#
    Zaloguj się, aby zobaczyć kod
  • #3 15275594
    imagia
    Poziom 11  
    To może tak: szukam cyfrowego bandpass na 300-3400Hz w C.

    Czy to jest w jakiś sposób powiązane z FIR lub IIR ? czy bandpass to bandpass ?

    o ile się nie mylę to bandpass to też rodzaj filtru gdyż przez wygładzenie amplitudy ograniczamy pasmo w Hz tak ?
  • #4 15275597
    michcior
    Poziom 30  
    Oj, proponuję poczytać trochę teorii bo widzę że nie masz pojęcia całkowicie.
    FIR czy IIR może być jaki chcesz, low, band, high pass.

    Infinite Impulse Response to filtry w których występuje sprzężenie zwrotne. Stąd jak do filtra coś wpadnie, to przez sprzężenie zwrotne będzie tam występować w nieskończoność, ponieważ na jakimś etapie dokładność obliczeń to ucina, to w końcu energia sygnału znika. Ale teoretycznie ciągle się kręci.

    Finite Impulse Response to filtry w których sygnał wejściowy splata się (splot - operacja matematyczna czytać na wikipedii) z odpowiedzią impulsową filtra. Nie ma sprzężenia ale wymaga sporej liczby współczynników (a tym samym sporej liczby obliczeń) żeby filtr był w miarę dobry.
  • #5 15275609
    imagia
    Poziom 11  
    Właśnie że czytam tyle że jest to dla początkującego sporo do zrozumienia, a ja nie potrzebuje zgłębiać tylko użyć i stąd post. Wiem że to pewnie do działu ośla łączka :) się nadaje.
  • Pomocny post
    #6 15276002
    jarek_lnx
    Poziom 43  
    Cytat:
    Właśnie że czytam tyle że jest to dla początkującego sporo do zrozumienia, a ja nie potrzebuje zgłębiać tylko użyć i stąd post. Wiem że to pewnie do działu ośla łączka :) się nadaje.

    Niestety temat jest obszerny, jak potrzebujesz raz użyć to poszukaj gotowego softu na PC (do filtrowania albo do projektowania filtrów)
    Powinieneś znać nie tylko pasmo przenoszenia ale i częstotliwość próbkowania, bo co z tego że wygooglasz jakiś przykład o odpowiednim paśmie, jesli pracował przy innym próbkowaniu. Filtry różnią sie nie tylko pamem, ale też nachyleniem charakterystyki, tłumieniem poza pasmem, odpowiedzią na skok jednostkowy, opóźnieniem grupowym, czy ilością współczynników (ilością mnożeń i dodawań do policzenia)

    Liczenie splotu na małych i powolnych mikrokontrolerach (AVR itp) bywa bardzo uciążliwe.
  • #7 15276255
    imagia
    Poziom 11  
    Próbkowanie to 30,40 lub 60Khz bo wychodzi z PWM lub w zasadzie dowolne od 30kHz >.

    Co sądzisz o sprzętowym rozwiązaniu bandpass zamiast softwerowego ?
    Ma zalety prostoty elementów ale za to mniej kontroli.
    Procek to stm32/72Mhz na wejściu mikrofon na wyjściu głośnik.

    reasumując na wyjściu z procka mam 60khz a chciałbym mieć środek ok. 1500Hz w zakresie 300-3400Hz czyli pasmo GSM.

    Zastanawia mnie ten krótki programik co załączyłem. Jakie on ma zadanie jak myślisz ?
    po użyciu jak by wycinał pasmo ale już w ogóle nie wiem na jaką częstotliwość.
  • #9 15276697
    imagia
    Poziom 11  
    Cytat:
    Sprawdź ten prosty program - generuje FIRy i IIRy w C


    Super, wygląda na to że działa. Co prawda zajmie mi dopracowanie charakterystyki ale z grubsza wyciął sporo w paśmie :))

    Wielkie dzięki !
  • #10 15328903
    Konto nie istnieje
    Poziom 1  
  • #11 15329206
    imagia
    Poziom 11  
    Właśnie mnie to zastanawiało czemu nie mogę się dopasować pomimo licznych prób. Prawdą jest że na float działa znacznie lepiej ale i tak nie mogę powiedzieć że dobrze. Pewnie coś mi się rozjeżdża bo wchodzi ok 16kHz a wychodzi na PWM 60kHz a chciał bym z tych 16Khz zawęzić do 3400Hz i żeby to samo wyszło w PWM przy 30-60kHz.
    Problem w tym że w ogóle nie wiem czy tak się da ale z drugiej strony czemu nie.

    Tak w ogóle pytanie z beczki?
    -czy filtr można stosować przed wejściem ? czy tylko na wyjściu ? w sumie czy to nie to samo ?

    Może lepszym sposobem jest użycie "resamplera" ? już sam nie wiem.
  • #12 15329718
    Konto nie istnieje
    Poziom 1  
  • #13 15329808
    imagia
    Poziom 11  
    Cytat:
    O jakim wejściu i wyjściu mówisz?

    Wejście to mikrofon, wyjście PWM.
    Czyli
    filtr=ADCin
    ...
    ADCout=filtr

    czy

    ADCin
    ...X...
    y=filtr(X)
    ADCout=y

    Czy ja dobrze rozumiem że wejście na filtr jest zmienna X a nie tablica[X] ?

    Chciałbym wszystko zaimplementować w procesorze bo chce mieć kontrole nad danymi na wyjściu które muszę potem obrobić i dlatego nie chcę tego robić sprzętowo.
  • #14 15329880
    Konto nie istnieje
    Poziom 1  
  • #15 15329907
    imagia
    Poziom 11  
    Już to chwyciłem że miejsce nie ma znaczenia o ile moment tak.
  • #16 15329939
    Konto nie istnieje
    Poziom 1  
  • #17 15330031
    imagia
    Poziom 11  
    Moment tz. np.jakiś cykl w programie: loop,array itp.
    a nie samo wejście czy wyjście ADC.
  • Pomocny post
    #18 15330094
    Konto nie istnieje
    Poziom 1  
  • #19 15330121
    imagia
    Poziom 11  
    Masz racje wpadłem sam z loop, ale coś mi rozjaśniłeś :)
REKLAMA