V úloze identifikace je naším cílem určit neznámý systém (jeho impulsovou odezvu), máme-li k dispozici jeho vstup a výstup. To můžeme učinit paralelním připojením adaptivního filtru, jak je naznačeno na Obr. 4.2.
LMS se snaží nastavovat váhy adaptivního filtru tak, aby byl
výkon na chybovém výstupu minimální. Je zřejmé, že výkon chyby
bude minimální právě tehdy, když impulsové odezvy obou systémů budou
shodné. Impulsovou odezvu neznámého systému pak určíme z vah
adaptivního filtru. Úloha může být dále komplikována přítomností
aditivního šumu
. Správná funkce struktury Obr. 4.2 je pak
podmíněna nekorelovaností
a
.
Cvičení 4.0: Vygenerujte si signál jako bílý gausovský šum s nulovou
střední hodnotou a rozptylem
.
Vygenerujte si signál
jako bílý gausovský šum s nulovou
střední hodnotou a rozptylem
.
Délky obou posloupností volte
vzorků.
Neznámý systém budeme reprezentovat vektory koeficientů čitatele a jmenovatele
přenosové funkce plant_B a plant_A
4.1.
Nastavte plant_B = [ 0.5; -1.5 ] a
plant_A = [ 1; 0 ] (FIR řádu 1).
N = 500; % pocet vzorku M = 1; % rad Adaptivniho filtru % kyticka plant_b1 = 0.5; plant_b2 = -1.5; plant_B = [plant_b1;plant_b2]; % FIR, rad 1 plant_A = [1;0]; u_sigma = 0.3; % rozptyl^0.5 aditivniho ruseni x = randn(N,1); % bily sum u = u_sigma*randn(N,1); % aditivniho ruseni
Cvičení 4.1: Napište m-file implementující strukturu Obr. 4.2. Pro
libovolný řád adaptivního filtru .
Konvergenční konstantu LMS algoritmu
volte
mu = 0.1/((M+1)*rozptyl_x[n]).
Vyneste si průběh vah na čase a ověřte, že se blíží správným
hodnotám.
d = filter(plant_B,plant_A,x) + u;
Výsledky:
Cvičení 4.2: Jako buzení použijte
místo bílého šumu AR proces druhého řádu (barevné buzení).
Póly all-pole filtru v AR modelu volte komplexně sdružené
.
Normujte rozptyl AR procesu na jedna.
Vyneste si opět průběhy vah a porovnejte je s původními průběhy pro buzení bílým šumem. Sledujte rozdíly v rychlosti konvergence, pokuste se objasnit příčiny pozorovaného chování LMS.
Vygenerovat vzorků AR procesu, máme-li zadané póly by měl umět již každý
(dělali jsme to třeba již na 1. cvičení, a v druhém jsme AR procesy
důkladně popsali). Časově problematická je ale část normování rozptylu
(integrace), proto zde uvádím celý m-file.
x_pol_r = 0.95; % poloha polu barevne buzeni x_pol_W = pi/6; a = x_pol_r*exp(j*x_pol_W); x_vykon = 2 / (abs(a)^2-1) * real( a/(a-conj(a))/(a^2-1) ); x_A = [1, -2*x_pol_r*cos(x_pol_W), x_pol_r^2]; x_B = [1, 0, 0]/sqrt(x_vykon); x = filter(x_B,x_A,randn(N,1));
Výsledky:
Poznámka: Proč je konvergence u barevného buzení tak špatná?
Volíme-li příliš malé, zajistíme tím konvergenci (stabilitu)
adaptivního
filtru, ale filtr se nebude stíhat dostatečně rychle adaptovat na
změny v signálu (zde změny identifikovaného systému).
Z tohoto hlediska se snažíme volit
co největší.
To ale na druhou stranu může vést k divergenci filtru.
Z přednášky víte, že horní mez pro volbu
(aby LMS bylo ještě
stabilní) je nepřímo úměrná výkonu (rozptylu) buzení
(čím větší výkon buzení, tím menší
musíme volit).
Je-li výkon (PSD) buzení soustředěn pouze v úzkém pásmu
(Jako u našeho barevného buzení), a
nastavíme na onu horní mez, bude konvergence v tomto pásmu rychlá.
Ale z hlediska ostatních pásem bude konvergence pomalá, neboť zde
je filtr vybuzen minimálně a volba
je z hlediska těchto pásem
příliš konzervativní (nízká).
Při buzení bílým šumem je konvergence
optimální (ve všech pásmech stejně rychlá).
Tedy ačkoli pro oba případy filtr konverguje v průměru stejně
rychle (obě buzení mají stejný rozptyl),
u barevného buzení se musí čekat i na ty nejpomalejší pásma, proto zde
konvergence trvá déle.
Toto vysvětlení je dosti vágní a sedí hlavně pro filtry vyšších řádů. u filtrů nižších řádů bychom už museli přesněji vymezit co je to ono frekvenční pásmo. Tuto úvahu se snaží ilustrovat následující cvičení.
Cvičení 4.3: Vygenerujte realizací
(doslova musíte vygenerovat
realizaci
a
a z nich
-krát vygenerovat
a
)
Vyneste průběh
(MSE - Mean Square Error)
na
pro oba typy buzení
(operátor
uplatněte tak
jak je psáno, tedy přes realizace nikoli přes čas - nyní žádnou stacionaritu
a ergodicitu nepředpokládáme).
Až průběhy
vynesete zjistíte, že se velmi podobají
exponenciálám. Z tohoto důvodu je lepší vynášet v decibelech,
exponenciály přejdou na přímky a vše je hned lépe vidět.
Uvádím m-file pro generování více realizací:
R = 200; % pocet realizaci (pouze pro vypocet E[.]) X = zeros(N,R); U = zeros(N,R); D = zeros(N,R); for r = 1:R genx; % Vas skript pro generovani x[n], u[n], a d[n] X(:,r) = x; U(:,r) = u; D(:,r) = d; end; % vypocet R realizaci e[n] E = zeros(N,R); for r=1:R x = X(:,r); d = D(:,r); ident; % Vas skript pro generovani e[n] z x[n] a d[n] E(:,r) = e; end;a skript na výpočet MSE:
mse = sum(E.^2')'/R;Výsledky:
![]() |
Další precizování důvodů rozdílné konvergence v závislosti na buzení je uvedeno v dodatku 4.3 o chybovém povrchu. Tento dodatek trochu předbíhá přednášku, kde se o chybovém povrchu dozvíte později, ale zdálo se mi, že se přece jenom na toto cvičení (alespoň zmínka) hodí tak si ho prohlédněte (je tam spousta obrázků).
Cvičení 4.4: Nyní nám bude opět stačit jediná realizace a vpřípadě buzení
se omezíme na bílý šum.
Jako neznámý systém použijte integrátor s pólem v
.
Vyneste si frekvenční charakteristiku odpovídající nastavení
adaptivního filtru a porovnejte ji s charakteristikou
identifikovaného systému (integrátoru).
Sledujte jak závisí shoda obou charakteristik na volbě řádu
adaptivního filtru.
Problém je naznačen na obrázku Obr. 4.7
Jde nám o to aby obsahoval pouze hlas řidiče nikoli
mluvčího na druhém konci linky. Vidíte, že se jedná opět o úlohu
identifikace. Takže můžete použít skripty vytvořené v předchozích
cvičeních akorát zaměníte použité signály.
Cvičení 4.5: Jako (mluvčí na vzdáleném konci linky) použijte
tento řečový signál.
Jako
(řidič) použijte
tento řečový signál.
Oba signály ořízněte na délku
vzorků.
Impulsovou odezvu od reproduktoru k mikrofonu (identifikovaný systém)
volte jako zpoždění o 4 vzorky.
Řád adaptivního filtru volte
.
Vyneste si spektrogramy signálů
,
,
,
.
Výsledky:
![]() |