8 bitów audio 16 bit

To mój problem hobby "weekend".

mam kilka ulubionych однотактных sygnałów od PZU klasycznego syntezatora.

To 8-bitowe próbki (256 możliwych wartości).

bo tylko 8 bitów, poziom szumów jest dość wysoki. Jest to związane z błędem kwantyzacji. Błąd kwantyzacji jest dość dziwna. To trochę psuje wszystkie częstotliwości.

chciałbym wziąć te cykle i ich "czyste" 16-bitowymi wersjami. (Tak, Jestem wiem, że ludzie lubią brudne wersji, więc pozwolę użytkownikowi interpolacji między brudnymi i czystymi w dowolnym stopniu.)

brzmi To niemożliwe, prawda, bo straciłem niskie 8 bitów na zawsze, prawda? Ale to było w mojej głowie jakiś czas i jestem pewien, że mogę to zrobić.

pamiętaj, że to однотактные sygnały, które po prostu są powtarzane w kółko do odtwarzania, więc jest to szczególny przypadek. (Oczywiście, syntezator robi wszystko, aby zrób dźwięk interesujące, w tym koperty, modulacji, filtry efektu crossfade, itp.)

dla każdej próbki bajty ja naprawdę wiem, że jest to jeden z 256 wartości 16-bitowej wersji. (Wyobraź sobie proces odwrotny, w którym wartość 16-bitowa obcięta lub zaokrąglone do 8 bitów.)

moja funkcja oceny próbuje uzyskać minimalny poziom hałasu. Powinienem być w stanie sądzić o tym z jednym lub kilkoma FFT.

wyczerpujące testy, prawdopodobnie zajmie na zawsze, żebym mógł zrobić pierwszy przejście z niższej rozdzielczości. Lub po prostu przez przypadek kliknąłem przypadkowo wybrane wartości (w promieniu znanych wartości, które doprowadziłyby ten sam 8-bitową wersję) i robię ocenę i zapisuję bardziej czystej wersji? Czy mogę coś zrobić szybciej? Czy istnieje niebezpieczeństwo dostania się w lokalne minima, gdy w przestrzeni wyszukiwania mogą być najlepsze minima? Zdarzało się to i w innych podobnych sytuacjach.

czy są jakieś początkowe domysły, które mogę zrobić, może być, patrząc na sąsiednie wartości?


Edit: kilka osób wskazało, że problem jest łatwiejsze, jeśli usunę wymóg, aby nowy kształt fali była wzorem oryginału. To prawda. Właściwie, jeśli ja po prostu szukam bardziej czyste dźwięki, rozwiązanie trywialne.


idąc z podejściem w swoim pytaniu, ja bym zaproponował zbadanie algorytmów wznoszenia się na wzgórza i tym podobne.

http://en.wikipedia.org/wiki/Hill_climbing ma więcej informacji o tym, i boks ma linki do innych algorytmów, które mogą być bardziej odpowiednie.

AI podobny do alchemii - nigdy nie dokonywali ostateczny cel, ale wiele dobrego wyszło na drodze.


można umieścić istniejący 8-bitowe próbki w bayt wyższego rzędu nowego 16-bitowe próbki, a następnie użyć bajtów niższego rzędu dla liniowo interpolowane niektóre nowe 16-bitowe punkty danych pomiędzy każdym oryginalny 8-bitowym wzorem.

To w istocie łączy 16-bitową linię prostą pomiędzy każdym z twoich oryginalnych 8-bitowych próbek, stosując kilka nowych wzorów. To brzmiało o wiele ciszej, niż to, co masz teraz, co jest nagłe 8-bitowym skokiem między nimi oryginalne próbki.

możesz też spróbować zastosować niektóre filtrowanie niskich częstotliwości.


no Cóż, spodziewałem się pewne filtracji FIR (IIR, jeśli naprawdę potrzebujesz cykle obróbki, ale FIR może dać najlepsze rezultaty bez niestabilności), aby usunąć szum. Trzeba grać z nim, aby uzyskać efekt, który chcesz, ale główny problem polega wygładzania ostrych krawędzi w audio, utworzonym poprzez pobieranie go w 8-bitowych rozdzielczościach. Ja bym dał szerokie narodziny środkowej częstotliwości dźwięku i zrobił filtr dolnoprzepustowy, a następnie odsłuchałem, aby upewnić się, że nie zrobił go "płaskim" za pomocą filtr wybrałem.

To jest trudne, choć jest tylko tak wiele, że można zrobić, dolne 8 bitów utracone, najlepsze, co możesz zrobić, to przybliżyć.

prawie niemożliwe, aby pozbyć się hałasu, który wygląda jak twój sygnał. Jeśli zaczniesz wyrywać materiał w swoim paśmie, on wyprowadzi sygnał zainteresowania.

dla апсэмплинга, tak jak już korzystasz z FFT, można dodać zera na koniec sygnału w dziedzinie częstotliwości i zrobić odwrotnej FFT. Temu doskonale zachowuje frequecy i dane fazy początkowo sygnału, mimo że rozprzestrzenia taką samą energię nad więcej próbek. Jeśli go przenieść 8 bitów, aby być 16-bitowe próbki, to nie będzie zbyt wielkim problemem. Ale zazwyczaj пинаю jego wartością całkowitą zysku przed wykonaniem konwersji.

Pete

edytuj: Komentarze są trochę długie, więc przejdę do odpowiedzi.

szczyty w wyjściu FFT harmoniczne zrosty powstałe w przeszłości w quantitization. Jestem skłonny myśleć o nich inaczej, niż hałasu. Można się wahać, jak ktoś wspomniał, i wyeliminować amplitudy harmonicznych wybuchów i wygładzić hałasu podłoga, ale tracisz cały sygnał na hałas na płaskiej części hałasu podłogi. Co do FFT. Kiedy интерполируете za pomocą tej metody, zachowuje tę samą energię i rozciąga się na większą liczbę próbek, co zmniejsza amplitudę. Dlatego, zanim zrobisz inaczej, daj znak, więcej energii mnożenie przez współczynnik wzmocnienia.

czy są sygnały proste / złożone синусоидами lub mają ostre krawędzie? czyli trójkąt prostokątny, itp. zakładam, że mają ciągłość od cyklu do cyklu, to jest naprawdę? Jeśli tak, możesz także zwiększyć rozdzielczość FFT do bardziej dokładnych częstotliwości, zwiększając ilość cykli kształtu fali, podawanych na FFT. Jeśli możesz dokładnie określić korzystanie z częstotliwości, przy założeniu, że kilka dyskretny, można w pełni odtworzyć potencjalny sygnał.

16 bitów / 8 bitów poprzez obcięcie będzie produkować wyniki, które nie są zgodne z oryginałem. (Co utrudnia wyszukiwanie optymalnej odpowiedzi. Zazwyczaj można produkować sygnał stały punkt, starając się "dostać najbliższym zbieg okoliczności", co oznacza zaokrąglenie do najbliższej liczby (транкинг-to operacja podłogi). Najprawdopodobniej właśnie tak zostały one stworzone. Dodawanie 0.5 (w tym przypadku 0.5 równa 128) , a następnie транкинг wyjścia pozwala uzyskać bardziej dokładne wyniki. Jeśli to nie przeszkadza, to dobrze, ale to na pewno będzie miało negatywny wpływ na dokładność.

aktualizacja: Dlaczego? Ponieważ celem próbkowania sygnału polega na tym, aby jak najbliżej odtworzyć sygnał. Jeśli próg jest ustawiony źle na próbce, wszystko, co jesteś w błędzie, to jedna strona sygnału, a nie dobrze rozproszone i центрированная około zera. W takich systemach zwykle starają się zmaksymalizować wykorzystanie dostępnego zakresu dynamicznego, zwłaszcza, jeśli masz niską rozdzielczość, takie jak 8-bitowy przetwornik ADC.

ograniczone wersji grupy? Jeśli są filtrowane na różnych częstotliwościach, podejrzewam, że to powinno pozwolić ci odtwarzać jeden i ten sam dźwięk bez zniekształceń, gdy jesteś zbyt daleko odeszli od drugiej odmiany. Jak mipmapping w grafice. Podejrzewam, że jest to jeden i ten sam sygnał z różnymi filtrami wygładzania, to może być przydatne podczas odtwarzania oryginału. Powinny one być takie same podstawowym sygnałem z różnymi stosowane zestawienia.


może być proste podejście, wykorzystujący częstotliwość sygnałów. A co, jeśli:

  1. zrób 16-bitową kształt fali, gdzie wysokie bajty są formą fali, a niskie wartości są równe zeru - nazwijmy ją x[n].

  2. oblicz dyskretna transformacja Fouriera x[n] = X[w].

  3. zrobić sygnał Y[w] = (dBMag (X[w]) > próg) ? X[w]: 0, gdzie dBMag (k) = 10 * log10 (real (k)^2 + urojona (k)^2) i próg możliwe, 40 db, oparty na 8 bitach, stanowiących około dynamice 48 db, pozwalające na ~1,5 bitów szumu.

  4. odwrotna konwersja Y[w], aby uzyskać y[n], nowy 16-bitowy sygnał.

  5. jeżeli y[n] nie brzmi dobrze, wymieszać go z bardzo niskim poziomem hałasu.

Uwagi:

A. Ta metoda działa tylko w oryginalnych formach fale dokładnie okresowe!

B. Krok 5 może być zastąpiony instalacją " 0" wartości szumu losowego w Y[w] w Kroku 3, będziesz musiał trochę poeksperymentować, aby zobaczyć, co działa najlepiej.

To wydaje się łatwiejsze (przynajmniej dla mnie), niż podejście optymalizacji. Ale kadłubową y[n], prawdopodobnie nie będzie równy swoich pierwotnych form fale. Nie jestem pewien, jak ważne jest to ograniczenie. Czuję, że ten podejście będzie generować fale, które dobrze brzmią.