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

Podobne dokumenty