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

Analiza dzwieku - pytania teoretyczne

paqman 10 Kwi 2008 00:56 3712 17
  • #1 5013623
    paqman
    Poziom 11  
    Witam wszystkich. Piszę program w delphi, do którego potrzebna mi jest analiza dźwięku. Mam z tym związane dwa pytania:

    1. Załóżmy, że przechwyciłem 1024 kolejnych próbek dźwięku z karty muzycznej (44100Hz, 16bit, mono). Narysowanie przebiegu oscyloskopowego dla jednego kanału nie stanowi problemu. Moje pytanie brzmi: Jak pobrać wartości dla kanałów L i R w przypadku dźwięku stereo? Czytałem gdzieś, że są one przeplatane ale nie wiem dokładnie jak.

    2. Co oznaczają prędkości próbkowania: 48kHz, 96kHz, 192kHz? Czy oznacza to, że karta muzyczna jest wstanie przechwycić dźwięk o zakresie powiedzmy 20Hz do 192kHz, czy może podstawowe pasmo akustyczne jest po prostu częściej próbkowane. Z moich obserwacji wynika, że wcale nie zwiększa się dokładność tylko pasmo się poszerza.
  • #2 5013645
    korrus666
    Poziom 40  
    2. Częstotliwość próbkowania odpowiada właśnie za pasmo przenoszenia. Mniej więcej maksymalna częstotliwość jest 2 razy mniejsza od częstotliwości próbkowania czyli dla 44kHz jest to 22 kHz i tak dalej. Za dokładność odpowiada liczba bitów przetwornika. W niektórych kartach są nawet 24 bitowe przetworniki.
  • #4 5013822
    paqman
    Poziom 11  
    Tylko jaki jest sens tworzenia pasma przenoszenie dźwięku w granicach 20Hz do 96 kHz (dla próbkowania 192kHz) skoro wychodzi ono znacznie za pasmo akustyczne?
    Zwiększenie rozdzielczości (16bit, 24bit) pozwala na zwiększenie precyzji odczytu przebiegu w osi Y. A jak zwiększyć dokładność odczytu w osi poziomej X? Jest mi to potrzebne do dokładniejszej transformacji Fouriera (FFT). Mogę zwiększyć rozmiar bufora ale wtedy tracę na odświeżaniu, a chcę mieć przynajmniej 20fps.
  • #5 5014403
    korrus666
    Poziom 40  
    Jak zwiększysz częstotliwość próbkowania to w tym samym czasie dostaniesz więcej próbek więc dla jednej sekundy przy próbkowaniu 96kHz będziesz miał 96 000 próbek. Powiedzmy że do transformaty Fouriera potrzebujesz nawet 1024 próbek, co wg mnie jest całkiem sporo. to możesz na sekundę pokazać 93 obrazy transformaty. To chyba wystarczająco. Mam nadzieję że chociaż odrobinę pomogłem.
  • #6 5015003
    paqman
    Poziom 11  
    Zgadzam się z Tobą, ale nic mi to nie daje gdyż zwiększając częstotliwość próbkowania dwukrotnie mogę przechwycić 2 razy więcej próbek w tym samym czasie. Problem tkwi w tym, że po dokonaniu transformaty połowa przebiegu będzie wychodziła poza pasmo akustyczne.
    Poniżej screeny mojego programu testowego. Widać jak po zmianie częstotliwości próbkowania zmniejsza sie pasmo akustyczne w stosunku do całości. Także jak bym nie ustawił parametrów nagrywania, interesujący mnie obszar 20Hz-20kHz będzie obejmował próbki 0-2047, a właściwie to 0-1856, gdyż 2047 odpowiada częstotliwości 22050Hz. Wzór, na wartość bufora odpowiadającą danej częstotliwości to: ( Freq[Hz] / (Framerate[Hz]/2) ) * (BufferSize/2)
    Analiza dzwieku - pytania teoretyczneAnaliza dzwieku - pytania teoretyczne
    Analiza dzwieku - pytania teoretyczneAnaliza dzwieku - pytania teoretyczne
    I jeszcze jedno pytanie z innej beczki - skąd biorą się te zakłócenia w paśmie nad akustycznym?
  • #7 5015189
    sosen21
    Poziom 12  
    paqman napisał:
    I jeszcze jedno pytanie z innej beczki - skąd biorą się te zakłócenia w paśmie nad akustycznym?


    Te zakłócenia to szumy. Szumów jest wiele rodzajów....szum śrutowy (jest to szum biały), szum termiczny itd.
  • #8 5015207
    paqman
    Poziom 11  
    Cytat:

    Te zakłócenia to szumy. Szumów jest wiele rodzajów....szum śrutowy (jest to szum biały), szum termiczny itd.

    Szum w dźwięku cyfrowym? Źródło z którego nagrywam to wave-in.
  • #9 5016246
    sosen21
    Poziom 12  
    Czemu nie? A szum kwantowania? Taki szum dodaje przetwornik A/C...nie mówię już o tym, że bez odpowiedniej filtracji pojawi się szum sygnału analogowego.
  • #10 5016454
    kafar
    Poziom 15  
    paqman napisał:
    Witam wszystkich. Piszę program w delphi, do którego potrzebna mi jest analiza dźwięku. Mam z tym związane dwa pytania:

    1. Załóżmy, że przechwyciłem 1024 kolejnych próbek dźwięku z karty muzycznej (44100Hz, 16bit, mono). Narysowanie przebiegu oscyloskopowego dla jednego kanału nie stanowi problemu. Moje pytanie brzmi: Jak pobrać wartości dla kanałów L i R w przypadku dźwięku stereo? Czytałem gdzieś, że są one przeplatane ale nie wiem dokładnie jak.

    2. Co oznaczają prędkości próbkowania: 48kHz, 96kHz, 192kHz? Czy oznacza to, że karta muzyczna jest wstanie przechwycić dźwięk o zakresie powiedzmy 20Hz do 192kHz, czy może podstawowe pasmo akustyczne jest po prostu częściej próbkowane. Z moich obserwacji wynika, że wcale nie zwiększa się dokładność tylko pasmo się poszerza.




    Odp.1 Wszystko zależy w jaki sposób przechwytujesz dane. Czasami są po kolei jeżeli są w jednej tablicy a czasami są cześcią obiektu. Zreszta nagrywasz mono wiec nawet jeżeli znajdziesz drugi kanał to wartości będą takie same.

    Odp.2 Zwiększenie czestotliwości próbkowania ma jak najbardziej sesn. Zauważ , że dla sygnału 22 kHz przy częstotliwości próbkowania 44 kHz, próbkowanie dokonywane jest tylko 2 razy na okres, żeby poprawnie przenieść sinus to zdecydowanie za mało, dlatego przy częstotliwości próbkowania np 96 kHz sygnał 22 kHzjest próbkowany około 4 razy to zdecydowana poprawa. Wpływa to oczywiście na dokładność w prost proporcjonalnie do czestotliwości syganły. Jezeli chcesz zwiększyć dokładność samej transformaty Furiera to pozostaje tylko zwiększyć pakiet próbek, wtedy oczywiście są problemy z wydajnością no ale z czymś się trzeba pogodzić, chociaż 1024 próbek to troche słaby wynik jak na dzisiajsze komputery, czy to jest wartość dla każdego kanału czy dla sumy?
  • #11 5016879
    __Grzegorz__
    Poziom 30  
    Proponuję poczytać o dopełnianiu zestawu próbek zerami przed FFT.

    Proponuję również doczytać o nakładaniu różnych okien na zestaw próbek i co ono daje....
  • #12 5019567
    paqman
    Poziom 11  
    Co do dopełniania próbek zerami - nie jest mi to potrzebne, gdyż zawsze pobieram liczbę próbek będącą potęgą 2.
    Jeśli chodzi o selekcje kanałów, na razie nagrywam w trybie mono ale chciałbym nagrywać w trybie stereo i później móc rozdzielić próbki na kanały L i R.
  • Pomocny post
    #13 5023567
    paw789
    Poziom 18  
    tak jak kolega Grzegorz pisal poczytaj o funcjach okna. Jest to taka funkcja przez którą mnoży się zbiór próbek, po to aby częściowo wyeliminować wplyw nieokresowości spróbkowanego sygnalu na widmo. Najpowszechniejsza funkcja okna to okno Hanninga. Bez stosowania funkcji okna nigdy nie uzyskasz zerowej amplitudy poza pasmem akustycznym.
  • #14 5024237
    shg
    Poziom 35  
    Jeżeli nagrywasz przez DirectSound, to przeplot kanałów wygląda tak, że bufor danych jest dwa razy większy niż dla trybu mono i próbki ułożone są w nim naprzemiennie, pierwsza jest z lewego kanału, potem z prawego, potem znowu lewy itd.
    Inne interfejsy w systemie Windows układają dane raczej również w ten sposób.
  • Pomocny post
    #15 5024564
    qrdel
    Poziom 28  
    Cytat:
    Co do dopełniania próbek zerami - nie jest mi to potrzebne, gdyż zawsze pobieram liczbę próbek będącą potęgą 2.

    Jeśli piszesz takie rzeczy to znaczy że nie doczytałeś...

    Jeśli chcesz zwiększyć swoje fps to zastosuj overlap, czyli kolejne rekordy do analizy adresowane w numerach próbek: [0, N], [k, k+N], [2k, 2k+N] gdzie k<N.
    Oczywiście nic za darmo, zwiększy to obciążenie procesora N/k razy.
    Ale przy stosowaniu okien, to właściwie konieczność.
  • #16 5028668
    paqman
    Poziom 11  
    Dzięki za podpowiedź związaną z okienkowaniem. Zstosowałem metodę Hanninga. Efekt jest widoczny poniżej:

    Analiza dzwieku - pytania teoretyczneAnaliza dzwieku - pytania teoretyczne
    Przebieg sinusoidalny ok 200Hz.

    Chciałem Was jednak jeszcze troszkę pomęczyć pytaniami:
    1. Po transformacji Fouriera widoczny przebieg jest bardzo nie liniowy (albo z innej perspektywy jest idealnie liniowy). W jaki sposób uzyskać w miarę równomierny rozkład wartości w funkcji częstotliwości (tak aby niskie tony nie były aż tak bardzo uwydatniane)? Ja stosuje do tego mój dobrany metodą prób i błędów wzór:
    c := 2 * power( (1 + 3.3113 -  log10(1+n)),3.5 );
    (3.3113 jest to log10 z 1023) Uzyskałem zbliżony efekt stosując potęgowanie logarytmu. W jaki sposób robi się to w typowych analizatorach widma akustycznego (aby zachować wierność odwzorowania)?

    2. Co do wyciągania wartości kanałów L i R. W jaki sposób są one przeplatane? Próbowałem pobierać próbki parzyste i nieparzyste, jednak nie dało to oczekiwanego efektu.
  • #17 5029870
    qrdel
    Poziom 28  
    Przepraszam, a czy dane były znormalizowane?
    Albo przynajmniej czy odjęto średnią?
    Bo jeśli nie to to co widać to chyba transformata funkcji Hanninga.

    (Uwaga, długo nie myślałem, w literaturze nie sprawdzałem, mogę się mylić.
  • #18 5055865
    lobmerd
    Poziom 12  
    1.Żeby wyższe tony były także uwydatniane powinieneś zmniejszyć szerokość okna - ogólnie im węższe okno tym szerszy listek główny w widmie. Niestety będziesz miał wtedy mniejszą rozróżnialność częstotliwościową, tzn. jeśli sygnał będzie się składał z paru składowych o podobnych częstotliwościach to będą one nieodróżnialne. Ogólnie rozróżnialność częstotliwościowa jest wymienna na amplitudową właśnie przez szerokość okna. Sprawdź jeszcze, bo mogę się mylić.

    2.Na oko wygląda na okno Hanninga :)
REKLAMA