Wyklad 11: Kody i metody korekcji bled - PowerPoint PPT Presentation

About This Presentation
Title:

Wyklad 11: Kody i metody korekcji bled

Description:

Title: Wyk ad 1: Technika DSP Wst p Author: Wronski Last modified by: Wronski Created Date: 10/12/2005 4:58:33 PM Document presentation format: Pokaz na ekranie – PowerPoint PPT presentation

Number of Views:70
Avg rating:3.0/5.0
Slides: 24
Provided by: Wron1
Category:

less

Transcript and Presenter's Notes

Title: Wyklad 11: Kody i metody korekcji bled


1
Wyklad 11 Kody i metody korekcji bledów
  • PG Katedra Systemów Mikroelektronicznych
  • ZASTOSOWANIE PROCESORÓW SYGNALOWYCH
  • Marek Wronski

2
Kodowanie zródla
1948 C.E. Shannon A Math. Theory of Communication
sformul. podstaw.Tw. Torii informacji. Uzyskanie
informacji oznacza ograniczenie niepewnosci
dotyczacej pewnego warunku (zmiennej o skonczonej
liczbie wartosci reprezentowanych skonczonym
zestawem symboli), np.miejsce urodzenia 10-ciu
Skandynawów 1 z 31059049 lub Europejczyków 1 z
34102.061015 przed odebraniem komunikatu przy
kazdym odebranym symbolu redukowana o czynnik 3
lub 34. Komunikat m.b. zakodowany róznymi
pojedynczymi symbolami lub, np.cyframi binarnymi
wtedy potrzeba log2(3)1.56 t.j. 2 lub
log2(34)5.09 t.j. 6 znaków na symbol. Nie jest
istotny wybór znaków. Mniejszy zestaw znaków daje
tylko dluzsze komunikaty (np.mezczyz(ma)/kobieta(f
e) zawiera informacje redundancyjna wynikajaca z
zaleznosci m. znakami). Usuwanie redundancji jest
glównym zadaniem kompresji danych. Informacja
wzajemna (sym. o A znajac B) miedzy zdarzeniami
(np. danymi wyslanymi i odebranymi)
gdy A i B niezalezne I(A,B)0 gdy A i B
calkowicie zalezne (max) I(A,A) -log(P(A))
Dla K zdarzen (jako Ai, gdy Xxi ) m. wyznaczyc
entropie (srednia inf. dla wszystkich zdarzen)
dla Skandynawów 1.56 bitów na osobe dla
Europejczyków 5.09 bitów na osobe
Jest to (autoinformacja czyli inf. w X) minimalna
ilosc (wolna od redundancji) inf., jaka trzeba
utrzymac, aby móc bezblednie odtworzyc
zachowanie X, tj. jaka powinien przekazac idealny
alg. kompresji danych. Aby móc odtworzyc inf. bez
bledów szybkosc przeplywu inf. RgtH bitów/s.
3
Kodowanie kanalu. Modele kanalu i przepustowosci
Jednak bledy transmisji (z prawdopodobienstwem p)
Srednia informacja wzajemna
gdzie H(x) jest entropia lub informacja
wejsciowa a entropie H(XY) m. traktowac jako
niepewnosc spowodowana kanalem.Dla BSC (binary
symmetric channel) dla bin.sygn.wejsc. jednakowo
prawdopodob. H(X)1 bit na symbol (max) dla
kanalu doskonalego (p0) I(X,Y)1, a dla p0.1 -gt
0.531 bit na symbol. W ostatnim przypadku
uzyskujemy tylko 0.531 bita informacji o X, jesli
odbieramy sygnaly Y. Niepewnosc w kanale
rozciencza inf. o wej.X. Wreszcie gdy p0.5
(srednio przez polowe czasu pojawiaja sie bledy)
I(XY)0, zadna inf.nie przeszla kanalem
Dla kanalu AWGN (additive white Gaussian noise)
przepustowosc ( dla W4 kHz, SNR45 dB C60
kbit/s. Dla BSC
Bezblednosc CgtR (szybkosci przeplywu)
4
Korekcja bledów w (blokowym) kodzie
powtórzeniowym(3,1,3)
5
Przesylanie prostego repetycyjnego kodu 3-bitowego
dowa
Prawidlowa transmisja dla (a), (b), (e) i (f). W
innych przyp. dekoder kryterium wiekszosciowego
popelnia bledy. Wystepuje to gdy jest wiecej niz
t1 bledów bit
np..101 i 001 bl.1b
6
Odleglosc Hamminga
Jesli jest d bl. bitów to przekazywane slowo
bedzie zamienione na inne i blad nie moze byc
wykryty
Czasem dla slabych sygnalów stosuje sie 3-ci
symbol wymazywania, tj. nieokreslony
zastepowany najbardziej prawdopodobnymi
brakujacymi bitami (pd-1 bitów w miejsce
wymazywanych)
Przy klasyfikacji kodu stosuje sie triplet z
lozony z dlugosci slowa kodowego n, liczby bitów
informacyjnych k iminimalnej odleglosci Hamminga
d. Taki triplet oznacza sie jako (n,k,d). Nasz
kod powtórzeniowy zapiszemy jako (3, 1,
3). Liczba bitów parzystosci (nadmiarowych)
n-k. Wedlug odl. Hamminga mozemy stwierdzic ile
blednych bitów t (na slowo kodowe) moze obsluzyc
dany kod. Jesli w slowie kodowym jest wiecej niz
t blednych bitów, to wyzej opisane kodowanie moze
nawet zwiekszyc liczbe bitów i pogorszyc
sytuacje. W takim przypadku trzeba zastosowac
lepszy kod, lub nawet moze byc korzystna
rezygnacja Z zastosowania jakiegokolwiek kodu
korekcji bledów.
7
Liniowe kody (blokowe) korekcji bledów, np.
LC(6,3,3)
To takie kody w których suma skladowych (binarna
tj. modulo2) dwóch slów kodowych xi i xj musi tez
tworzyc slowo kodowe. Maja wlasciwosc, ze
sasiedztwo wszystkich slów kodowych w n-miernej
przestrzeni kodowej wyglada tak samo (0). Wiec
do dekod.wszystk. slów jeden alg. Kodowanie
polega na mnozeniu slowa informacji u0 1 0
przez macierz generujaca kodu GIP (mac. I
(kk) rozszerzona o macierz P (kn-k) okreslajaca
bity parzystosci (nadmiar) xu1u2 u3 p1 p2 p3
, np. p1 u1u2 p2 u2u3 p3 u1u2u3
Przesylane slowo kodowe xuGuIP0 1 0
0 1 0 1 1 1 Macierz
parzystosci HPTI W dekoderze najpierw
obliczamy syndrom bledu jako (gdy brak bledów
yx) syHT 0 1 0 1 1 1 0 0 00
Jezeli powstanie blad, np.e0 0 1 0 0 0
tj. odebrano yxe0 1 0 1 1 10 0 1
0 0 00 1 1 1 1 1 wtedy m.b. obliczony
syndrom (uzywamy go jako indeks do
dekodowania bledów) Wyodrebnienie inform. z
odebranego slowa syHT 0 1 1 1 1
1 0 1 1 ltgt0 uxI0 0 1 0
1 1 1 0 1 0
8
Tablica dekodowania
Zawiera ona wektory bledów, które moga generowac
specyficzny wektor syndromu bledu.
Syndrom uzyjemy jako indeks w tablicy
dekodowania stosujac zasade maksymalnej
wiarygodnosci (najbardziej prawdopodobny blad 1
bitu) dlatego z 1kol odczytujemy e0 0 1 0 0
0 wiec skorygowane slowo kodowe xye0 1 1 1
1 10 0 1 0 0 00 1 0 1 1 1 stad przeslana
inf. uxI00 1 0 (odl.Hamminga3-gtwykryje
(3-1) bl. koryguje (3-1)/2 bledów Nie
skoryguje np. podwójnego bledu e0 1 0 1
0 0x0 0 1 0 1 10 1 1 1 1 1y bitów dla
u001 i x001011 po
skorygowaniu (jak wyzej) u010ltgtu
9
Kody cykliczne, np. CC(7,4,3)
  • Oprócz liniowosci cechuja sie równiez
    przesunieciem cyklicznym
  • (rotacja tez daje inne slowo kodowe, np..
    111001 i 110011)
  • Dla nich uzywa sie zapisu wielomianowego
    (algebraicznego z par. formalnym x)
  • c(x)c0 c1x c2x2.. cn-1xn-1 dla
    slowa kodowego cc0 c1 c2 ...cn-1
  • m-bit rotacja (cykliczne przesuniecie m-krokowe)
    xm c(x) modulo(xn-1).
  • Kodowanie to mnozenie przez wielomian generujacy
    g(x) c(x)q(x)g(x)
  • lub przesuwanie wielom.inf. i dzielenie wyniku
    przez g(x) -gt c(x) xn-ku(x)-r(x)
  • (lub wiel.parzystosci h(x) ( xn-1)/g(x)) bo
    xn-ku(x)/g(x)q(x)r(x)/g(x)
  • Przy dekodowaniu odebran. slowa
    v(x)c(x)e(x)q(x)g(x) e(x)
    e(x)(Q(x)-q(x)) g(x)s(x)
  • obl. wielomian syndromu (do detekcji bl.) jako
    reszta v(x)/g(x)Q(x)s(x)/g(x)
  • jest on jednoczesnie reszta z dzielenia e(x)
    przez g(x), dlatego m.b. uzyty do
    identyfik.wiel. bl.e(x)
  • (zalezy tylko od bledu)
  • Np. g(x) 1xx3 informacja 0010, tj.u(x)x2
  • wielomian kodu c(x)u(x)g(x) x2 x3 x5
    tzn. Tab. dekodow
  • przesylana sekwencja bitów 0011010 przy braku
    bl. e(x)0
  • c(x)/g(x) x2 0/g(x), tj. s(x)0 wiec
    brak bl.i inf.u x2
  • gdy jest bl. e(x) x5, wiec v(x)c(x)e(x) x2
    x3 !! XOR


10
Implementacja DSP algorytmu
Do implementacji mnozenie i dzielenie wielomianów
zamieniamy filtracja (rej.przesuw.logika) sekw.
bitów danych,bo wspólcz. Ci m. uzyskac jako splot
wsp. wielom. inf. i wsp. wielom.
gener. C(z)U(z)G(z) u0g0(u1g0
u0g1)z (u2g0u1g1 u0g2)z2.. gdy g01 i
gn-k1 tj. G(z)1G(z) SOI G(z) w petli
-sprz.da NOI
Filtracja sekwencji bitów danych ui przy uzyciu
binarnego filtru SOI z wagami gj wykona operacje
mnozenia wielomianowego (kodowania). A w
dekoderze wprowadzajac v(x) do ukladu z rejestrem
w petli - sprz.zwr. Uzyskujemy w rezultacie
dzielenie wielomianowe ( wagi G(z) to g(x) lecz
g01). Podczas pierwszych n przesuniec na wyjsciu
uzyskujemy q(x), a po nich s(x), m.b.
odczytany równolegle (po 7 krokach) i uzyty jako
indeks w przegladowej tabl.syndromu (do korekcji
bledu)
11
Czesciej stosowane kody CRC (Redundancy Check
Codes), BCH, RS i splotowe.
CRC-4 g(x)1xx4 CRC-5
g(x)1x2x4x5 CRC-6 g(x)1xx6 CR
C-12 g(x)1xx2x3x11x12 CRC-16
g(x)1x2 x15x16 CRC-CCITT g(x)1x5
x12x16 BCH n2m-1 kgtn-mt dgt2t1
m3,4,5..(Bose, Chaudhuri, Hocquenghem dla
tel.komórkow.) Kody Reeda-Solomona (RS) to kody
BCH dzialajace z grupa bitów (z m-narnymi
symbolami). Maja one najwieksza mozliwa minimalna
odleglosc Hamminga przy danej liczbie bitów
kontrolnych I danej dlugosci bloku. Stosuje sie
je w systemach kombinacyjnych. Zaleta kodów
splotowych jest brak potrzeby przesylania
sekwencji synchronizujacej koder i
dekoder. Stosowane np.. w tel.komórkowej w celu
przeciwdzialania interferencji miedzysymbolowej
(ISI). Jet PropulisionLab (NASA do Voyagera na
Marsa) kod splotowy (2,1,6) g(1)(1,1,0,1,1,0,1)
g(2)(1,1,0,1,1,0,1) Linkabit kod splotowy
(3,1,6) g(1)(1,1,0,1,1,0,1) g(2)(1,0,0,1,1
,1,1) g(3)(1,0,1,0,1,1,1)
12
Kody splotowe , np. (2,1,2) kodowanie
Dzialaja na zasadzie ciaglego strumienia
wtracajac bity parzystosci miedzy bity
informacyjne zgodnie z pewnymi regulami.
Kodowanie to n binarnych filtrów SOI, majacych
wspólna linie opózniajaca (o dl.m). Kazdy filtr
j ma swa wlasna binarna odpowiedz impulsowa
gi(J),dlatego na wyjsciu j-filtru gdzie
u1, u2,... uL bity informacyjne, gi(J) j-ty
generator Bity przesylanego slowa kodowego
c(c1(1), c1(2),... c1(n), c1( 1), c2(2),...
c2(n), cLm(1), cLm(2),... cLm(n)) Na poczatku
wszystkie m elementów w linii opózniajacej jest
zerowanych. Potem wprowadzamy po kolei symbole
informacyjne i obl. syg. wy. wszystkich filtrów i
przesylamy do wyjscia i tak do uL.W dalszych m
krokach wchodza zera (koncówka kodu tail). Np.
g(1)(1,0,1) i g(2)(1,1,1) sekw. informac.
ul(0,1,0,1) daje cl(j)(00,11,01,00,01,11)
Sprawnosc kodowania RL/((Lm)n), a
wymuszona dlugosc kodu (liczba bitów na które
wplywa 1 bit inf.) (m1)n
13
Dekodowanie Viterbiego wykres przejsc
calych sekwencji symboli inf. i symboli
parzystosci na raz (c1 c2 ... cLm )
maksymalizuje wiarygodn. odebrania sekwencji
bitów c jako sumy min.odleglosci Hamminga dla
bloków (m.odebrana a przes) Dla kanalu BSH log. z
prawdopodobienstwa warunkowego odebrania bloku vi
,gdy przeslany bl. ci L(vi ci )Sum(log(P
(vi(j) ci(j) )j1do ndH(vi ci )log(p)(n-
dH(vi ci )) log(1-p) dH(vi ci
)log(p/(1-p)nlog(1-p)- dH(vi ci ) L(v c
)Sum(log(P (v c )i1do Ln - Sum(dH(vi ci
)i1 do Ln Nie znamy przesylanej ale z wiedzy o
dzialaniu kodera tworzymy estymate spodziewanych
danych. tzw. wykres przejsc miedzy stanami w
koderze lub kratowy wykres kodu mozliwych
przejsc (zaczynajac od stanu poczatkowego 00 i
konczac po Lm krokach tworzacych koncówke na 00)
Wykres przejsc miedzy stanami zaczynajac od
stanu 00 (wszystkie elementy pamiec. 0). Cyfry w
wezlach sa nr. stanów, czyli zawartosciami
elementów pamieciowych, a cyfry nad galeziami sa
symbolami informacji wejsciowej ul (w nawiasach)
i bitami kodu wyjsciowego cl(1) i cl(2) .
14
Wykres kratowy kodu (code trellis).
Rysujemy go na podstawie przejsc miedzy stanami.
Pokazuje on wszelkie mozliwe przejscia (stany na
osi y) w funkcji nr.kroku l (os x). Zaczynajac
od stanu 00 wachlarzowo rozwija sie az do
wszystkich mozliwych 4 stanów i na koniec zbiega
sie do 00 po Lm krokach. Liczby pisane kursywa
sa sa skumulowanymi ujemnymi odleglosciami Hamming
a, liczby w nawiasach sa estymowanymi symbolami
inf., liczby przy galeziach sa spodziewanymi
blokami kodu. Dla wej..ul(0,1,0,1) brak
bl.cl(j)(00,11,01,00,01,11) bl.
e(01,10,00,10,11)v(01,01,01,10,01,11)
W 1-kr.(od 00) odbierany blok (slowo) v1(0,1).
Byly 2 mozliw ul(1) przejsc do 10 wyg.
c1(1,1) (ale odebralismy v1(0,1)wiec obl. odl.
Hamm. 1) lub pozostac w 00 i wygenerowac
c1(0,0).
W 2-kr.odebr.v2(0,1) obl.skumul.odl.Hamminga
dla wszystkich mozliw.przejsc itd..Np..
Zakladajac Stan 10 i przejscie do11, to u21 i
c2(1,0) odl.H-2 wiec skumulowany koszt-3 (dla
osiagniecia stanu11) Rozpoczynajac 3ci blok
widzimy 2 sciezki do osiagn. tych stanów
wybieramy najtansza i skreslamy kosztowniejsza
(np.. dojscie do stanu 01 albo od Stanu
10(koszt 3) albo od 11 (koszt 5)). Wybieramy
najtansza. Po osiagnieciu koncowego Wezla
Sledzac wstecznie uzysk.estymow. (zdekod) inf. u
(dól). Tylko 1 sciezka o najmn. koszcie
15
Przeplot
Przeplot stosuje sie, np. w kanalach radiowych,
tam gdzie bledy pojawiaja sie w paczkach
(seryjne) Jest to metoda rozproszenia bledów
bitowych w serii na wieksza liczbe bloków
kodowych tak aby liczba bledów bitowych na blok
(dl. n majacy k bitów inf.) mb.skorygowana przez
dosc krótki kod. Przychodzace symb.inf. sa
kodowane i zapamietywane wiersz po wierszu (l
wierszyglebok.przepl) Po zgromadzeniu l slów
matryca jest pelna. ui(j) bit inf. i w slowie j,
pm(j) bit parzystosci m w slowie j
Wyjsciem kanalu jest nl bitów, lecz tym
razem kolumna po kolumnie u1(1) ,u1(2) ,.. u1(l)
... P(n-m)(l) Po stronie dekodera dzialanie
odwrotne rozplot bity sa rejestrowane, kolumna
po kolumnie i potem odczytywane do dekodera
wiersz po wierszu Rozproszenie serii N kolejnych
blednych bitów na L slów kodowych. Kazde slowo
kodowe zawiera
lt t korygowanych
16
Kodowanie w modemie V.32 z 32(.) modulacja
kratowa (Trellis mod.)
Dane wejsciowe sa dzielone w grupy 4-bitowe.
Pierwsze dwa bity kazdej grupy sa kodowane
róznicowo, pózniej nastepuje kodowanie zlozone
tak, aby uzyskac zestaw 3 bitów. Pozostale dwa
bity nie sa kodowane, a jedynie przesylane dalej.
W wyniku takiego dzialania kazda grupa zawiera
piec bitów. Nastepnie te piec bitów jest mapowane
na rozkladzie 32-punktowym. Po stronie
odbiornika dane sa dekodowane algorytmem
najwiekszego prawdopodobienstwa (Viterbi) w celu
oszacowania otrzymanych danych.
17
Koder c.d
Kodowanie 2-etapowe koder róznicowy koder
splotowy. Koder róznicowy zabezpiecza przed 180o
niejednoznacznoscia.Tylko 2 z 4 bitów jest
kodowanych
Koder splotowy wprowadza ograniczenia -nie
pozwala na sasiedztwo kolejnych wyjsc (dla
zadanych stanów (S0,S1,S2), np.(0,0,1) dop. 4 z 8
dróg (Y0,Y1,Y2)000,010,100,110)
Funkcjonalnie to 3-bit.rejestr przesuwny
polaczony ukladami logiki AND i XOR. Stanem
opóznienia nazywane sa trzy bity pamieci kodera
(S0, S1, S2), a bity wyjscia (Y0, Y1, Y2)
nazywane sa stanem sciezki. Dajac okreslony stan
opóznienia (S0, S1, S2) nie wszystkie stany
sciezki sa mozliwe w tym czasie. Np. majac stan
opóznienia (0, 0, 1) mozemy w nastepnym
interwale czasu otrzymac tylko 4 sciezki stanu
(0, 0, 0), (0, 1, 0), (1, 0, 0) i (1, 1, 0). W
ten sposób otrzymujemy strukture siatki. Koder
jest maszyna o skonczonej odpowiedzi, a wiec
mozna go przedstawic za pomoca schematu o
skonczonej odpowiedzi. Koder ma osiem mozliwym
stanów opóznienia. W dowolnym czasie koder moze
przyjac tylko jeden stan opóznienia (S0, S1,
S2). W nastepnej iteracji koder moze przyjac juz
tylko cztery stany opóznienia.
18
Differential Encoder Lookup Table
19
State Iable For Convolutional Encoder and Trellis
Diagram
W kazdym momencie kazdemu elementowi
opózniajacemu zostaje przypisana wartosc 1 lub
0.Istnieje 8 mozliwych kombinacji stanów tych 3
elementów opózn. W tabeli stanów mamy wypisanych
8 mozliwych stanów. Dodatkowo Tabela pokazuje, ze
dla 2-bitowego wejscia kodera elementy
opózniajace przechodza w nowe stany a takze
generuja wyjscia. Kazdy wezel wykresu kratowego
reprezentuje stani jest oznaczony
3-bitowa Wartoscia.Liniami oznaczone sa
przejsciaze stanu w jednym oknie czasowymdo
kolejnego.Dla kazdego 2-bitowego wejscia pokazane
sa niektóre drogi oznaczone 3-bitowym wyjsciem,
które zostaly wygenerowane gdy elementy
opózniajace przeszly do nastepnego
stanu.Np..wynikiem wejscia 01 jest
zmiana elem.opózn. 000 na 011 z wyjsciem101(linia
000 do 001 oznaczona 101).
20
Wykres kratowy (V.32 Modem Trellis Diagram)
Ukazuje on zaleznosc pomiedzy stanami opóznionymi
i biezacymi (delay and path states). Zauwaz, ze
nie wszystkie stany moga byc osiagniete ze
stanów poprzednich.
Wybór wlasciwej drogi (w czasie) zalezy od
biezacego stanu (path state) i od historii
stanów wraz z ich rzetel- noscia (tzw.miekka
decyzja wg.funkcji kosztu sum.Euclides.odleglosc
i zamiast odleglosci Hamminga bo dla szumu
bialego czym odleglejszy (.) na konstelacji tym
jest on mniej prawdopodobny )
21
V.32 konstelacja
Modulacja 32-punktowa charakteryzuje sie
wiekszym bit-error rate (BER) w porównaniu do
rozkladu 16-bit. Dzieje sie tak dlatego, ze
minimalna odl. Euklidesowa miedzy dowolnymi
dwoma punktami na 32-punktowym rozkladzie jest
bardzo mala, co zmniejsza margines szumu.
Jednakze kodowanie splotowe nie pozwala dwóm
nastepu- jacym po sobie symbolach byc w osmiu
sasiednich pozycjach od siebie. Dzieki temu
minimalny dystans miedzy dwoma punktami jest
zwiekszony i uzyskujemy wzrost wzmocnienia o 3
dB.
22
Dekodowania Viterbiego
Z 4 mozliwych dróg (path states) ta która ma
min.koszt jest wybierana (reszta
jest dezaktywowana)
Okreslony stan (delay state) m.b. osiagniety
tylko z 4 stanów poprzednich. Dekoder wybiera
tylko jeden tak aby uzyskac polaczenie pomiedzy
poprzednim i biezacym odcinkiem czasowym. To
polaczenie jest identyfikowane jako path
state.Kazda droga (path state) zwiazana z 3 bit z
5-ciu Dlatego1 droga identyfikuje 4(.) na
konstelacji symetrycznie umieszczone i jednakowo
max.odlegle
23
Implementacja dekodowania Viterbiego w modemie
V.32
Na poczatku kazdego interwalu czasowego wybiera
najblizszy(.) na konstel.i selekcjonuje 8
dróg. Jest to rozwiniecie wykresu kratowego (x
czas, y 8 mozliw.) Koder m. osiagac tylko 1,
ale dekoder zapamietuje wszystkie 8 az do
zdecydowania który. Funkcje kosztu sa
uaktualniane jako sumy odleglosci dla drogi i
wybierana z min.kosztem. Wybrana droga
przesledzona z powrotem daje poszukiwany stan
(Y0,Y1,Y2). Ten 3-bit. rezultat nie
identyfik. jednoznacznie 5-bit. wy.sygn. 4 (.) na
konstelacji odpowiadaj tym 3 bitom sa
porównywane z korespondujacymi w danym czasie i
wybierana 5-bit. wartosc najblizsza (ciagnie cala
historie z 16 interwalów czasowych)
Im wiecej okien czasowych uplynie tym, tym
decyzja jest lepsza. Istnieje zatem mozliwosc
wyboru pomiedzy dokladnoscia a czsem Optymalna
dl.(5-6)dl.kodera splotowego, stad 16 interwalów
czas.
Write a Comment
User Comments (0)
About PowerShow.com