Wykorzystanie Szybkiej Transformaty Furiera do strojenia
Transkrypt
Wykorzystanie Szybkiej Transformaty Furiera do strojenia
Wykorzystanie Szybkiej Transformaty Fouriera do strojenia instrumentów gitarowych na urzadzeniach ˛ mobilnych. Kamil Nieradkiewicz Wydział Inżynierii Mechanicznej i Informatyki Kierunek Informatyka, Rok II [email protected] Streszczenie W poniższej pracy pokazano metod˛e wyznaczania dominujacej ˛ cz˛estotliwości w wejściowym sygnale dźwi˛ekowym oraz określenia cz˛estotliwości bazowej na podstawie składowych cz˛estotliwości sygnałów harmonicznych. Zebrane w ten sposób informacje wykorzystano do Strojenia instrumentów gitarowych. 1 Wst˛ep Aplikacja została zaprojektowana z myśla˛ o smartfonach. Wybrano system BADA samsunga, który umożliwia tworzenie aplikacji z użyciem j˛ezyka C++. Program ma za zadanie znalezienie cz˛estotliwości granej struny, porównanie jej z cz˛estotliwościa˛ poszczególnych dźwi˛eków oraz umożliwienie użytkownikowi wyregulowania jej naciagu ˛ w taki sposób, aby dostroić każda˛ strun˛e do pożadanego ˛ dźwi˛eku. 2 Dźwi˛eki i strój gitary Tak jak zdecydowana˛ wi˛ekszość instrumentów, tak i gitar˛e stroi si˛e do dźwi˛eku kamertonu, który jest nazwany dźwi˛ekiem ’a1’ i ma dokładnie 440Hz. Gitary: klasyczna, akustyczna, elektroakustyczna oraz elektryczna posiadaja˛ 6 strun nazwanych (od najniższej) E, A, d, g, h, e1. W standardowym stroju gitary, który b˛edzie tutaj omówiony, dźwi˛ek kamertonu (a1) znajduje si˛e na piatym ˛ progu najcieńszej struny (e1). Strojac ˛ gitar˛e do dźwi˛eku kamertonu, uzyskujemy nastrojona˛ najwyższa˛ strun˛e. Posłuży nam ona jako referencja dla strojenia kolejnych, niższych strun. Na każdej niższej strunie, da si˛e wydobyć dźwi˛ek struny od niej wyższej i dzi˛eki temu jedna nastrojona struna wystarczy do nastrojenia całej gitary. W tym momencie jednak najważniejsze jest, jak konkretne struny (dźwi˛eki strun) odpowiadaja˛ sobie wzajemnie. Do tej pory bowiem określono cz˛estotliwość dźwi˛eku granego na piatym ˛ progu struny e1 (dźwi˛ek a1 - 440Hz). Aby wydobyć ze struny niższej dźwi˛ek struny wyższej od niej należy strun˛e niższa˛ przycisnać ˛ na odpowiednim progu. I tak, aby uzyskać dźwi˛ek czystej struny e1 na strunie h, należy t˛e strun˛e nacisnać ˛ na piatym ˛ progu. [1] Cały strój pokazuje rys. 1 1 Rys.1 Należy teraz zaznajomić si˛e z bardzo potrzebnym poj˛eciem oktawy. Oktawa jest to odległość dzielaca ˛ dźwi˛ek od dźwi˛eku o cz˛estotliwości dwukrotnie wyższej lub niższej. Oktawa dzieli si˛e na 6 tonów czyli 12 półtonów. Co ważne, półton jest odwzorowany jako jeden próg na gitarze. [2] Wiedzac, ˛ że oktawa dzieli dźwi˛eki o cz˛estotliwościach dwukrotnie wyższych lub niższych, oraz, że na gitarze, oktawie odpowiada 12 progów, łatwo policzyć, że √ zmiana cz˛e12 stotliwości o jeden próg to iloczyn badź ˛ iloraz cz˛estotliwości poczatkowej ˛ i 2. Znajac ˛ już zmian˛e cz˛estotliwości na każdym progu gitary oraz ilość progów różnia˛ cych dźwi˛eki na poszczególnych strunach, można w prosty sposób obliczyć cz˛estotliwości każdej z nich. [3] Wynik przedstawia rys. 2. Rys.2 3 Dźwi˛ek a dane cyfrowe Teraz należy spojrzeć na dźwi˛ek z nieco innej perspektywy. Urzadzenia ˛ cyfrowe, a w tym przypadku telefon komórkowy zbieraja˛ i zapisuja˛ sygnał dźwi˛ekowy jako możliwe i proste do zinterpretowania dane. Sygnał dźwi˛ekowy jest próbkowany z cz˛estotliwościa˛ Fs i wartość amplitudy próbkowanego sygnału w każdej próbce jest zapisywana jako dane rzeczywiste (badź ˛ całkowite) w postaci wektora badź ˛ innej reprezentacji jednowymiarowego bufora danych. Co ważne i niestety niekorzystne dla realizacji tego projektu, takie podejście do przechwytywania sygnału daje bezpośredni dost˛ep jedynie do amplitudy sygnału w danym momencie czasu. Aby znaleźć składowe cz˛estotliwości dźwi˛eków należy wykonać na sygnale wejściowym dyskretna˛ transformat˛e Fouriera (DST). DST pozwala na przejście z zapisu amplitudowego do zapisu cz˛estotliwościowego[4] sygnału. Bezpośrednie wykonanie DST wia˛że si˛e jednak z ogromna˛ złożonościa˛ obliczeniowa˛ O (n2 ). 2 4 Szybka transformata Fouriera Szybka Transformata Fouriera (FFT) jest zoptymalizowana, ˛ przyspieszona˛ metoda˛ obliczania Dyskretnej Transformaty Fouriera (DST). Istnieje wiele implementacji metody obliczania FFT. Wynikiem działania Transformaty Fouriera jest wektor liczb zespolonych przechowujacy ˛ w cz˛eści rzeczywistej moc składowej sygnału o danej cz˛estotliwości, natomiast w cz˛eści urojonej jej przesuni˛ecie fazowe. Pomimo, że dla realizacji naszego celu, informacje dotyczace ˛ przesuni˛ecia fazowego sa˛ zupełnie zb˛edne, operacje na liczbach zespolonych sa˛ konieczne do obliczenia Transformaty. W zwiazku ˛ z tym nie było możliwe zrezygnowanie z obliczania przesuni˛eć fazowych oraz operacji na liczbach zespolonych na rzecz szybkości obliczeń. Jedyna˛ przeprowadzona˛ optymalizacja˛ jest zmiana typu danych struktury liczby urojonej na dane pojedyńczej precyzji. Z racji dużej ilości mnożeń, znaczacych ˛ dla wyniku danych, przez liczby mniejsze od 1, dalsze zmniejszanie dokładności z typu zmiennoprzecinkowego pojedyńczej precyzji do typu liczb całkowitych również nie było możliwe. Do obliczenia Szybkiej Transformaty Fouriera został użyty algorytm Cooley-Tukey zaimplementowany przez: LIBROW, wraz z wyżej opisanymi zmianami. [5] Najważniejszym warunkiem wst˛epnym użycia algorytmu Cooley-Tukey jest rozmiar transformaty (rozmiar danych wejściowych) który musi być pot˛ega˛ liczby 2! Pierwszym krokiem algorytmu Cooley-Tookey jest odpowiednie uporzadkowanie ˛ danych. Polega ono na odwróceniu numerów indeksów danych wejściowych zapisanych w systemie binarnym. Przykład obrazuje rys. 3 Rys.3 Podstawowa˛ operacja˛ algorytmu FFT jest tzw. motylek(ang. butterfly). Zasad˛e działania motylka przedstawia rys. 4 Rys.4 3 Dla transformaty o rozmiarze (2n ) należy wykonać n szeregów operacji motylkowych, jak pokazano na rys. 5. Rys.5 5 Aplikacja BADA i obsługa strumienia audio Aplikacja została zaprojektowana i napisana pod system Samsung Bada. Jest to system operacyjny dla smartfonów samsunga. Do testów aplikacji posłużył model Samsung Wave S8500 z systemem BADA 1.2. Środowisko BADA zapewnia wsparcie i obsług˛e podstawowych funkcji takich jak odtwarzanie audio, nagrywanie do pliku badź ˛ nagrywanie do bufora danych. W aplikacji została użyta ostatnia funkcjonalność. Zapewnia ja˛ klasa AudioIn. System umożliwia pełna˛ obsług˛e zdarzeń takich jak np: niski stan baterii, wstrzymanie/wygaszenie ekranu badź ˛ przerwania (np. ROZMOWA PRZYCHODZACA). ˛ Obsług˛e przerwania AudioIn przez połaczenie ˛ przychodzace ˛ pokazuje rys. 6 Rys.6 [6] 4 W trakcie inicjalizacji AudioIn, przed rozpocz˛eciem nagrywania, musza˛ zostać zdefiniowane parametry nagrania takie jak. • Fs - cz˛estotliwość próbkowania ( 8000 Hz 48000 Hz ) • Typ próbki : 8 bit bez znaku / 16 bit ze znakiem • Ilość kanałów: 1-mono, 2-stereo • Urzadzenie ˛ wejściowe: mikrofon Ponadto, dla funkcjonalności aplikacji, kluczowa˛ rol˛e odgrywaja˛ takie parametry jak: • Wielkość ramki (bufora danych) • Wielkość transformaty Należy uzmysłowić sobie jaki wpływ maja˛ na wydajność i dokładność poszczególne parametry. Aby uzyskać satysfakcjonujacy ˛ rezultat należy znaleźć kompromis pomi˛edzy dokładnościa˛ wyznaczanej cz˛estotliwości a czasem analizy sygnału. Biorac ˛ pod uwag˛e ograniczone możliwości obliczeniowe telefonu komórkowego, bardzo ważne jest aby starannie dobrać parametry nagrywania. Kluczowymi dla końcowego efektu wielkościami charakteryzujacymi ˛ analiz˛e naszego sygnału jest jej dokładność oraz czas uzyskania jednego wyniku. Dokładność analizy można określić na podstawie kroku cz˛estotliwości różniacego ˛ kolejne próbki sygnału wynikowego transformaty. ∆Freq = t≤2* Fs FFT size (1) Fs Bu f f orsize (2) Czas otrzymania wyniku jest mniejszy badź ˛ równy dwukrotności czasu potrzebnego na zapełnienie jednego bufora danych. Jest to spowodowane tym, że w trakcie nagrywania (zapełniania bufora) nie możemy zaczać ˛ go jeszcze analizować. Natomiast czas analizy bufora nie może być dłuższy od czasu nagrywania bufora kolejnego, co spowodowałoby rosnac ˛ a˛ w nieskończoność ilość danych do analizy i w efekcie zawieszenie urzadzenia. ˛ Kluczowym wi˛ec dla nas czasem dost˛epnym na analiz˛e jednego bufora b˛edzie czas: T max = Fs Bu f f orsize (3) Po dużej ilości prób i optymalizacji, udało si˛e znaleźć wartości parametrów nagrywania oraz transformaty, które spełniły oczekiwania czasowe i dokładnościowe: • Fs : 11025 • Wielkość ramki : 2048 • Wielkość transformaty : 16384 • Typ próbki : 8 bit bez znaku • Ilość kanałów: 1-mono Co daje: • ∆Freq = 0,672 Hz • T max = 0,185 sec 5 6 Cz˛estotliwość bazowa Znalezienie maksymalnej wartości cz˛estotliwości składowych sygnału nie jest wystarczajace ˛ do określenia cz˛estotliwości granego dźwi˛eku (szarpni˛etej struny). Dźwi˛eki harmoniczne a w szczególności sygnały instrumentów strunowych cechuje właściwość niezmiernie utrudniajaca ˛ rozpoznanie strojonej struny. Problemem jest interpretacja wyników analizy sygnału, gdyż zagrana cz˛estotliwość może wystapić ˛ ’wielokrotnie’ w wynikach analizy. Tzn. grajac ˛ dźwi˛ek o cz˛estotliwości 110 Hz w wyniku analizy możemy zobaczyć składowe harmoniczne o cz˛estotliwościach równych wielokrotności 110 Hz czyli: 110Hz, 220Hz, 330Hz itd. Co jeszcze ważniejsze cz˛estotliwość bazowa wcale nie musi pojawić si˛e w wyniku analizowanego sygnału, jest to tzw. paradoks ’Missing Fundamental’[7]. Zjawisko to jest powszechnie wykorzystywane i pozwala m.in. na granie tonów odbieranych przez słuchacza za niskie przez głośniki średniotonowe. Przypuśćmy, że słuchajac ˛ zwykłego radia grana jest piosenka z linia˛ melodyczna˛ zawierajac ˛ a˛ dźwi˛eki basowe o cz˛estotliwości 80 Hz. Radio nie jest wyposażone w głośnik niskotonowy a najniższa˛ możliwa˛ do zagrania przez nie cz˛estotliwościa˛ jest 110Hz. Aby poradzić sobie z odtworzeniem niższych tonów radio spreparuje sygnał i zagra wielokrotności jego cz˛estotliwości tj: 160Hz, 240Hz, 320Hz, 400Hz, ... Pozwoli to na zinterpretowanie przez słuchacza tak zagranego dźwi˛eku jako dźwi˛ek o cz˛estotliwości 80Hz mimo, że nie został on tak na prawd˛e zagrany. Odbiorca rozróżni ten dźwi˛ek i uzna za niższy od dźwi˛eku np. 120 Hz.[8] Jednak to, co pomaga producentom niższej klasy sprz˛etu audio, zdecydowanie przeszkadza przy badaniu cz˛estotliwości bazowej sygnału. Biorac ˛ pod uwag˛e, że aplikacja musi sprawdzić si˛e w warunkach rzeczywistych, nieidealnych, nawet wielokrotności cz˛estotliwości bazowej moga˛ pojawiać si˛e nieco nieregularnie. 7 Algorytm określajacy ˛ cz˛estotliwość bazowa˛ Program implementuje autorski algorytm majacy ˛ za zadanie określić cz˛estotliwość bazowa˛ analizowanego sygnału na podstawie wyróżnionych, dominujacych ˛ cz˛estotliwości składowych. W uproszczeniu znajduje on kolejne znaczace ˛ (o dużej mocy) cz˛estotliwości analizowanego sygnału oraz sprawdza ile z nich jest wielokrotnościa˛ którejś z poprzednich znalezionych cz˛estotliwości. Na wypadek braku cz˛estotliwości bazowej sprawdza on również wielokrotności połowy cz˛estotliwości pierwszego, drugiego lub obu pierwszych cz˛estotliwości (w zależności od ilości znaczacych ˛ cz˛estotliwości znalezionych w analizowanym sygnale). Cz˛estotliwość która ma najwi˛ecej wielokrotności w analizowanym sygnale zostaje uznana za bazowa.˛ Jednak w przypadku analizy wielokrotności połowy pierwszej/drugiej znalezionej cz˛estotliwości(która nie ma odzwierciedlenia w wynikach transformaty jako cz˛estotliwość składowa) , ilość ta musi przekraczać ilość znalezionych wielokrotności sygnału, który został znaleziony jako cz˛estotliwość składowa o co najmniej 2. 6 Rys.7 Na rys.7 widać graf przedstawiajacy ˛ moc składowych cz˛estotliwości sygnału analizowanego. Można dostrzec 4 wierzchołki, z których najwyższy jest drugi a ostatni leży poniżej poziomej, czerwonej linii (czyli poniżej przyj˛etego poziomu szumu). Analizujac ˛ ten sygnał, algorytm znajdzie i zapisze cz˛estotliwości 3 wierzchołków. Widać wyraźnie, że sa˛ one rozmieszczone w równych odst˛epach (poczatek ˛ wykresu nie zaczyna si˛e od 0Hz lecz ok 60Hz). Zdecydowanie dominujac ˛ a˛ cz˛estotliwościa˛ w analizowanym sygnale jest cz˛estotliwość drugiego wierzchołka. Jednak sprawdzajac ˛ wielokrotności znalezionych cz˛estotliwości program zidentyfikuje poprawnie cz˛estotliwość wierzchołka pierwszego jako cz˛estotliwość bazowa.˛ Jest to możliwe, dzi˛eki zliczaniu i porównywaniu ilości wielokrotności cz˛estotliwości kandydujacego ˛ wierzchołka. Przeprowadzona również zostanie analiza cz˛estotliwości b˛edacej ˛ połowa˛ cz˛estotliwości pierwszego wierzchołka. I tak, o ile wierzchołek pierwszy ma 2 wielokrotności (wierzchołki 2 i 3), tak połowa jego cz˛estotliwości miałaby 3 wielokrotności (wierzchołki 1, 2 oraz 3). Jednak dzi˛eki dodatkowemu warunkowi, opisanemu wyżej nie zostanie ona rozpoznana jako cz˛estotliwość bazowa. Ponadto, program poddaje analizie dane z zakresu 60HZ-460Hz, dzi˛eki czemu pomija zazwyczaj duże szumy na niskich cz˛estotliwościach i umożliwia z zadawalajacym ˛ marginesem stroić najwyższe struny gitary. Dodatkowym zabezpieczeniem jest rezygnacja z analizy sygnału, jeżeli jego moc nie b˛edzie wystarczajaca. ˛ Pozwala to na zaoszcz˛edzenie obcia˛żenia procesora i zwi˛ekszenie wydajności energetycznej urzadzenia, ˛ poprzez zaniechanie analizy sygnału w momentach, kiedy żadna ze strun nie wydaje dźwi˛eku. Kolejnymi istotnymi mechanizmami, pozwalajacymi ˛ na dokładniejsze strojenie instrumentu sa: ˛ • wykorzystanie pojawiajacych ˛ si˛e wielokrotności cz˛estotliwości do określenia cz˛estotliwości bazowej poprzez analiz˛e nie tylko wierzchołka cz˛estotliwości bazowej ale również różnic cz˛estotliwości pomi˛edzy kolejnymi wierzchołkami. 7 • zachowywanie poprzednich wyników cz˛estotliwości i wyświetlanie wyniku średniego z 4 ostatnich prób. 8 Podsumowanie Dzi˛eki rosnacym ˛ możliwościom, pr˛eżnie rozwijajacego ˛ si˛e przemysłu smartfonów i telefonów komórkowych. Oraz dzi˛eki dużemu potencjałowi obliczeniowemu dzisiejszych urzadzeń ˛ tego typu, aplikacja na telefony z systemem BADA może z powodzeniem pozwolić na strojenie gitary z zadawalajac ˛ a˛ precyzja.˛ Umożliwia to wykorzystanie szybkiej metody obliczania Dyskretnej Transformaty Fouriera oraz złożona analiza otrzymanych wyników. Nie można jednak uznać, że dorównuje ona profesjonalnym stroikom muzycznym. Mimo tego, jest to dobra alternatywa dla osób które w przeciwieństwie do stroika, telefon nosza˛ przy sobie zawsze. Literatura [1] http://gitaradlapoczatkujacych.pl/metody-strojenia-gitary.html [2] http://gitaradlapoczatkujacych.pl/krotka-historia-poltonow.html [3] http://gitaradlapoczatkujacych.pl/zakres-czestotliwosci.html [4] http://elektronikab2b.pl/technika/3096-dyskretna-transformata-fouriera [5] http://www.librow.com/articles/article-10 [6] http://developer.bada.com/help/index.jsp?topic=/com.osp.devguide.help/ [7] http://www.hydrogenaudio.org/forums/lofiversion/index.php/t40690.html [8] http://www.ihear.com/Pitch/paradoxical.html 8