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

Filtr cyfrowy czy coś innego na mikroporocesorze ?

rmajda 11 Kwi 2008 21:11 5715 31
REKLAMA
  • #1 5019929
    rmajda
    Poziom 20  
    Posty: 485
    Pomógł: 13
    Ocena: 17
    Witam,

    Jak można zrealizować coś takiego. Podaję sygnał dzwięku na przetwornik ADC mikroprocesora i następnie analizuję częstostliwości np. 1-2kHz, 3-4kHz
    i jeśli w danym paśmie amplituda jest większa niż jakaś wartość to zapalam diodę a jak mniejsza to gaszę. Taki kolorofon na mikrokontrolerze.
    Jeśli da się to zrobić to jakie parametry musi mieć uC? Czy któraś atmega da rade?

    Pozdrawiam,
  • REKLAMA
  • #2 5020522
    zerpo
    Poziom 22  
    Posty: 463
    Pomógł: 50
    Ocena: 134
    Mój kolega takie coś wykonał na ATmega16. Nie znam niestety szczegółów, ale na pewno uC chodzi na max. częstotliwości. Do analizy częstotliwościowej kolega wykorzystał szybką transformatę Fouriera (FFT).
    Poszukaj coś o FFT, jeśli chcesz to zrobić całkowicie cyfrowo.

    Można też obrać inną drogę, ale wymagałoby to zbudowania kaskady filtrów analogowych. Przykład jest tutaj Kolorofon.
    Polega to na tym, że są 3 kanały analogowe, na ich wyjściu mamy napięcie proporcjonalne do natężenia w danym paśmie częstotliwości. Napięcia te są mierzone przez uC i dalej już można cuda wymyślać.
  • REKLAMA
  • #3 5020681
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    do kazdego zastosowania trzeba dobrac odpowiedni procesor [; AVR widac nie do konca jest do tego najlepszy, chocby z prostego powodu, ze jest 8 bitowy, a 8 bitow w audio to troche malo do czegos ciekawszego

    0x41 0x56 0x45!!
  • #4 5024261
    Balu
    Poziom 38  
    Posty: 4397
    Pomógł: 323
    Ocena: 48
    Tutaj Freddie ma rację...
    Ale... da się FFT jest w książce Baranowskiego mikrokontrolery AVR Atmega w praktyce, program do ściągnięcia ze strony BTC.
  • REKLAMA
  • #5 5024277
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Dokładnie rzecz biorąc - DFT.
  • REKLAMA
  • #6 5024729
    rmajda
    Poziom 20  
    Posty: 485
    Pomógł: 13
    Ocena: 17
    Co znaczy DFT? Ma może ktoś skserowany ten rozdział z Baranowskiego, chyba że ten rozdział to cała książka :-)
  • #8 5027125
    Zajc3w
    Poziom 14  
    Posty: 104
    Pomógł: 1
    DFT czy FFT są dość zakręcne w implementacji i możesz sobie nie dać rady poza tym wymaga wielu mnożeń i tu ATMEGA może nie dać sobie rady.

    Jak wystarczy Ci odświerzanie kila razy na sekunde i niska rozdzielczość(8 bitów 32-64 próbek) to może się udać.Ale wtedy tylko 3 zakresy(bas+średnie+treble)

    Dużo szybsze są algorytmy IIR. Potrzeba do nich od 3 do 8 próbek sygnału.3 dal filtra 1 stopnia dolno lub górnoprzepustowego 5 dla 1 stopnia środkowoprzepustowych i dla kolejnych stopni filtra dodatkowo po 1 próbce.

    Na ATmega 32@16MHz teoretycznie pójdą 4 filtry 16 bit 2 stopnia + zbieranie danych z zewnętrznego ADC i wysyłanie po SPI na zewnetrzny DAC.

    Na filtrach IIR mógłbyś zrobić nawet 8 filtrów 8 bit 2 stopnia i jescze kilkanaście - do 30 Hz odświerzania wyciągnąć
  • #11 5028328
    rmajda
    Poziom 20  
    Posty: 485
    Pomógł: 13
    Ocena: 17
    Dzięki Zajc3w i slomo.

    Zajc3w: Czy robiłeś coś takiego praktycznie na AVR?
  • #12 5028399
    arturt134
    Poziom 27  
    Posty: 792
    Pomógł: 76
    Ocena: 24
    8 bit, stały przecinek. Na dynamice ci przecież nie zależy, ponieważ masz i tak wychwycić próg, przy którym przełączasz diodę.
    Możesz sobie zafundować zestaw filtrów oktawowych dla całego pasma akustycznego, no może dla prawie całego, nawet na AVR.
  • #13 5028430
    rmajda
    Poziom 20  
    Posty: 485
    Pomógł: 13
    Ocena: 17
    arturt134: Możesz rozwinąć temat, masz przykład lub link? Ew. gdzie o takiej realizacji przeczytać. Przykładowo chciałbym wykrywać próg dla 5 pasm. Realizacja jak najprostsza, na dynamice mi nie zależy tylko info że w danym paśmie średnia wartość amplitudy sygnału przekroczyła jakiś próg.
  • #14 5028467
    arturt134
    Poziom 27  
    Posty: 792
    Pomógł: 76
    Ocena: 24
    Poszukaj w googlach. Jako hasło wpisz "zespół filtrów", lub "filter block". Lub coś w rodzaju "octave filter", "filtr oktawowy" itp. Polecam też książki z zakresu DSP, szczególnie o filtrach IIR - tu najlepiej udaj się do księgarni technicznej w twoim mieście, lub poczytaj posty na tym forum.
    Niestety nie mogę ci napisać gotowego algorytmu, ponieważ wtedy zdradziłbym tajemnicę służbową:)))

    Aha, i zamiasta wartości średniej, polecałbym raczej obliczanie wartości skutecznej (RMS) ze stałą czasową, np FAST. Więcej informacji na temat obliczania RMS-a znajdziesz na stronach firm produkujących mierniki poziomu dźwięku: Bruel&Kjaer, SONOPAN, SVANTEK. Ta pierwsza to duńska, dwie ostatnie są polskie.

    Mam nadzieję, że choć trochę udało mi się pomóc.
  • #15 5028477
    rmajda
    Poziom 20  
    Posty: 485
    Pomógł: 13
    Ocena: 17
    Dziękuję, poczytam i ewentualnie pozwolę sobie zadać jeszcze parę pytań.
  • #16 5034224
    Zajc3w
    Poziom 14  
    Posty: 104
    Pomógł: 1
    rmajda napisał:
    Dzięki Zajc3w i slomo.

    Zajc3w: Czy robiłeś coś takiego praktycznie na AVR?


    Tak ale tylko próbkowanie i FFT - przymiarki do dekodowania DTMF-u.
    Filtry IIR liczyłem bo planuje zrobić Cyfrowy korektor graficzny.

    Kiedys wygrzebałem w sieci książkę "DSP guide".Dwadzieścia kilka rozdziałów, kilkaset stron - sa rewelacyjnie
    (niemal łopatologicznie) wytłumaczone algorytmy DSP w tym FFT, DFT IFFT IIR itp itd. Moim zdaniem idealna pozycja dla początkującego w te klocki.
  • #18 5035516
    rmajda
    Poziom 20  
    Posty: 485
    Pomógł: 13
    Ocena: 17
    Czy książka DSP Guide jest w wersji elektronicznej czy tylko druk? Znalazłem: http://www.dspguide.com/CH1.PDF i wystarczy zmieniać rozdziały w linku.



    Wiem że pytanie nie stosowne (piractwo) ale czy ma ktoś może rozdział z książki Mikrokontrolery AVR ATtiny w praktyce pana Baranowskiego w którym opisana jest analiza sygnału (prosty kolorofon)?
  • #20 5035654
    rmajda
    Poziom 20  
    Posty: 485
    Pomógł: 13
    Ocena: 17
    Hmm, fajny "zwyczaj" znalazłem :-) Hmm, sprzydał by sie jeszcze rozdział z teorią.
  • #21 5035705
    kris_gor
    Poziom 17  
    Posty: 240
    Pomógł: 14
    Ocena: 9
    Zajc3w napisał:
    rmajda napisał:
    Dzięki Zajc3w i slomo.

    Zajc3w: Czy robiłeś coś takiego praktycznie na AVR?





    Proponuję przyglądnąć się temu programowi ;-)
    http://www.winfilter.20m.com/
  • #22 5038144
    Zajc3w
    Poziom 14  
    Posty: 104
    Pomógł: 1
    kris_gor napisał:
    Zajc3w napisał:
    rmajda napisał:
    Dzięki Zajc3w i slomo.

    Zajc3w: Czy robiłeś coś takiego praktycznie na AVR?





    Proponuję przyglądnąć się temu programowi ;-)
    http://www.winfilter.20m.com/


    Wyglądda ciekawie :D

    Ale pewnie napisanie w assemblerze przynajmniej części będzie szybsze, oblookam w wolnej chwili dokladniej.
  • #23 5235836
    rmajda
    Poziom 20  
    Posty: 485
    Pomógł: 13
    Ocena: 17
    Zajc3w: Czy robiłeś implementację IIR na AVR? Jeśli tak którym?

    I dodatkowo na których rozdziałach "DSP guide" trzeba się skupić, nie ukrywam że nie mam czasu na czytanie całej :-)
  • #25 5236923
    rmajda
    Poziom 20  
    Posty: 485
    Pomógł: 13
    Ocena: 17
    Dzięki, jest jakaś książka po polsku, która w miarę prosto opisuje DFT? I którą warto kupić.

    Ma może ktoś tylko rozdział z książki Pana Baranowskiego http://www.btc.pl/?id_prod=1675800 w którym jest opisane DFT. Chodzi mi o schemat elektroniczny i teorię jaki był wykorzystany do przykładu. Nie chcę aby umieszczać tutaj ale może ktoś podeśle na rmajda(_at_)os.pl
  • #26 5237342
    __Grzegorz__
    Poziom 30  
    Posty: 1413
    Pomógł: 196
    Ocena: 232
    Richard G. Lyons Wprowadzenie do cyfrowego przetwarzania sygnałów

    Steven W. Smith Cyfrowe przetwarzanie sygnałów

    Są w każdej księgarni technicznej (~100PLN za sztukę)...
    Ale zapewniam, że warto. Wszystko wytłumaczone jak krowie na rowie. :)

    Pozdrawiam.
  • #27 5237462
    don diego
    Poziom 32  
    Posty: 1557
    Pomógł: 165
    Ocena: 63
    Trochę taniej: Cyfrowe przetwarzanie sygnałów Od teorii do zastosowań
    Tomasz P. Zieliński
  • #28 5237730
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    Zajc3w napisał:
    DFT czy FFT są dość zakręcne w implementacji i możesz sobie nie dać rady poza tym wymaga wielu mnożeń i tu ATMEGA może nie dać sobie rady.

    Jak wystarczy Ci odświerzanie kila razy na sekunde i niska rozdzielczość(8 bitów 32-64 próbek) to może się udać.Ale wtedy tylko 3 zakresy(bas+średnie+treble)



    Nie są, aż tak bardzo zakrecone. Wystarczy się troche zainteresowac tematem. Ponadto nawet na AVRkach da sie zaimplementowac calkiem sprawnie dzialajaca transformate DFT czy FFT. Wcale nie musi byc tez wolna.

    Dla przykladu 16 kanalowy analizator widma (z wykorzystaniem transformaty DFT) + wyswietlacz LCD z programem napisanym w....BASCOMIE !

    https://www.elektroda.pl/rtvforum/topic940562.html
    da się ? da się :)
  • #30 5264034
    rmajda
    Poziom 20  
    Posty: 485
    Pomógł: 13
    Ocena: 17
    Odświeże jeszcze temat.
    1. Jak to właściwie jest. Chciałbym zrobić DFT dla sygnału audio powiedzmy do 20kHz. Jeśli przetwornik w atmedze8 wyciągnie 32kHz wówczas transformatę policzę tylko dla pasma 0-16kHz. Czy muszę stosować jakiś filtr dolno-przep. na wejsciu ADC aby obciąć pasmo do tych 16kHz czy mogę zostawić pasmo takie jakie jest?

    2. Jeśli chciałbym podzielić pasmo na 64 czesci, czyli co 16000Hz/64=250Hz to ile próbek muszę pobrać aby obliczyć DFT, jeśli dobrze rozumiem to muszę pobrać 128 próbek z czestotliwoscią 32kHz? I taki bufor 128 próbek już pozwoli na obliczenie DFT, czyli obliczenie 64 amplitud dla poszczególnych harmonicznych?

    3. Jak maksymalnie szybko może próbkować przetwornik ADC w atmega8?

    4. Są jakieś proste wzory na ew. obliczenie filtra pasmowo-przepustowego które można by zastosować w uC 8-bitowym?

    Wiem że są posty na elce, ale te pytania są właśnie po przeczytaniu kilku postów o tej tematyce.

Podsumowanie tematu

✨ Dyskusja dotyczy realizacji cyfrowego analizatora pasm częstotliwości audio na mikrokontrolerze, który po analizie sygnału z ADC zapala diody w zależności od amplitudy w określonych zakresach (np. 1-2 kHz, 3-4 kHz) – tzw. kolorofon. Przykładowa realizacja została wykonana na ATmega16 z wykorzystaniem szybkiej transformaty Fouriera (FFT). Wskazano, że implementacja FFT lub DFT na 8-bitowych mikrokontrolerach AVR, takich jak ATmega8, jest możliwa, ale wymaga maksymalnej częstotliwości taktowania i ograniczonej liczby próbek ze względu na moc obliczeniową. Alternatywnie proponowano zastosowanie filtrów cyfrowych IIR, które są mniej zasobożerne i pozwalają na realizację filtrów pasmowo-przepustowych o niskim opóźnieniu, co jest praktyczne na mikrokontrolerach 8-bitowych. Wskazano, że do poprawnej analizy sygnału audio konieczne jest zastosowanie filtru antyaliasingowego dolnoprzepustowego przed ADC, aby uniknąć aliasingu. Omówiono też kwestie doboru liczby próbek i częstotliwości próbkowania dla DFT (np. 128 próbek przy 32 kHz dla rozdzielenia pasma na 64 części). Polecano literaturę i źródła, m.in. książki „DSP Guide”, „Mikrokontrolery AVR w praktyce” Baranowskiego, oraz algorytm Goertzela do wykrywania określonych harmonicznych. Poruszono też temat obliczania wartości skutecznej (RMS) sygnału w pasmach oraz prostszych metod niż DFT do realizacji kolorofonu na ATmega8. Wskazano, że implementacja może wymagać kompromisów między rozdzielczością, szybkością próbkowania i złożonością algorytmów.
Wygenerowane przez model językowy.
REKLAMA