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

redukcja szumów na podstawie pobranej próbki

puciaken 12 Cze 2009 18:18 2744 6
REKLAMA
  • #1 6647382
    puciaken
    Poziom 11  
    Dopiero się przymierzam do tego projektu. Ma to być układ wykorzystujący AVR, więc raczej złożoność obliczeń nie może być zbyt duża, chcę by dźwięk był wysyłany w jakości 44kHz/16bit, ma być nakładany na oryginalny sygnał i dzięki różnicy faz z sygnału ma być usuwane to co niepożądane (nie chcę psuć sygnału wyjściowego (analogowego) niedoskonałością przetworników). nie ma to być rozwiązanie profesjonalne (w tym względzie, żeby było stosowane w studiu). chodzi przede wszystkim o praktycznie amatorskie zastosowanie do usuwania różnego rodzaju szumów, brumów i innych ciągłych, mało zmieniających się sygnałów.

    Na początku myślałem głównie o usuwaniu brumu, czyli czegoś o określonej częstotliwości, co zmienia się w bardzo niewielkim stopniu. No i pomysł prosty. Gdy użytkownik włączy filtr, zostanie pobrana odpowiednia próbka (program pobierze kilka okresów tego brumu do zewnętrznej pamięci) i teraz
    albo spróbuje się zsynchronizować z sygnałem wejścia (skoro pobrał kilka okresów, to znana jest częstotliwość) i będzie wysyłać odwrócony w fazie sygnał na wyjście
    albo: skoro na wejściu mam ten sam sygnał na który będzie nakładany ten do usuwania brumu, to mogę sprawdzać czy po nałożeniu tego odwróconego w fazie na wejściowy powstaje sygnał o mniejszej amplitudzie (biorąc średnią kilkudziesięciu próbek). jak przejdę tak kilka okresów będę wiedział w jakim położeniu na wyjściu powstaje najcichszy sygnał (czyli kiedy filtr jest idealnie zgrany).

    Wciąż pozostaje problem, że częstotliwość brumu może się okresowo zmieniać, więc myślałem o jakiejś interpolacji, ale zaś jej liczenie chyba zadusi mikroprocesor, a do dyspozycji jest 16MHz. Jeśli chodzi o obliczenia, proces analizy szumu itd. (po pobraniu próbki) może trochę potrwać, ale już samo usuwanie szumu powinno działać w czasie rzeczywistym.

    To założenia, ale uznałem, że może by spróbować zrobić coś uniwersalnego, wykorzystującego jakiś dobry, szybki algorytm. Jak zauważyłem przy testach na komputerze w edytorze audio, to co powstanie po takim usunięciu brumu nie da się już "oczyścić" w ten sam sposób.

    Jak widać jestem jeszcze dość zielony. prosiłbym o jakieś nakierowanie na pewne zagadnienia, porady... Wiem, że profesjonalne algorytmy kosztują majątek, więc wymyślenie tego to nie jest prosta sprawa, ale może są jakieś dobre darmowe sprawdzone algorytmy? Dostępny jest choćby ten z Audacity (choć jego wyniki są raczej kiepskie).
    Nie bardzo wiem jak spojrzeć na sygnał pod kątem redukcji szumu, na czym się opierać...

    Doczytałem na forum o układzie FX803, jak to ma się praktyce?

    Będę wdzięczny za pomoc.
  • REKLAMA
  • #2 6650179
    And!
    Admin grupy Projektowanie
    Cyfrowo można zredukować niechciane sygnały tak:
    mamy wzorzec zakłócenia-szumu-brumu,
    robimy jego FFT, czyli wiemy z jakich częstotliwości się składa,
    robimy filtr FIR na podstawie uzyskanych współczynników,
    opisujących sygnał zakłócający tak aby obniżał moc zakłóceń w sygnale wyjściowym.
    Wada wytniemy te częstotliwości również z dźwięku oryginalnego.

    Rozwiązanie które zaproponowałeś, może być ciekawe lecz kłopotliwe ze względu na problem z z synchronizacją.
  • REKLAMA
  • #3 6650215
    puciaken
    Poziom 11  
    No właśnie nie chciał bym tak inwazyjnego filtru (chamsko wycinającego częstotliwości :) ). Coś wydaje mi się, że zrobienie jakiegoś mniej prymitywnego filtru na avr jest niemożliwe (z racji złożoności obliczeń). Czytam właśnie o obsłudze kart mmc, bo to rozwiązanie wydaje się bardzo dobre (ze względu na pojemność) do zapamiętywania profilu i przechowywania jakichś tymczasowych informacji, no ale czas odczytu tych paczek po 2048 B przez 8 bitowy procek będzie chyba zbyt długi (jeśli do tego ma dochodzić cały algorytm odszumiania).
  • REKLAMA
  • #4 6656935
    DXFM
    Poziom 20  
    Dźwięk ma być wysyłany 44100Hz/16bit. Stereo? Jaki ma być interfejs wejściowy i wyjściowy? Czy w ogóle jakiś sygnał audio ma być również wprowadzany i obróbka w czasie rzeczywistym? Zastanów się, czy same operacje wejścia i wyjścia nie pożrą możliwości tego procesora. Poza tym operacje przetwarzania tych szybkich sygnałów procesorem 8-bitowym bez instrukcji DSP jest raczej kiepskim pomysłem. Czy operacje miałyby być wykonywane na liczbach stałoprzecinkowych 16-bitowych? Pomyślałeś o tym, że procesor nie obsłuży Ci nasycenia czy normalizacji?
    Weź co najmniej procesor, który już będzie miał interfejs audio (I2S i pochodne) najlepiej z kanałami DMA.
    W modzie są ostatnio ARMy. Może to być jakiś Philips, Atmel czy też ST. Są do 2x droższe od AVR, a zasoby z 1000x większe. Taki STM32F103VCT posiada dwa niezależne interfejsy audio, DMA.
    Pomyśl!
  • #5 6676921
    puciaken
    Poziom 11  
    DXFM napisał:
    Dźwięk ma być wysyłany 44100Hz/16bit. Stereo?
    mono
    Cytat:
    Jaki ma być interfejs wejściowy i wyjściowy?
    wyjściowy
    Cytat:
    Czy w ogóle jakiś sygnał audio ma być również wprowadzany i obróbka w czasie rzeczywistym?
    tak, oryginalny (ale część by szła do procka, a część na wyjście układu)
    Cytat:
    Zastanów się, czy same operacje wejścia i wyjścia nie pożrą możliwości tego procesora.
    aż taki słaby nie jest, chyba że bierzesz pod uwagę obsługę zew. pamięci to też mam wątpliwości
    Cytat:
    Poza tym operacje przetwarzania tych szybkich sygnałów procesorem 8-bitowym bez instrukcji DSP jest raczej kiepskim pomysłem. Czy operacje miałyby być wykonywane na liczbach stałoprzecinkowych 16-bitowych?
    raczej tak
    Cytat:
    Pomyślałeś o tym, że procesor nie obsłuży Ci nasycenia czy normalizacji?
    Weź co najmniej procesor, który już będzie miał interfejs audio (I2S i pochodne) najlepiej z kanałami DMA.
    W modzie są ostatnio ARMy. Może to być jakiś Philips, Atmel czy też ST. Są do 2x droższe od AVR, a zasoby z 1000x większe. Taki STM32F103VCT posiada dwa niezależne interfejsy audio, DMA.
    Pomyśl!

    pomyślałem, jednak programowanie innych procków niż avr to raczej dużo wyższa szkoła jazdy. takie jest przynajmniej moje przekonanie. nic, postaram się zrealizować chociaż pierwotny plan.
  • REKLAMA
  • #6 6679461
    DXFM
    Poziom 20  
    Nie odpisałeś, jaki ma być interfejs we/wy. Czy uda Ci się wykorzystać interfejs SPI? Jeśli nie, procesor będzie pochłonięty machaniem pinami. Przerabiałem taki temat.
  • #7 6681471
    puciaken
    Poziom 11  
    Wydaje mi się, że odpowiednie będzie użycie pamięci z kart mmc, więc interfejs po SPI.
    Właśnie kończę (a może dopiero zaczynam) ten pierwotny prymitywny projekt, czyli wysyłanie sygnału odwróconego w fazie. Wszystko by było ok, gdyby nie to, że mam problem z synchronizacją. O ile np. dla 441Hz (sinusoidy) nie ma problemu bo to 100 sampli na każdy okres, to już dla 440Hz jest to 100,2772727 czy coś podobnego i nie bardzo mam pomysł jak to rozegrać.
REKLAMA