Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Rozwiązano] Harmoniczne, a dźwięk generowany przez PWM

28 Lut 2019 21:55 456 21
  • Poziom 8  
    Do Rpi3 podpiąłem głośnik i próbuję wygenerować dźwięk o określonej częstotliwości (interesuje mnie zakres 400Hz - 1000Hz) poprzez PWM, co ogólnie się udaje, tylko głośnik produkuje trzecią harmoniczną, która jest praktycznie tak samo głośna co sygnał. Chciałbym wyciąć wszystkie harmoniczne powyżej 1kHz, w układ wpiąłem filtr dolnoprzepustowy, ale to nic nie zmieniło. Nie wiem, czy problem leży po stronie sygnału PWM, czy jednak głośnik tu się za bardzo produkuje. W załączniku schemat, oraz jak to wygląda z harmonicznymi.

    Harmoniczne, a dźwięk generowany przez PWM Harmoniczne, a dźwięk generowany przez PWM
  • Pomocny post
    Poziom 33  
    Po pierwsze nic nie wiemy o głośniku...jaki to jest głośnik, jakie są parametry głośnika.
    Sam układ jest średni...nie spadł drastycznie poziom sygnału(głośność) po dodaniu tego rezystora w szereg?
    Ogólnie zastosował bym jakiś filtr aktywny wyższego rzędu bo twój to filtr pierwszego rzędu...a więc tłumienie wzrasta 20dB na dekadę...czyli zakładając, iż Twoje 580Hz jest przenoszone tylko z niewielkim tłumieniem to 20bB tłumienia osiągniesz dopiero przy ok. 10kHz.
    Trzeba dodatkowo powiedzieć, iż sygnał PWM to sygnał prostokątny o którym wiadomo, iż ze swojej natury posiada nieparzyste harmoniczne.
    Dodatkowo nic nie napisałeś o częstotliwości nośnej PWM.
  • Poziom 8  
    Odnośnie głośnika to 8Ω 1W, kosztował parę złotych - tylko tyle mogę o nim powiedzieć.
    Odnośnie rezystora, to planuje dodać tam jeszcze tranzystor i potencjometr, ale teraz głośność nie jest moim największym problemem.
    Jeśli chodzi o filtry wyższego rzędu, to istnieją jakieś popularne i skuteczne rozwiązania?
    Częstotliwość nośnej w przypadku ze screena to 586Hz
  • Poziom 33  
    Czyli to nie jest PWM tylko zwyczajnie jakiś sygnał prostokątny o jakimś (pewnie 50%) wypełnieniu?
  • Poziom 8  
    Nie wiem czy dobrze odpowiedziałem na poprzednie pytanie z falą nośna. To jest PWM sprzętowy generowany z pinu 18 z Rpi, częstotliwość ustawiona na 586Hz, wypełnienie różnie - nie wpływa ono na częstotliwość, tylko na głośność.
    Wieczorem spróbuję sklecić filtr aktywny wg. tego kalkulatora: https://www.changpuak.ch/electronics/calc_08.php - nada się ten filtr?
  • Pomocny post
    Poziom 33  
    Tak ...filtr z tego schematu to tzw. sekcja bikwadratowa. Taka pojedyncza sekcja to filtr II rzędu. Można to łączyć i uzyskiwać filtry wyższych rzędów). Proponuje pobrać program FilterPRO (polecam-używałem) który po podaniu parametrów generuje Ci strukturę i wartości elementów takiego filtra w zależności od potrzeb (rząd, typ charakterystyki, częstotliwość graniczna,...).

    Nie wiem co właściwie chcesz zrobić tym sygnałem na tym głośniczku.
    Zazwyczaj modulacji szerokości impulsów (PWM) używa się w ten sposób , iż częśtotliwośc nośną ustawia się dużo wyżej niż częstotliwość słyszalna (np. 50kHz) a zmienia się wypełnienie w takt sygnału który chcesz uzyskać w głośniku (np. podajesz na wejście tj.wypełnienie) sygnał 500Hz. W ten sposób łatwiej odfiltrować harmoniczne pochodzące od nośnej i będące wynikiem tego typu modulkacji.
    Harmoniczne, a dźwięk generowany przez PWM
  • Poziom 8  
    Ta częstotliwość potrzebna mi jest do generatora kodu Morse'a, chciałem wygenerować ten prosty sygnał w sposób sprzętowy, co wydawało mi się lepszym pomysłem niż zabawa z plikami dźwiękowymi, gdzie przy użyciu Rpi Zero dodatkowo wychodzi stosowanie przejściówki do wyciągnięcia audio z portu HDMI.
    Ciekawe jest to co piszesz, tylko jak koncept ogarniam, to gorzej z wykonaniem, tj. jak wygenerować ten sygnał 500Hz przez zmianę wypełnienia? Po prostu zmieniać wypełnienie z częstotliwością 500Hz czyli co 2ms?
  • Pomocny post
    Poziom 33  
    Way napisał:
    Po prostu zmieniać wypełnienie z częstotliwością 500Hz czyli co 2ms?

    Nawet częściej bo gdy chcesz odtworzyć sinus to wypadało by choć ze 20 próbek na okres wrzucić. Wynika z tego, że to 2ms/20 czyli jedna próbka co 100µs.

    Specjalistą od RasPi nie jestem ale te płytki mają chyba jeszcze oprócz HDMI również wyjście słuchawkowe.
  • Poziom 8  
    OK, zaczyna mi się to rozjaśniać (proszę o poprawę, jeśli coś źle napisałem). Kontynuujmy przypadek 500Hz- muszę w tych 2ms ogarnąć okres sinusa, czyli tak jak na grafice- zaczynam od 50%wypełnienia, później 0%, dalej 100% i wracam do 50% i tak w kółko. Filtr aktywny dalej ma tutaj zastosowanie?

    Co do Rpi to normalne modele mają wyjście audio, ale wersja Zero takiego nie posiada.

    Harmoniczne, a dźwięk generowany przez PWM
  • Pomocny post
    Poziom 37  
    Way napisał:
    Filtr aktywny dalej ma tutaj zastosowanie?

    Myślę, że powinieneś zmierzać do uzyskania jak największej częstotliwości nośnej. Jeżeli będzie ona znacznie powyżej pasma przenoszenia głośnika to żaden filtr dolnoprzepustowy może nie być potrzebny - filtrem stanie się głośnik i wytłumi nośną "sam z siebie".
    Jeżeli będziesz używał jakiegoś wzmacniacza audio to filtr będzie potrzebny żeby ten wzmacniacz niepotrzebnie nie przenosił częstotliwości nośnej, taki filtr będzie jednak bardzo prosty w realizacji - może być nawet pasywny, pierwszego rzędu.
  • Pomocny post
    Poziom 27  
    Drodzy koledzy,
    Zapomnieliscie o wpływie obciążenia opisanego wyzej filtra na jego parametry...

    Filtr bez podłączonego głośnika będzie miał częstotliwość graniczną ok. 1kHz.
    Jak najbardziej...

    A po podlączeniu....
    Tłumienie ok. 1:60, i częstotliwość graniczna podskoczy też mniej więcej 60x,
    Bo 8 omów głośnika wyeliminuje wpływ rezystora 470R na biegun określający częstotliwość graniczną układu...

    Tutaj tylko filtr aktywny ma rację bytu...
  • Pomocny post
    Poziom 43  
    __Grzegorz__ napisał:
    Tutaj tylko filtr aktywny ma rację bytu...
    Przy założeniu że filtrujemy sygnał który później podajemy na wzmacniacz, ale równie dobrze można wzmocnić sygnał prostokątny* bo tak łatwiej a później dać filtr LC pasywny oczywiście.

    *Czy RPi ma jakiś wzmacniacz na wyjściu PWM? wydaje mi się mało prawdopodobne, a dla zwykłego wyjścia cyfrowego GPIO głośnik będzie znacznym przeciążeniem. Poza tym dostanie składową stałą czego głośniki "nie lubią".
  • Poziom 8  
    Dopiero po podłączaniu przez filtr aktywny 2 poziomowy (4-Pole - nie wiem jak to się tłumaczy) harmoniczne zaczęły się zmniejszać. Teraz użyłem dwóch różnych wzmacniaczy tj TLC272 i TS912, a że muszę dokupić parę części bo brakuje mi kondensatorów ceramicznych i chce spróbować to przepuścić przez 3 poziomy, to jakie najlepiej wzmacniacze operacyjne kupić? Czy to nie będzie miało znaczenia?
    Harmoniczne, a dźwięk generowany przez PWM
  • Poziom 37  
    Way napisał:
    Dopiero po podłączaniu przez filtr aktywny 2 poziomowy (4-Pole - nie wiem jak to się tłumaczy) harmoniczne zaczęły się zmniejszać. Teraz użyłem dwóch różnych wzmacniaczy tj TLC272 i TS912, a że muszę dokupić parę części bo brakuje mi kondensatorów ceramicznych i chce spróbować to przepuścić przez 3 poziomy, to jakie najlepiej wzmacniacze operacyjne kupić? Czy to nie będzie miało znaczenia?
    Harmoniczne, a dźwięk generowany przez PWM

    Chyba nadal robisz to źle chociaż już kilkakrotnie napisano jak to należy zrobić.
    Idea polega na użyciu sygnału nośnego o znacznie większej częstotliwości niż sygnał użyteczny. Wówczas te częstotliwości są na tyle "daleko od siebie", że nie trzeba używać jakichś skrajnie stromych filtrów.
  • Poziom 8  
    Bo nie napisałem - odpuściłem metodę z modulacją wypełnienia i dużą częstotliwością, bo musiałbym to zrobić programowo, a że już mam trzy wątki wykonywane w tym samym czasie (pisze w Javie), to z tej sinusoidy by dużo nie wyszło.
  • Poziom 33  
    Jeżeli mają być z prostokątnego przebiegu o częstotliwości niemal 600Hz odfiltrowane wszystkie harmoniczne poza pierwszą to rząd filtru musi być dość wysoki(lub nawet nieskończoność ńczony)...pytanie po co Ci taki mega czysty sinus? Sam sygnał w głośniczku już pewnie teraz stracił swój ostry charakter. Jest się o co bić?
  • Poziom 8  
    Chciałbym zobaczyć co się stanie po dodaniu kolejnych stopni filtra - nawet z czystej ciekawości, będzie to tez nauka na przyszłość.
  • Poziom 43  
    Way napisał:
    Bo nie napisałem - odpuściłem metodę z modulacją wypełnienia i dużą częstotliwością, bo musiałbym to zrobić programowo, a że już mam trzy wątki wykonywane w tym samym czasie (pisze w Javie), to z tej sinusoidy by dużo nie wyszło.
    Nawet "brzydki" przebieg aproksymujący sinus kilkoma schodkami znacznie zredukuje niższe harmoniczne, a te wysokie są łatwe do odfiltrowania

    .
    Way napisał:
    Chciałbym zobaczyć co się stanie po dodaniu kolejnych stopni filtra - nawet z czystej ciekawości, będzie to tez nauka na przyszłość.
    Uzyskasz nachylenie charakterystyki N*6dB/oktawę gdzie N-rząd filtru

    Teoretycznie między cz. podstawową a trzecią harmoniczną dało by się uzyskać N*9,5dB ale ty chcesz generować częstotliwości z zakresu 400-1000Hz więc filtr musi mieć częstotliwość graniczną ponad tym pasmem, a trzecia harmoniczna 400Hz to 1,2kHz więc pomiędzy 1kHz a 1,2kHz tłumienie musiało by bardzo szybko narosnąć.

    Way napisał:
    (4-Pole - nie wiem jak to się tłumaczy)
    Filtr ma cztery bieguny (w równaniu transmitancji) inaczej mówiąc jest to filtr czwartego rzędu.
  • Poziom 33  
    jarek_lnx napisał:
    Way napisał:
    Chciałbym zobaczyć co się stanie po dodaniu kolejnych stopni filtra - nawet z czystej ciekawości, będzie to tez nauka na przyszłość.
    Uzyskasz nachylenie charakterystyki N*6dB/oktawę gdzie N-rząd


    Ale trudno też zabronić komuś eksperymentowania. Oczywiście...to wszystko można wyczytać z książek bądź z internetu ale jednak czymś innym jest to samemu zmierzyć i i usłyszeć. Mam też wrażenie, że wszystkie dobre rozwiązania już padły i jeżeli autor tematu nie ma chęci z nich skorzystać ... to albo nie może albo nie chce.
  • Poziom 37  
    Way napisał:
    Bo nie napisałem - odpuściłem metodę z modulacją wypełnienia i dużą częstotliwością, bo musiałbym to zrobić programowo, a że już mam trzy wątki wykonywane w tym samym czasie (pisze w Javie), to z tej sinusoidy by dużo nie wyszło.

    Ale przecież napisałeś, że
    Way napisał:
    To jest PWM sprzętowy generowany z pinu 18 z Rpi, częstotliwość ustawiona na 586Hz

    używasz sprzętowego PWM więc wystarczy (znacznie wolniej) zmieniać współczynnik wypełnienia.
  • Poziom 8  
    Tak, PWM jest generowany sprzętowo, ale żeby uzyskać w miarę płynną zmianę wypełnienia, muszę współczynnik wypełnienia zmieniać programowo, czyli jak wyżej napisałem, w ciągu 2ms muszę ogarnąć sinusa, co przy działaniu innych wątków (nie działają one równolegle, tylko raz jeden, raz drugi) będzie niemożliwe.
    Dzięki wszystkim za dyskusję, dużo się dowiedziałem, nawet więcej niż myślałem, tak jak ktoś wyżej napisał, najlepsze rozwiązania już padły, więc temat zamykam.
  • Poziom 8  
    Tak, PWM jest generowany sprzętowo, ale żeby uzyskać w miarę płynną zmianę wypełnienia, muszę współczynnik wypełnienia zmieniać programowo, czyli jak wyżej napisałem, w ciągu 2ms muszę ogarnąć sinusa, co przy działaniu innych wątków (nie działają one równolegle, tylko raz jeden, raz drugi) będzie niemożliwe.
    Dzięki wszystkim za dyskusję, dużo się dowiedziałem, nawet więcej niż myślałem, tak jak ktoś wyżej napisał, najlepsze rozwiązania już padły, więc temat zamykam.

    Dodano po 1 [minuty]:

    Najlepszym rozwiązaniem jest zmiana szerokości wypełnienia w celu uzyskania sinusa przy dużej częstotliwości. Zastosowanie filtrów aktywnych też dział, ale nie tak skutecznie.