270 likes | 367 Views
Počítače a programování 2. Přednáška 10 14.4.2014 Jiří Šebesta. TÉMA – Modelování v MATLAB u. Funkce v Matlabu Model komunikačního systému. Definice a použití funkcí v Matlabu je podobné jako v ANSI-C: function [out_1, out_2, …] = func _name (in _1, in_2, … )
E N D
Počítače a programování 2 Přednáška 10 14.4.2014 Jiří Šebesta
TÉMA – Modelování v MATLABu Funkce v Matlabu Model komunikačního systému
Definice a použití funkcí v Matlabu je podobné jako v ANSI-C: function [out_1, out_2, …] = func_name(in_1, in_2, …) – klíčové slovo function uvozuje definici funkce – výstupních parametrů může být několik (na rozdíl od ANSI-C) a jsou uspořádány ve vektoru (matici) – func_name definuje jméno funkce, definice funkce musí být uložena do souboru se jménem func_name.m – vstupní parametry jsou podobně jako v ANSI-C deklarovány v pořadí podle obsahu závorky za func_name – jména proměnných funkcí jsou platná jen během vykonávání funkcí – pokud není výsledek ukládán do vektoru při volání funkce, vrací se první parametr (do proměnné ans) Funkce v Matlabu (1/5)
Příklad funkce pro střední hodnotu a směrodatnou odchylku vektoru [mean, st_dev]=statistic(vect) Funkce v Matlabu (2/5) function [mean,st_dev] = statistic(vect) n = length(vect); mean = sum(vect)/n; st_dev = sqrt(sum((vect-mean).^2)/n); Volání funkce statistic() >> statistic([1.3 1.5 1.8 2.1 1.3 1.4 1.6 1.5]) ans = 1.562500000000000 >> [m, s] = statistic([1.3 1.5 1.8 2.1 1.3 1.4 1.6 1.5]) m = 1.562500000000000 s = 0.254644359843292 Příklad: statistic.m
Příklad funkce pro třídění kladných a záporných čísel [pos, neg]=posnegsort(vect) Funkce v Matlabu (3/5) function [pos, neg] = posnegsort(vect) v = length(vect); p = 1; n = 1; pos = []; neg = []; forx=1:v if vect(x) > 0 pos(p) = vect(x); p = p + 1; elseif vect(x) < 0 neg(n) = vect(x); n = n + 1; end end
Volání funkce posnegsort() Funkce v Matlabu (4/5) >> [P, N] = posnegsort(-5:5) P = 1 2 3 4 5 N = -5 -4 -3 -2 -1 >> [P, N] = posnegsort([1 7 6 3]) P = 1 7 6 3 N = [] Aby funkce nehavarovala v případě, že se výstupní vektor nenaplní (viz předchozí příklad volání), je nutné inicializovat výstupy jako prázdné vektory!!! Příklad: posnegsort.m
Příklad funkce pro normování matice k maximu m_out = norm_mat(m_in) Funkce v Matlabu (5/5) function m_out = norm_mat(m_in) maximum = max(max(m_in)); m_out = m_in/maximum; Volání funkce norm_mat() >> a = [1:5; 3:2:11; 4:8] a = 1 2 3 4 5 3 5 7 9 11 4 5 6 7 8 >> b = norm_mat(a) b = 0.0909 0.1818 0.2727 0.3636 0.4545 0.2727 0.4545 0.6364 0.8182 1.0000 0.3636 0.4545 0.5455 0.6364 0.7273 Příklad: norm_mat.m
Sestavte model komunikačního systému, který bude přenášet bitmapové obrázky pomocí modulace 16-QAM s Grayovým kódováním. Pro obrázky vytvořte rovněž algoritmus zdrojového kódování, který omezí jednotlivé barevné složky na 4 nejvýz-namnější bity. Při přenosu signálu uvažujte pouze aditivní šum s definovanou výkonovou úrovní. Model komunikačního systému (1/19) Obecný model komunikačního systému
Model komunikačního systému bude tedy zjednodušen. Model komunikačního systému (2/19) První operací je zdrojový kodér, který komprimuje originální obrázek tak, aby komprimovaný obrázek měl menší objem dat (ušetříme peníze za kratší pronájem přenosového kanálu) a na druhou stranu, aby komprese příliš neznehodnotila původní kvalitu obrázku. Použijeme velmi jednoduchou kompresi, kdy odstraníme nejnižší 4 bity každé barevné složky RGB obrázku (původní šířka dat pro každou barevnou složku u BMP obrázku je 8 bitů). Kompresní poměr tedy bude 2:1 (budeme mít jen polovinu bitů). V reálné praxi se používají mnohem účinnější komprese pro obrázky (např. JPEG), algoritmus je však podstatně složitější než jen bitové ořezání.
Načtení BMP obrázku a rozložení na jednotlivé barevné složky RGB, každá reprezentuje matici úrovní dané barvy pro jednotlivé pixely obrázku Model komunikačního systému(3/19) RGB = imread('Lady.bmp', 'BMP');% načtení BMP obr. do RGB R = double(RGB(:,:,1));% matice červené G = double(RGB(:,:,2));% matice zelené B = double(RGB(:,:,3));% matice modré Komprese ořezáním barevných složek na 4 nejvýznamnější bity CF = 4;% počet ořezaných bitů size(R)% získáme rozměr obrázku RC = floor(R/(2^CF));% ořezání provedeme dělením 2^CF a GC = floor(G/(2^CF));% odstraněním desetinné části BC = floor(B/(2^CF));% pomocí funkce floor() % RC, GC a BC jsou matice komprimovaných složek RGB % jejich prvky jsou v rozsahu 0-15 (jen 16 úrovní místo % původních 256 u originálního obrázku)
Uložení komprimovaného BMP obrázku pro kontrolu kvality (složení tří 2D matic pro barevné složky do společné 3D matice pomocí funkce cat() – vrstvy do hloubky odpovídají barevným složkám, hodnoty úrovně barev se musí nejprve posunout násobením 2^CF na nejvýznamnější bity a konvertovat na uint8 Model komunikačního systému(4/9) RGBC = cat(3, uint8(RC*CF), uint8(GC*CF), uint8(BC*CF)); imwrite(RGBC,'LadyC.bmp','BMP')%uložení BMP obrázku Originál Uvažovaná komprese CF=4 CF=5
Dalším krokem je modulace. Pro jednoduchost je použita 16-QAM, kdy každé 4 bity našeho obrázku jsou namapovány podle modulačního schématu na obrázku: Model komunikačního systému (5/19) Principiálně každý bod ve sché-matu definuje symbol, který se po určitý časový úsek přenáší přeno-sovým prostředním (rádiem nebo kabelem z vysílače na přijímač). U rádiového sinusového signálu se podle symbolů mění amplituda (vzdálenost od středu v modulač- ním schématu) a počáteční fáze (úhel x-ové osy a spojnici středu k symbolu) u(t) = A·sin(2ft + ). Amplitudu a fázi lze také vyjádřit v komplexní rovině reálnou složkou I a imaginární složkou Q (skutečně v modulátoru vedou dva „dráty“ I a Q).
Funkce pro modulaci (mapování symbolů do 16-QAM diagramu) Model komunikačního systému(6/19) function sig = QAM16mapping(in)%in je matice [mr, mc] = size(in);%rozměry matice for r=1:mr%dva vnořené cykly pro každý řádek for c=1:mc% a sloupec switch in(r,c)% podle hodnoty na daném pixelu case {0, 1, 3, 2}% se mapuje hodnota pro sigI(r,c)=-3;% I složku výst. signálu case {4, 5, 7, 6} sigI(r,c)=-1; case {12, 13, 15, 14} sigI(r,c)=1; case {8, 9, 11, 10} sigI(r,c)=3; end end end
Funkce pro modulaci pokračování pro Q složku a vytvoření celého komplexního signálu Model komunikačního systému(7/19) for r=1:mr for c=1:mc switch in(r,c) case {0, 4, 12, 8} sigQ(r,c)=-3; case {1, 5, 13, 9} sigQ(r,c)=-1; case {3, 7, 15, 11} sigQ(r,c)=1; case {2, 6, 14, 10} sigQ(r,c)=3; end end end sig = sigI+i*sigQ;
Volání mapovací funkce (modulace 16-QAM) pro jednotlivé matice komprimovaných barevných složek a ukázka modulovaného signálu v I/Q rovině pro červenou složku Model komunikačního systému(8/19) RS = QAM16mapping(RC); GS = QAM16mapping(GC); BS = QAM16mapping(BC); figure(1) plot(RS,'b*') grid on xlim ([-4 4]) ylim ([-4 4]) xlabel('I') ylabel('Q')
Dalším krokem je přenos signálu komunikační prostředím. To lze v nejjednodušším případě modelovat aditivním šumem přidaným k signálu, který má Gaussovo normální rozdělení a to jak v I tak v Q rovině (toto zjednodušení lze udělat pro kanál typu kabel nebo přímá viditelnost mezi rádiovým vysílačem a přijímačem). Úroveň šumu pak definujeme násobící konstantou noiselev Model komunikačního systému (9/19) noiselev = 1.5;% úroveň šumu noise = noiselev*randn(mr,mc)+i*noiselev*randn(mr,mc); %aditivní šum má charakter komplexního náhodného signálu %s normálním rozdělení RSN = RS+noise;%přidání šumu k červenému signálu noise = noiselev*randn(mr,mc)+i*noiselev*randn(mr,mc); GSN = GS+noise; %přidání šumu k zelenému signálu noise = noiselev*randn(mr,mc)+i*noiselev*randn(mr,mc); BSN = BS+noise;%přidání šumu k modrému signálu
Z hlediska modelu je jedno, která barva bude přenášena dřív, protože šum působí stejně na všechny části užitečného signálu (v čase se jeho průměrný výkon nemění) Model komunikačního systému (10/19) Zobrazení zašuměného signálu pro noiselev = 0.35 % pro červenou figure(2) plot(RSN,'b.') grid on xlim ([-4 4]) ylim ([-4 4]) xlabel('I') ylabel('Q') Takto zašuměný signál je na vstupu demodulátoru
Posledním krokem je proces demodulace přijatého zašumě-ného signálu. Je to proces opačný k modulaci. Pro daný přijatý vzorek signálu je nutno zpětně přiřadit kombinaci 4 bitů podle modulačního schématu. Model komunikačního systému (11/19) Je proto třeba stanovit rozhodovací úrovně pro I a Q složku signá-lu (červené hranice v obrázku) a sestavit příslušný rozhodovací algoritmus.
Funkce rozhodovacího algoritmu demodulátoru pro 16-QAM Model komunikačního systému (12/19) function data = QAM16demapping(sig) [mr, mc] = size(sig); for r=1:mr for c=1:mc if real(sig(r,c)) < -2 dr = -3; elseif real(sig(r,c)) < 0 dr = -1; elseif real(sig(r,c)) < 2 dr = 1; elsedr = 3; end if imag(sig(r,c)) < -2 di = -3; elseif imag(sig(r,c)) < 0 di = -1; elseif imag(sig(r,c)) < 2 di = 1; elsedi = 3; end
Pokračování funkce rozhodovacího algoritmu pro 16-QAM Model komunikačního systému (13/19) if dr == -3 if di == -3 data(r,c) = 0; elseif di == -1 data(r,c) = 1; elseif di == 1 data(r,c) = 3; else data(r,c) = 2; end elseif dr == -1 if di == -3 data(r,c) = 4; elseif di == -1 data(r,c) = 5; elseif di == 1 data(r,c) = 7; else data(r,c) = 6; end … end end end
Volání funkce rozhodovacího algoritmu pro 16-QAM a zpětná rekonstrukce BMP obrázku a jeho uložení Model komunikačního systému (14/19) RD = QAM16demapping(RSN); GD = QAM16demapping(GSN); BD = QAM16demapping(BSN); RGBD = cat(3, uint8(RD*2^CF), uint8(GD*2^CF), uint8(BD*2^CF)); imwrite(RGBD,'LadyD.bmp','BMP') V reálném komunikačním systému je vše komplikovanější, na straně vysílání se musí sestavit vhodný rámec dat, označit hlavič-kami (aby se vědělo, kde vlastně symboly pro obrázek začínají. Na straně přijímače pak musí být zajištěna synchronizace nosné frekvence a fáze, časového intervalu symbolu a rámce (opět od jakých dat se musí skládat výsledný obrázek). Tento jednoduchý model však umožňuje základní ohodnocení komunikačního kanálu při dané úrovni šumu.
Příklady výsledků pro přenesený obrázek pro různé úrovně šumu Model komunikačního systému (15/19) noiselev = 0.20
Příklady výsledků pro přenesený obrázek pro různé úrovně šumu Model komunikačního systému (16/19) noiselev = 0.30
Příklady výsledků pro přenesený obrázek pro různé úrovně šumu Model komunikačního systému (17/19) noiselev = 0.40
Příklady výsledků pro přenesený obrázek pro různé úrovně šumu Model komunikačního systému (18/19) noiselev = 0.50
Příklady výsledků pro přenesený obrázek pro různé úrovně šumu Model komunikačního systému (19/19) noiselev = 0.60 Příklad: Ex138.m + QAM16mapping.m + QAM16demapping.m
TÉMA NÁSLEDUJÍCÍ PŘEDNÁŠKY Grafické uživatelské rozhraní DĚKUJI ZA POZORNOST