\
elektronika dla wszystkich sklep irtemeiowy wszystko dla elektron ki
niu mamy do czynienia z dźwiękiem audio, którego najwyższa częstotliwość wynosi 20kHz. Ze względów praktycznych i optymalizacyjnych założyłem, że dźwięk może mieć 16kHz. Jest to wartość wystarczająca, bo badane częstotliwości mają 1.. 12kHz. Powstaje pytanie: co się stanie, gdy pojawi się dźwięk o wyższej częstotliwości? Tu Cię zmartwię: nie będzie końca świata, wybuchu, nie pokaże się niebieska tablica ani nic z tych rzeczy. Okaże się, że nasze wyliczenia są po prostu błędne, powstanie tzw. aliasing. Nie chcę Cię przytłaczać masą szczegółów, więc zapamiętaj: gdy źle dobierzesz prędkość próbkowania, to wyliczenia nie będą odzwierciedlać rzeczywistości.
Zawieranie się dźwięku w paśmie poniżej 16kHz gwarantuje konstrukcja toru analogowego - zawiera on filtr gómozaporowy stworzony z elementów RIO,
06.
Teraz jeszcze o wzorze, jest on bardzo prosty: m*f}
Iarnl “ ^
fs- częstotliwość próbkowania, czyli nasze 40kHz,
N - liczba pobranych próbek, na nasze potrzeby będziemy pobierać 40 próbek, m - liczba w zakresie 0..N-1.
Teraz pozostaje odpowiedzieć na pytanie, co to jest fanai i jak to wykorzystać? Wybierzmy m=l i podstawmy wszystko do wzoru.
Wynikiem będzie 1 kHz. Oznacza to, że próbkując z częstotliwością 40kHz i pobierając 40 próbek, możemy zbadać częstotliwość 1kHz.
Podstawiając m=2, otrzymamy 2kHz - czyli możemy
stwierdzić x(O)sin(27c*O*m/N0+x(l)sin(27i* 1 *m/N)+...+x(N-1 )sin[2;i*(27t*(NJ-l )*m/N] także, czy w
X(m )=Ż-k( n )* cos( 2 n* n1* m/N )-Żx( n) i si n( 2nx n* m/Nl)
n—O łi-G
nia do pamięci FLASH należy się rozłączyć (przycisk disconneci w miejscu dotychczasowego connect).
Czemu ten program jest taki niesamowity? Ponieważ tworzy duży wyświetlacz alfanumeryczny i moduł debugujący. Nic wierzysz? W pierwszym wypadku możemy wysyłać dowolne dane do komputera: tekst, zawartość zmiennych... Może to być przydatne np. podczas wyszukiwania błędów: można wysłać zmienne i zastawiać pułapki, aby stwierdzić, gdzie program się zawiesza.
- cyfrowe przetwarzanie sygnału
Być może spotkałeś się z tajemniczym skrótem DSP (lub polskim CPS). Oznacza on, że jakiś sygnał jest przetwarzany na drodze cyfrowej. W pierwszej kolejności zamienia się go na postać cyfrową (przetwornik analogowo-cyfrowy), następnie specjalne algorytmy zmieniają parametry takiego sygnału lub go analizują. W ostatniej fazie zmodyfikowany dźwięk zostaje ponownie zamieniony na postać analogową. Nie wiem, czy zdajesz sobie sprawę, ale z DSP spotykasz się praktycznie codziennie: dekodery i kodery mp3, korektory graficzne (choćby ten wbudowany w WinAMP-a), itp. My zajmiemy się dwoma pierwszymi etapami: zamianą dźwięku na postać cyfrową oraz jego przetwarzaniem. Naszym celem będzie zbadanie, czy w sygnale audio występują składowe o częstotliwościach 1, 6 oraz 12kHz. Jest to czynność dość złożona, dlatego potrzebny był szybki mikrokontroler A RM.
Dźwięk, który chcemy badać, ma postać analogową. Zamiana na postać cyfrową polega na mierzeniu chwilowej wartości dźwięku (wychodzącej z toru analogowego), w odpowiednich odstępach czasu i w odpowiedniej liczebności. Dane te (zwane próbkami) są zapamiętywane w pamięci RAM mikrokontrolera do momentu zebrania wymaganej ich liczby i przetworzenia. Przechowywane są w tablicach. Pobieranie próbek sprowadza się do aruchomienia przetwornika A DC, zaczekania na zakończenie pomiaru, zapamiętania i odczekania określonej ilości czasu, aby utrzymać właściwą częstotliwość próbkowania. Słowo „częstotliwość” w tym przypadku oznacza liczbę próbek w czasie jednej sekundy Próbkowanie z częstotliwością 40kHz sprowadza się do zmierzenia dźwięku czterdzieści tysięcy razy na sekundę. Liczba ta nie jest przypadkowa ani dobrana doświadczalnie, lecz wynika z wzoru i kryterium Nyąuis-ta Treść tego kryterium mówi, że częstotliwość próbkowania musi być minimum dwa razy większa od najwyższej częstotliwości zawartej w sygnale. W praktyce stosuje się jeszcze pewien zapas i najczęściej próbkuje się z prędkością 2,5 razy większą. W urządze
naszym sygnale jest częstotliwość 2kHz. Poszczególne częstotliwości dla m w zakresie 0..N-1 nazywane sąprążkami widma. Czas na podchwytliwe pytania. Po pierwsze, co uzyskuje się dla rn=0? Odpowiedź: zawartość składowej stałej. A dla m>N/2? Tego już nie zdradzę - zmodyfikuj program tak, aby wysyłał poprzez port rs232 wartości poszczególnych prążków i przekonaj się©. Obliczenie wszystkich prążków, tzn. w zakresie 0..N-1 może zająć trochę czasu, gdyż LPC2103 nie dysponuje sprzętowym obliczaniem funkcji sin i cos - to one pochłaniają tak wiele czasu. Spróbuj wyznaczyć np. prążki dla m=0...5 oraz m=34..39. Czy warto obliczać prążki powyżej N/2?
Tylko dla dociekliwych - DFT
Jesteśmy uzbrojeni w podstawową wiedzę
0 próbkowaniu dźwięku - czas na trochę praktyki. Mechanizm określany tajemniczym skrótem DFT wywodzi się z grupy określanej innym tajemniczy symbolem: DSP. Pierwszy oznacza Discrete Fourier Transform, a po polsku: dyskretna transformacja Fouriera. Drugi skrót, DSP, ma polski odpowiednik CPS
1 oznacza ni mniej, ni więcej cyfrowe przetwarzanie sygnałów. DFT pozwoli nam wyznaczyć prążki widma, o których mówiliśmy wyżej. Mechanizm jest opisany nieco bardziej finezyjnym wzorem matematycznym:
Wygląda strasznie? Po pierwsze, mamy tu do czynienia z liczbą zespoloną i dwoma sumowaniami. Równanie można rozpisać
jako. re=Lx(n)*co$(27r*n*ni/N)
n—0
N-l
im-Lx(n)sin(27i*n*m/N)
n-0
Poświęćmy chwilę na omówienie oznaczeń: X(m) - to wartość prążka dla częstotliwości m*fs N
x(n) - n-ta próbka pobrana podczas próbkowania, zapisana w tablicy N - liczba próbek sygnału
N-l
Z - jest to sumowanie dla n zmieniających się n~" w zakresie 0..N-1. czyli inaczej:
To co jest najważniejsze, to tzw. moduł liczby zespolonej. Osoby mające za sobą karierę w technikum będą wiedziały o co chodzi, natomiast niezorientowanym podsunę ostatni już wzór:
X(m) = ^re2+inr.
Po wyliczeniu tego wszystkiego otrzymujemy zawartość sygnału o określonej częstotliwości. Programowa implementacja powyższego algorytmu jest zdecydowanie prostsza (co nie znaczy mniej złożona obliczeniowo) i jest pokazana na listingu I.
Z dyskretnym przekształceniem Fouriera związane jest pewne niekorzystne zjawisko,
Listing I
double dft: :cperatcr () (vclatile double *tab, volatile int n, volatile in: |
//zmianne Foirocnicze volauile double re*Of im=0 ;
//wyznaczenie widma cla rt-tcąo praska for<volatil© int n=0 ; n<N ; n++ (
rf» +• <t-sh4n)) *r:cs <M TVfOPT#n*in/N):
im += <* ftab+n))*sin(M_TWOFI*n*m/N); ł
//zwroc orocul
return sert (re*re+im*iir) ;
Elektronika dla Wszystkich Grudzień 2006 17