K-1 - Katedra Systemów Multimedialnych

Transkrypt

K-1 - Katedra Systemów Multimedialnych
Adam Korzeniewski
[email protected]
p. 732 - Katedra Systemów Multimedialnych
Operacja na dwóch funkcjach dająca w wyniku
modyfikację oryginalnych funkcji (wynikiem jest
iloczyn splotowy). Jest działaniem przemiennym
(podobnie jak mnożenie)
Algorytm FFT jest tak bardzo skuteczny, że w
przypadku obliczania splotu kołowego yn  xn  hn
2
2
( N mnożeń i N  1 dodawań) opłaca się obliczyć
FFT
FFT
widma sygnałów xn  X k  , hn  H k  ,
pomnożyć widma Y k   X k H k  i obliczyć
odwrotne przekształcenie Y k   yn .
IFFT
Ten sposób obliczania splotu nazywa się szybkim
splotem, gdyż obliczenia trwają krócej już od N = 32 w
przypadku splatania sygnałów zespolonych i od N = 64
w przypadku splatania sygnałów rzeczywistych.
Korzystne jest to, że w tym zastosowaniu FFT nie ma
potrzeby przenumerowywania próbek. Dodatkowe
korzyści odnosi się w typowej sytuacji, gdy splot jest
obliczany dla różnych sygnałów x[n] przy tej samej
funkcji h[n]. Wystarczy wtedy obliczyć przekształcenie
tylko jeden raz.
xn
FFT
xn 
hn
yn   xn   hn 
X k 
ş
H k 
FFT
hn
Y k   X k H k 
IFFT
yn
Jeżeli sygnał wejściowy x[n] jest bardzo długi (czy
wręcz nieskończony, tak jak to jest przy przetwarzaniu
w czasie rzeczywistym sygnałów dźwiękowych, czy
obrazów ruchomych), to jego splatanie z odpowiedzią
impulsową filtru h[n] o długości K jest rozbijane na
sumę szybkich splotów.
Sygnał wejściowy należy rozbić na sumę bloków,
każdy o długości M. Splot liniowy dwóch sygnałów o
długościach M i K daje sygnał o długości M + K - 1.
Splot kołowy powinien mieć taką właśnie długość
N = M + K - 1, aby równał się splotowi liniowemu.
Dlatego przed wykonaniem splotu kołowego sygnał
h[n] jest uzupełniany M-1 zerami do N oraz blok
sygnału wejściowego xi[n] jest uzupełniany K-1 zerami
do N. Wyniki kolejnych splotów kołowych yi[n] są
sumowane na zakładkę o długości K-1, stąd metoda
ma angielską nazwę overlap-add.
K
hn
xn 
N  M + K 1
M 1
0
M
Uzupełnienie zerami
M
M
L
M
x1 n
M
y1 n
K 1
0 Uzupełnienie zerami
M
K 1
0 Uzupełnienie zerami
x2 n
M
K 1
x3 n
0
K 1
+
M
y 2 n 
K 1
+
M
y3 n
K 1
Równoważny sposób postępowania polega na
zapamiętaniu K-1 końcowych próbek z poprzedniego
bloku xi-1[n] i uzupełnieniu tymi próbkami początku
następnego bloku xi[n]. Tym razem splot kołowy daje
K-1 początkowych próbek fałszywych (różniących się
od wyniku splotu liniowego) i są one odrzucane z
sygnału wyjściowego.
K
hn
xn 
N  M + K 1
M 1
0
M
Uzupełnienie zerami
M
M
L
K 1
0
Uzupełnienie
zerami
M
x1 n
K 1
M
y1 n 
Zapamiętaj
K  1 i przenieś
x2 n
M
K 1
Odrzuć to
M
y2 n 
Zapamiętaj
K  1 i przenieś
x3 n
M
K 1
Odrzuć to
Odrzuć to
M
y3 n
Liczba kolejnych bloków próbek sygnału wejściowego
x[n] może być nieskończenie wielka. Ten sposób
wprowadzania może być stosowany w procesorach
sygnałowych przetwarzających sygnały cyfrowe w
czasie rzeczywistym. Kolejne próbki ze źródła sygnału
(mikrofon, kamera telewizyjna) są wprowadzane do
odbiorczego bufora kołowego, a wyniki są
wyprowadzane do nadawczego bufora kołowego.
Wykonanie programu komputerowego, to wykonanie
sekwencji instrukcji. Instrukcję można przedstawić
jako 5 bloków (stopni), każdy wykonywany w 1 cyklu
zegara. Bloki oznaczymy literami F, D, E, A, S
(pierwsze litery nazw w języku angielskim).
E
F
D
ALU
dekodowanie
pobranie
wykonanie
instrukcji
instrukcji
instrukcji
(ang. instruction (ang. instruction
z pamięci
decode)
(ang. instruction
execute)
fetch)
A
S
otwarcie
dostępu
do pamięci
(ang. memory
access)
zapisanie
wyniku
wykonania
instrukcji
(ang. store,
write back)
W zwykłym (niepotokowym) przetwarzaniu najpierw wykonuje
się bloki pierwszej instrukcji, następnie drugiej instrukcji, itd.
Wyniki wykonania kolejnych instrukcji są zapisywane co 5 cykli
zegara.
Przetwarzanie niepotokowe
Clock cycle
1
2
3
4
5
Instr. 1
F1
D1
E1
A1
S1
Instr. 2

6
7
8
9
10
F2
D2
E2
A2
S2
Procesor sygnałowy ma logikę przystosowaną do
wykonywania wszystkich bloków jednocześnie, dzięki
czemu jest możliwe przetwarzanie potokowe.
Począwszy od 5-go cyklu zegara wykonywanych jest 5
bloków jednocześnie, każdy dla innej, kolejnej instrukcji.
Wyniki S1, S2, ... są dostępne w kolejnych cyklach zegara
(5-tym, 6-tym, itd.), a nie po co 5-tym cyklu zegara, jak
to było w przetwarzaniu niepotokowym.
Potencjalnie jest możliwe 5-cio krotne zwiększenie
prędkości obliczeń. Niestety trzeba z góry przewidzieć
sytuacje konfliktowe, hazard (w literaturze naukowej
wymienia się kilkadziesiąt takich sytuacji). Na przykład
w przypadku instrukcji skoku, w najgorszym przypadku
trzeba wycofać instrukcje, które następowały po
instrukcji skoku i rozpocząć zapełnianie potoku od
adresu, do którego nastąpił skok.
Przetwarzanie potokowe
Clock cycle
1
2
3
4
5
Instr. 1
F1
D1
E1
A1
S1
F2
D2
E2
A2
S2
F3
D3
E3
A3
S3
F4
D4
E4
A4
S4
F5
D5
E5
A5
S5
F6
D6
E6
A6
Instr. 2
Instr. 3
Instr. 4
Instr. 5
Instr. 6

6
7
8
9
10
S6
KONIEC

Podobne dokumenty