• Nie Znaleziono Wyników

Poznańskie Warsztaty Telekomunikacyjne Poznań 9 - 10 grudnia 2004

N/A
N/A
Protected

Academic year: 2021

Share "Poznańskie Warsztaty Telekomunikacyjne Poznań 9 - 10 grudnia 2004"

Copied!
6
0
0

Pełen tekst

(1)

2004

Poznańskie Warsztaty Telekomunikacyjne Poznań 9 - 10 grudnia 2004

Piotr Wołowik

Politechnika Poznańska

Instytut Elektroniki i Telekomunikacji ul. Piotrowo 3A, 60-965 Poznań e-mail: piotrw@et.put.poznan.pl

DYDAKTYKA ALGORYTMÓW CYFROWEGO PRZETWARZANIA SYGNAŁÓW W OPARCIU O ICH PRAKTYCZNE IMPLEMENTACJE NA ZMIENNOPRZECINKOWYCH PROCESORACH SYGNAŁOWYCH

SHARC™ FIRMY ANALOG DEVICES

Streszczenie: W artykule podjęto problematykę kształcenia w dziedzinie algorytmów cyfrowego przetwarzania sygnałów. We wprowadzeniu omówiono problemy dydaktyczne z jakimi najczęściej można się w takim przypadku spotkać.

Następnie, w celu demonstracji omawianego w temacie zagadnienia - przedstawiono sposób przykładowego projektu filtru dolnoprzepustowego FIR, zaimplementowanego w sposób praktyczny na procesorze sygnałowym ADSP-21160 (rodzina procesorów SHARC).

1. WPROWADZENIE

Prowadząc zajęcia ze studentami kierunków technicznych, często pojawia się problem zainteresowania ich omawianą teoretyczną tematyką cyfrowego przetwarzania sygnałów. Tematyka ta, ze względu na swój czysto teoretyczny charakter, operująca trudnym rachunkiem matematycznym, nie stanowi dla studentów interesującej alternatywy względem przyszłego wybory specjalności z nią związanych.

Współcześnie - algorytmy związane z cyfrowym przetwarzaniem sygnałów – zdominowały prawie wszystkie dziedziny obróbki i przesyłania sygnałów z jakimi mamy do czynienia w telekomunikacji.

Ten ich rozwój i obecne trendy, staja się przedmiotem różnych nowych badań i doświadczeń.

Jeżeli chodzi o ciągłe metody ich optymalizacji względem coraz to nowych dziedzin ich zastosowania, nie istnieje tutaj praktycznie żadna wyznaczona ich teoretyczna granica.

O ile w niektórych dziedzinach telekomunikacji, dotyczących choćby techniki fal elektromagnetycznych, szybkość rozwoju jest hamowana względami czysto fizycznych ograniczeń (związanych choćby z miniaturyzacją anten) – to w przypadku optymalizacji i ciągłego udoskonalania algorytmów cyfrowego przetwarzania sygnałów – dziedzina ta wydaje się posiadać bardzo dużą przyszłość. Jedyne jej ograniczenie stanowić może pomysłowość ludzka, a ta jak wiadomo nie posiada żadnych barier.

Odpowiednia cyfrowa obróbka sygnału, a z nią mamy do czynienia jeżeli chodzi np. o techniki kompresji - mogła by znacznie „zrekompensować” fizyczne ograniczenia dziedzin, gdzie do tej pory występują jeszcze jej

„analogowe” odpowiedniki. Oczywiście nic nie zastąpi

transmisji radiowej z użyciem fal elektromagnetycznych – ale z wykorzystaniem odpowiednich i coraz to lepszych algorytmów cyfrowej obróbki (kompresji) sygnału – transmisja ta, w określonym paśmie fizycznym, może być znacznie bardziej efektywna.

Ze względu na wspomniane powyżej perspektywy rozwoju algorytmów cyfrowego przetwarzania sygnałów – w dziedzinie kształcenia, pojawia się problem odpowiedniego ukierunkowania studentów na chęć dalszej (również samodzielnej) edukacji w tej dziedzinie.

Jak zostało już wspomniane, trudny materiał teoretyczny i związany z tym aparat matematyczny – nie działają w sposób „motywujący” na studentów, którzy w programie nauczania studiów z tą dziedzina maja do czynienia . Receptą na to byłoby ukierunkowanie kształcenia bardziej na aspekty praktyczne stosowania i optymalnego wykorzystania już istniejących algorytmów, dostosowanych do konkretnych rozwiązań sprzętowych, tj. procesorów sygnałowych. Z kolei wiedza ta, mająca swoje podłoże praktyczne, mogłaby dopiero stanowić punkt wyjścia dla osób nią zainteresowanych, jeżeli chodzi o jej teoretyczno- matematyczne zrozumienie.

W celu demonstracji omawianego w temacie zagadnienia zademonstrowany zostanie projekt filtru dolnoprzepustowego FIR, który następnie zostanie w sposób praktyczny zaimplementowany na procesorze sygnałowym ADSP-21160 (rodzina procesorów SHARC).

Rozważany procesor znajduje się na płytce Starter-Kit’a, która oprócz procesora sygnałowego, wyposażona jest w szereg urządzeń umożliwiających jego optymalną, do zastosowań edukacyjno-badawczych, eksploatację.

2. FILTRY FIR

Filtry o skończonej odpowiedzi impulsowej FIR (ang. Finite Impulse Response) są jednymi z nielicznych układów, z jakimi najczęściej mamy do czynienia w przypadku aspektów cyfrowego przetwarzania sygnałów.

Konstruowane są one w różnych konfiguracjach budowy, np.: strukturach kratowych, polifazowych itp.

Stosowność użycia tych struktur zdeterminowana jest

(2)

przez specyfikę zagadnienia, w którym nasz filtr jest rozważany.

Schemat blokowy najprostszego filtru FIR przedstawia poniższy rysunek.

Rys. 1. Schemat blokowy filtru FIR.

Równanie różnicowe opisujące strukturę tego filtru wyraża następująca formuła [5]:

[ ] n h x [ ] n h x [ ] n h N x [ n N ]

y = 0 + 1 − 1 + ... + − (1)

Celem zagadnienia projektowego względem założonych parametrów filtracji jest wyznaczenie odpowiednich wartości współczynników „h”. Ilość tych współczynników determinuje rząd filtru - a tym samym złożoność obliczeniową algorytmu, który go na procesorze sygnałowym programowo implementuje.

Ze tego względu zależy nam na osiągnięciu możliwie jak najniższej liczby współczynników „h”. Jakkolwiek kompromis jaki w tym przypadku decydujemy się osiągnąć, wpływa na pogorszenie odpowiednich parametrów naszej charakterystyki częstotliwościowej.

Parametrami tymi są stromość charakterystyki przejściowej między pasmami przepustowym i zaporowym oraz dopuszczalny poziom zafalowań we wspomnianych pasmach.

Dzięki zastosowaniu cyfrowych realizacji filtrów FIR, w dziedzinie częstotliwości możemy uzyskać charakterystykę amplitudową o dowolnym pożądanym kształcie. Kształt ten determinuje możliwość osiągnięcia zaawansowanych sposobów filtracji i kształtowania sygnału w dziedzinie widma.

Przykład takiej charakterystyki przedstawia rysunek 2.

Rys. 2. Charakterystyka amplitudowa i fazowa możliwa do osiągnięcia dzięki zastosowaniu struktury cyfrowej

filtru FIR.

Najważniejszą własnością jaką oferuje rozważana struktura FIR jest osiągnięcie, w użytecznym paśmie przepustowym, całkowicie liniowej charakterystyki fazowej (odpowiedź impulsowa filtru musi być w takim przypadku symetryczna). Właściwości tej w pełni nigdy nie zaoferują układy analogowe ani struktury cyfrowych filtrów IIR.

3. PROJEKT FILTRU FIR

Projekt dolnoprzepustowego filtru FIR metodą Parks’a – McClellan’a o następujących parametrach:

koniec pasma przepustowego 3500Hz, początek pasma zaporowego 3800Hz, poziom zafalowana charakterystyki w paśmie przepustowy 0.01, poziom zafalowana w paśmie zaporowym 0.1. Częstotliwość próbkowania 48000Hz.

Algorytm i kod programu stworzony w środowisku MATLAB posiada następująca postać [4]:

Fs=48000; fp=3500; fz=3800;

[n,fo,mo,w] = remezord( [fp fz], [1 0], [0.01 0.1], Fs );

h = remez(n,fo,mo,w);

[H,N]=freqz(h,1,1024,Fs); P=unwrap(angle(H));

subplot(2,1,1);

plot(N,abs(H)); grid on;

xlabel('f'); ylabel('|H(f)|');

subplot(2,1,2);

plot(N,P*180/pi); grid on;

xlabel('f'); ylabel('|Fi(f)|');

Procedura ta wylicza 217 rzeczywistych, symetrycznych współczynników (warunek liniowości fazy a tym samym stałości opóźnienia grupowego sygnału) filtru FIR.

Właściwości widmowe zaprojektowanego filtru przedstawia rysunek 3.

.

Rys. 3. Charakterystyka amplitudowa i fazowa zaprojektowanego filtru dolnoprzepustowego FIR. W

zakresie użytecznego pasma przepustowego do czynienia mamy z wyraźną liniową charakterystykę

fazową.

Parametry filtru zostały tak dobrane, aby mógł on

pełnić, w przypadku przetwarzania widma sygnału

(3)

mowy, role filtru anty-aliasingowego. Na widmo to w tym zakresie (dla sygnału mowy do 3500Hz), przypada maksimum jego składowych gęstości widmowej mocy.

Częstotliwość próbkowania - 48000Hz, została dobrana względem maksymalnej częstotliwości pracy (próbkowania) kodera AD1881 - z jakim mamy do czynienia w przypadku Starter-Kita’a z rozważanym procesorem sygnałowym.

4. IMPEMENTACJA FIR W JĘZYKU WYSOKIEGO POZIOMU C++

Rozważany w naszym zagadnieniu procesor ADSP-21160 znajdujący się na płytce Starter-Kit’a, został wyposażony w specyficzne narzędzie programistyczne. Narzędziem tym jest produkt pod nazwą „VisualDSP”. Nazwa ta stanowi własność firmy Analog Devices.

Produkt ten został pomyślany w ten sposób, aby zapewnić użytkownikowi łatwość programowego dostępu - zarówno do samego procesora - jak i jego urządzeń peryferyjnych. Ideą było stworzenie możliwości pisania kodu w języku wysokiego poziomu jakim jest język C++.

Autorom udało się osiągnąć swój cel, aczkolwiek - co było efektem spodziewanym - tworzony przy jego pomocy kod programu jest nieoptymalny. Nieoptymalny w rozumieniu nie wykorzystania pełnych możliwości oferowanych przez procesory sygnałowego rodziny SHARC. Możliwości te dostępne są dopiero w przypadku tworzenia kodu w języku niskiego poziomu i zostaną omówione w dalszej części artykułu.

Stworzony przy pomocy „VisualDSP” kod wysokiego poziomu, nie nadaje się do pracy w trybie rzeczywistym, a jak wiadomo tryb takiej pracy - ma największe znaczenie w przypadku algorytmów cyfrowego przetwarzania sygnałów.

Poniżej znajduje się kod dokonujący implementacji zaprojektowanego przez nas filtru w języku C++, który został stworzony i uruchomiony w środowisku pracy

„VisualDSP”.

Kod ten programowo implementuje strukturę FIR, wykorzystując programową realizację tzw. buforów kołowych

Próbki z wejścia dostępne są pod odpowiednimi zmiennymi Right_Channel_In oraz Left_Channel_In.

Algorytm dokonuje ich filtracji ze współczynnikami filtru FIR umieszczonymi w tablicy H. Ze względu na rozpatrywane wejście monofoniczne mikrofonu, filtrowany jest tylko lewy kanał (Left_Channel_In).

Wyniki filtracji kolejnych próbek wyjściowych dostępne są w odpowiednich zmiennych Right_Channel_Out oraz Left_Channel_Out.

extern float Right_Channel_In;

extern float Right_Channel_Out;

extern float Left_Channel_In;

extern float Left_Channel_Out;

#define BL 217 const float H[BL] = {

//wyliczone współczynniki (217)

};

float probki[BL]; float out;

int ActSInd=BL-1; int coff_ind=0; int i;

void Process_Samples(void) {

i=ActSInd; out=0; coff_ind=0;

probki[i]=Left_Channel_In;

for (;coff_ind<BL;coff_ind++) {

out+=H[coff_ind]*probki[i++];

if (i>(BL-1)) i=0;

}

if ((--ActSInd)<0) ActSInd=BL-1;

Left_Channel_Out = out;

Right_Channel_Out = out;

}

Zastosowana procedura, ze względu na dużą jak dla niej złożoność obliczeniową, nie nadawała się do użycia w trybie czasu rzeczywistym. Dysponowaliśmy tutaj tablicą 217 współczynników filtru, co okazało się dla tak stworzonego algorytmu ilością zbyt dużą.

Decydująca tutaj była ilość mnożeń, jakie są przeprowadzane wewnątrz naszego algorytmu (w odstępach czasu równych kolejnym pobranym próbkom danych tj. 48000 razy w ciągu jednej sekundy).

Konstrukcja algorytmu mimo swojej prostoty, nie nadążała z obliczeniami. Powód stanowiła długość i nieoptymalność kodu jaki został dla niej wygenerowany w języku niskiego poziomu poprzez narzędzie

„VisualDSP”.

Procedura ta w rzeczywistym trybie pracy (przy częstotliwości próbkowania 48000Hz), radziła sobie z zaledwie ok. 30 współczynnikami.

5. WŁAŚCIWOŚCI PROCESORÓW SYGNAŁOWYCH

Koncepcja procesorów dedykowanych czysto do zastosowań związanych z przetwarzaniem sygnałów, narodziła się w momencie, kiedy zorientowano się, że dotychczasowe rozwiązania architektoniczne nie są w stanie optymalnie sprostać rosnącym wymaganiom obliczeniowym.

Oferowana architektura procesora z jaką wtedy miano do czynienia, tzw. architektura von Neumann’a (rysunek 4), bazowała na koncepcji centralnej jednostki obliczeniowej – CPU, komunikującej się ze swoją pamięcią przez dwie magistrale: danych i adresową.

Pamięć ta przechowywała zarówno sam program jak i odpowiednie dane jemu potrzebne.

Taka konstrukcja nie była optymalna ze względu na

nieefektywne dzielenie magistral pomiędzy adresowanie

przestrzeni danych a przestrzeniu programu.

(4)

Rys. 4. Architektura „von Neumann’a” (pojedyncza pamięć). Na tym rysunku i na wszystkich pozostałych

podwójna strzałka oznacza magistralę danych, pojedyncza magistralę adresową.

Ze względu na tą nieefektywność i tracenie czasu związanego z przełączaniem „kontekstu” przez jednostkę CPU, zaproponowano inne podejście do koncepcji architektonicznej budowy procesorów sygnałowych.

Narodziła się tzw. architektura „Harwardzka” (rysunek 5).

Ideę w tym przypadku wyznaczał postulat, aby program implementujący dany algorytm znajdował się w pamięci programu, a odpowiedniej wartości dane i współczynniki, na których operował arytmetycznie, w pamięci danych. Obie te pamięci miały pracować i być adresowane niezależnie od siebie.

Rozdzielenie pamięci danych od pamięci programu umożliwiło jednoczesne ich adresowane. Jednostka CPU mogła dokonywać obliczeń korzystając z danych równolegle przez nie oferowanych. Możliwe stało się jednoczesne pobieranie przez procesor instrukcji do wykonania podczas zapisu lub odczytu do pamięci danych.

Zastosowanie takiej architektury i nowych wyznaczonych przez nie trendów okazało się dużym sukcesem. Znalazło to swoje odzwierciedlenie w coraz bardziej zaawansowanym technologicznie rozwoju

rynku procesorów sygnałowych oferowanych przez szeroka gamę dostawców (bazujących właśnie na tej architekturze).

Pamięć CPU

Dane Program

CPU

Pamięć Program

Rys. 5. Architektura „Harwardzka” (podwójna pamięć).

Firma Analog Devices – poszła w swoich projektach procesorów sygnałowych trochę dalej - udoskonalając w procesorach przez siebie oferowanych, dotychczasowe rozwiązania architektury

„Harwardzkiej”.

Architektura ta, nazwana przez firmę „Super- Harwardzką”, została wzbogacona o niewielką pamięć cache przechowującą instrukcje programu oraz o programowany kontroler I/O (rysunek 6) [2].

Pamięć Dane

CPU

Cache

Rys. 6. Architektura „Super-Harwardzka” (podwójna pamięć, cache instrukcji programu, kontroler I/O).

Rys.7. Schemat blokowy przedstawiający zarys konstrukcyjny procesora klasy SHARC (ang. Super Harvard ARChitecture) produkowanego przez firmę Analog Devices [1, 2].

Szybkość obliczeń arytmetycznych jaka jest oferowana w procesorach sygnałowych, możliwa jest do osiągnięcia ze względu na dostosowanie ich do specyfikacji obliczeń wymaganych w cyfrowym przetwarzaniu sygnałów.

Obliczenia z jakimi najczęściej mamy do czynienia to [6]:

- filtracja FIR

( ) ( )

= −

= M

m b m x n m n

y 0 (2)

- filtracja IIR

Pamięć

Program Pamięć

Dane

I/O Dane

Pamięć Danych tylko dane Pamięć

Programu instrukcje programu lub drugorzędne dane

DAG PM DAG DM

Sekwencer Programu Cache

Zbiór Rejestrów ALU

Kontroler I/O (DMA)

ADC, DAC

itp.

(5)

( ) ( ) ( )

= −

+

∑ = −

= N

k a k y n k M

m b m x n m n

y 0 1 (3)

- transformacja Fouriera

( ) N ( ) e j N nk n x n

k

X 1 ( 2 / )

0

π

∑ − −

= = (4)

- funkcja korelacji wzajemnej

( ) ( ) ( )

= +

= N

n x n y n m m N

y R x

0

, 1 (5)

Charakterystyczne jest to, że wszystkie te obliczenia posiadają postać (postać analogiczna do wzoru (1)):

2 ...

2 1 1 0

0 + + +

= x y x y x y

a (6)

Składają się z mnożeń połączonych z akumulacją, które w procesorach sygnałowych dokonywane są w jednym cyklu jego pracy.

Aby takie operacje w procesorach DSP sprzętowo umożliwić i zoptymalizować, służą do tego specjalnie zaprojektowane układy adresujące pamięć DAGs (ang.

Data Address Generatorors) oraz odpowiednie towarzyszące im zbiory rejestrów. Wykorzystują one tryb pracy polegający na organizowaniu pamięci w bufory adresowanie w sposób cykliczny.

Adresowanie to, jak i możliwość mnożenia z akumulacją w jednym cyklu pracy, stanowią główną zaletę jaka decyduje o wydajności procesorów DSP w przypadku przetwarzania sygnałów. Przedstawia to rysunek 8.

Rys. 8. Działanie buforów kołowych oraz operacji mnożenia z akumulacją w jednym cyklu zegarowym.

Kolejnym mechanizmem jaki wykorzystują procesory sygnałowe jest mechanizm zwany potokiem (ang.

pipelining).

Polega on na wykorzystaniu cykli pracy procesora podobnie do cykli pracy linii montażowej w fabryce.

W jednym cyklu pracy procesor pobiera instrukcję, dekoduje instrukcje pobraną w poprzednim cyklu oraz wykonuje instrukcje pobrana dwa cykle wcześniej.

Proces taki trwa ciągle, a od programisty wymaga się

stworzenia takiego kodu niskiego poziomu, aby w pełni ten mechanizm wykorzystać.

Rys. 9. Mechanizm potoku instrukcji programowych w procesorach sygnałowych [3].

Rys. 10. Kolejność wykonywania instrukcji w potoku.

Rysunek 10 demonstruje fragment programu, w którym instrukcja 3 dokonująca skoku do instrukcji 577, poprzedzona jest bezpośrednio dwoma instrukcjami.

Wykonają się one zgodnie z mechanizmem potoku zanim zostanie wykonana właściwa instrukcja numer 577.

Jeżeli programista nie zadba o optymalne wykorzystanie mechanizmu potoku, wtedy jego przerwanie zaowocuje odpowiednia stratą dwóch cykli procesora. W tym przypadku nieefektywne byłoby wykonanie skoku do instrukcji 577 z poziomu instrukcji numer 5, gdyż do potoku pobrane zostałyby instrukcje 6 i 7, które nie są częścią wykonywanego programu

Mechanizm potoku tutaj zasugerowany jest bardzo ważny, a jego pełne wykorzystanie w algorytmach pracujących w pętlach programowych odpowiada za ich optymalne i efektywne działanie.

6. IMLEMENTACJA FIR W JĘZYKU NISKIEGO POZIOMU

Poniżej zamieszczono kod implementujący programowo nasz filtr FIR. Wykorzystano w nim omówione zalety zmiennoprzecinkowego procesora SHARC, takie jak: umiejętne wykorzystanie generatorów adresowych DAG oraz mechanizm potoku.

Ze względu na swoja optymalna postać - procedura ta może sobie poradzić obliczeniowo z kilkuset współczynnikami filtru (podczas cyklu pomiędzy pobraniami kolejnych próbek wejściowych – 48000 na

PC1 Instrukcja 1 PC2 Instrukcja 2 PC3 Instr. 3, JUMP PC577 PC4 Instrukcja 4 PC5 Instrukcja 5 ...

PC577 Instrukcja 577 PC578 Instrukcja 578

Cykle pracy Pobranie Dekodowanie Wykonanie

1 P1

2 P2 D1

3 P3 D2 W1

4 5 P4 P5 D3 D4

W2 W3

Pełny cykl

pierwszy Pełny cykl trzeci

Pamięć PM - X Pamięć DM - Y

20034 ... 40555 ...

20035 x[n-2] 40556 h[0]

20036 x[n-1] 40557 h[1]

20037 x[n] 40558 h[2]

20038 x[n-4] 40559 h[3]

20039 x[n-3] 40560 h[4]

20040 ... 40561 ...

A=A+XY

(6)

sekundę), a nie jak mieliśmy do czynienia w przypadku języka C++ z ok. 30. W naszym projekcie filtru liczba wyliczonych współczynników wynosi 217.

Zasada działania programu jest następująca.

Zadeklarowana zmienna ‘wlinia’ pracuje jako bufor cykliczny przechowujący ostatnio pobrane próbki wejściowe. Zdeklarowany jest on w pamięci danych. W pamięci programu znajduje się zadeklarowany bufor cykliczny ‘wspol’ zawierający współczynniki filtru.

Każda pobrana i zgłoszona przez odpowiednie przerwanie próbka - jest z postaci stałoprzecinkowej przekształcana na postać zmiennoprzecinkową, następnie filtrowana i z powrotem konwertowana na postać stałoprzecinkową. W tej postaci jest wysyłana do pamięci danych, gdzie jest dostępna pod zmiennymi Left_Channel_Out i Right_Channel_Out.

Konwersja formatu liczb z postaci zmiennoprzecinkowej na stałoprzecinkową i odwrotnie, dokonywana jest ze względu na przetworniki próbkujące sygnał. Operują one zazwyczaj na danych w postaci stałoprzecinkowej. Sam zaś procesor operuje trybem zmiennoprzecinkowym.

/* Wymagana deklaracja zmiennych RZAD_FILTRU

wlinia[RZAD_FILTRU]

wspol[RZAD_FILTRU]

/* Inicjalizacja układów DAG inicjalizacja_fir:

b0=wlinia; l0=@wlinia; m0=1;

b8=wspol; l8=@wspol; m8=1;

/* Oczekiwanie na przerwanie z układu AD1881 wait: idle; jump wait;

/* Pobranie próbki do procedury i jej konwersja probka_gotowa_FIR:

r1=-31;

r0=dm(Left_Channel_In);

r0=lshift r0 by 16;

f0=float r0 by r1;

dm(i0,m0)=f0;

/* Właściwy algorytm filtracji FIR f12=0;

f2=dm(i0,m0), f4=pm(i8,m8);

f8=f2*f4, f2=dm(i0,m0), f4=pm(i8,m8);

lcntr=RZAD_FILTRU –2, do (pc,1) until lce;

f8=f2*f4, f12=f8+f12, f2=dm(i0,m0), f4=pm(i8,m8);

f8=f2*f4, f12=f8+f12;

f12=f8+f12;

/* Konwersja próbki i powrót z przerwania r1=31;

r8=fix f12 by r1;

r8=lshift r8 by –16;

rti(db);

dm(Left_Channel_Out)=r8;

dm(Right_Channel_Out)=r8;

7. PODSUMOWANIE

W artykule rozpatrzono zagadnienia związane z kształceniem w dziedzinie cyfrowego przetwarzania sygnałów ze zwróceniem szczególnej uwagi na ich aspekty praktyczne.

W tym celu zademonstrowano zadanie dotyczące zaprojektowania dolnoprzepustowego filtru FIR, którego przedmiotem była rzeczywista implementacja na zmiennoprzecinkowym procesorze sygnałowym SHARC ADSP-21160 firmy Analog Devices.

Wykorzystano, oferowane przez ten procesor, mechanizmy niskopoziomowego programowania - umożliwiające optymalne jego użycie w porównaniu do jego implementacji w języku C++.

Zaowocowało to (i równocześnie zobrazowało stosowność) uzyskaniem znacznej poprawy jeżeli chodzi o możliwość stosowania filtrów o znacznie większej złożoności obliczeniowej (większa ilość współczynników filtru).

SPIS LITERATURY

[1] ADSP-21160 EZ-KIT LITE™ Evaluation System Manual; First Edition, May 2002

[2] ADSP-21160 SHARC DSP Hardware Reference;

Second Edition, March 2002

[3] A. Bateman, I. Paterson-Stephens, The DSP Handbook, Prentice Hall 2002

[4] Filter Design Toolbox For Use with MATLAB®, User’s Guide, Version 2, The MATH WORKS [5] R. G. Lyons, Wprowadzenie do cyfrowego

przetwarzania sygnałów, Wydawnictwo Komunikacji i Łączności, Warszawa 1999

[6] T. P. Zieliński, Od teorii do cyfrowego

przetwarzania sygnałów, wydział EAIiE AGH,

Kraków 2002

Cytaty

Powiązane dokumenty

W ybrane met od y c yfr ow ego pr zet w ar zania sy gnałó wWybrane metody cyfrowego przetwarzania sygnałówz przykładami programów w Matlabiez przykładami programów w

przy rozważaniu widma sygnału AM w przypadku, gdy częstotliwość modulująca jest większa od częstotliwości

W tym artykule zostaną wskazane i udowodnione warunki konieczne dla nieblokowalności pól w szerokim sensie przy zastosowaniu różnych algorytmów sterowania polem multi-log 2 N

Zakłada się znajomość podstaw cyfrowego przetwarzania sygnałów, zasad estymacji parametrów procesów losowych, podstaw analizy widmowej oraz umiejętności programowania w

f jest funkcją

6.1 Wykonaj wszystkie polecenia ćwiczenia 6.2, rozwijając funkcję w szereg cosinu-

[r]

[r]