Programowanie mikroprocesorów jednoukładowych
Transkrypt
Programowanie mikroprocesorów jednoukładowych
Programowanie mikroprocesorów
jednoukładowych
Cyfrowe przetwarzanie sygnałów
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
1 / 17
Plan I
Liczby stałoprzecinkowe
Działania na liczbach stałoprzecinkowych
Dodawanie i odejmowanie
Mnożenie
Dzielenie
Pierwiastek kwadratowy
Podsumowanie
Filtry
Wymagania
FIR
IIR
DFT
FFT
FFT
Radix-2 FFT
Radix-4 FFT
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
2 / 17
Format stałoprzecinkowy I
X [t] = NLC (2k x [t])
NLC - najbliższa liczba całkowita do liczby(. . . )
W przypadku notacji binarnej, k oraz k-1 to miejsce w którym ustalamy przecinek w
reprezentacji liczby.
Przykładem liczby stałoprzecinkowej niech będzie 0x4000 dla notacji Q15.
Tablica: Reprezentacja liczby 0.5 w notacji binarnej zmiennoprzecinkowej Q15
Bit
0x4000
Mariusz Naumowicz
=
15
0.
14
1
13
0
12
0
11
0
10
0
9
0
8
0
7
0
Programowanie mikroprocesorów jednoukładowych
6
0
5
0
4
0
3
0
2
0
1
0
23 listopada 2016
0
0
3 / 17
Dodawanie i odejmowanie
y [t] = x [t] + c[t]
d
d
Y [t] = 2 y [t] = 2 (x [t] + c[t]) = 2d−n X [t] + 2d−m C [t]
Y [t] = (X [t] << (d − n)) + (C [t] << (d − m));
Y [t] = X [t] + C [t];
Y [t] = X [t] + (C [t] << (d − m));
Y [t] = C [t] + (X [t] << (d − n));
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
4 / 17
Mnożenie
y [t] = x [t]c[t]
Y [t] = 2d y [t] = 2d x [t]c[t] = 2d−n−m X [t]C [t]
Y [t] = (X [t] ∗ C [t]) >> (n + m − d);
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
5 / 17
Dzielenie
y [t] =
Y [t] = 2d y [t] =
x [t]
c[t]
2d x [t]
X [t]
= 2d−n+m
c[t]
C [t]
Y [t] = (X [t] << (d − n + m))/C [t];
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
6 / 17
Pierwiastek kwadratowy
p
y [t] = x [t]
q
p
Y [t] = 2d y [t] = 2d x [t] = 22d−n X [t]
Y [t] = isqrt(X [t] << (2 ∗ d − n));
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
7 / 17
Podsumowanie
Tablica: My caption
Operacja na sygnałach
y[t]=x[t]
y[t]=x[t]+c[t]
y[t]=x[t]-c[t]
y[t]=x[t]*c[t]
y[t]=x[t]/c[t]
y[t]=sqrt(x[t])
Mariusz Naumowicz
Operacja stałoprzecinkowa
Y[t]=X[t]<<<(d-n);
Y[t]=(X[t]<<<(d-n))+(C[t]<<<(d-m));
Y[t]=(X[t]<<<(d-n))-(C[t]<<<(d-m));
Y[t]=(X[t]*C[t])<<<(d-n-m));
Y[t]=(X[t]<<<(d-n+m))/C[t];
Y[t]=isqrt(X[t]<<<(2*d-n));
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
8 / 17
Przykładowe aplikacje
Tablica: Precyzja filtrów dla różnych aplikacji
Aplikacja
Video
Telefonia komókowa audio
Audio wysokiej jakości
Mariusz Naumowicz
Precyzja X[t] (bity)
8
16
32
Precyzja C[t] (bity)
8
16
32
Programowanie mikroprocesorów jednoukładowych
Precyzja A[t] (bity)
16
32
64
23 listopada 2016
9 / 17
FIR I
yt =
M−1
X
ci xt−i
i=0
A[t] = C [0]X [t] + C [1]X [t − 1] + . . . + C [M − 1]X [t − M + 1]
|A[t]| ≤ max {|X [t − i]|, 0 ≤ i < M} ×
M−1
X
|C [i]|
i=0
v
v
uM−1
uM−1
uX
uX
t
2
|X [t − i]| × t
|C [i]|2
|A[t]| ≤
i=0
Mariusz Naumowicz
i=0
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
10 / 17
FIR przykład
yt = −0.45xt + 0.90xt−1 − 0x 45xt−2
C [0] = −0.45 × 2m , C [1] = 0.90 × 2m , C [3] = −0.45 × 2m
|A[t]| ≤ 215 × 1.8 × 2m = 1.8 × 215+m
|A[t]| = −0x 399A ∗ X [t] + 0x 7333 ∗ X [t − 1] − 0x 399A ∗ X [t − 2]
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
11 / 17
IIR
yt =
M
X
i=0
Mariusz Naumowicz
bi xt−i +
L
X
yj xt−j
j=1
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
12 / 17
DFT
y = DFTN (x )
yk =
N−1
X
xt wNkt , wN = e −2πi/N
i=0
x = IDFTN (y )
xt =
N−1
1 X
yk wNkt , wN = e 2πi/N
N
k=0
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
13 / 17
FFT
k = nR + m
n = 0, 1, . . . , S − 1m = 0, 1, . . . , R − 1
t = rS + s
r = 0, 1, . . . , R − 1s = 0, 1, . . . , S − 1
y [nR + m] =
R−1
X S−1
X
(nR+s)(rS+s)
x [rS + s]wN
r =0 s=0
y [nR + m] =
S−1
X
s=0
Mariusz Naumowicz
wSns w + N ms
R−1
X
(nR+s)(rS+s)
x [rS + s]wN
r =0
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
14 / 17
FFT
(u[sR], u[sR + 1], . . . , s[sR + R − 1]) = DFTR (x [s], x [s + S], . . . , x [s + (R − 1)S)
v [sR + m] = wNms u[sR + m]
y [nR + m] =
S−1
X
wSns v [sR + m]
s=0
(y [m], y [R + m], . . . , y [(S − 1)R + m) = DFTS (v [m], v [R + m], . . . , v [(S − 1)R + m])
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
15 / 17
Radix-2 FFT I
(u[sR], u[sR + 1], . . . , s[sR + R − 1]) = DFTR (x [s], x [s + S], . . . , x [s + (R − 1)S)
v [sR + m] = wNms u[sR + m]
y [nR + m] =
S−1
X
wSns v [sR + m]
s=0
(y [m], y [R + m], . . . , y [(S − 1)R + m) = DFTS (v [m], v [R + m], . . . , v [(S − 1)R + m])
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
16 / 17
Radix-4 FFT I
(u[sR], u[sR + 1], . . . , s[sR + R − 1]) = DFTR (x [s], x [s + S], . . . , x [s + (R − 1)S)
v [sR + m] = wNms u[sR + m]
y [nR + m] =
S−1
X
wSns v [sR + m]
s=0
(y [m], y [R + m], . . . , y [(S − 1)R + m) = DFTS (v [m], v [R + m], . . . , v [(S − 1)R + m])
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
17 / 17
References
Mariusz Naumowicz
Programowanie mikroprocesorów jednoukładowych
23 listopada 2016
18 / 17