Struktura ALE (Adaptive Line Enhancer) je Obr. 5.1
Jedná se vlastně o LMS prediktor. Oproti Obr. 3.2 je uvedená
struktura trochu obecnější.
Předně umožňuje volit zpoždění ve větvi s adaptivním filtrem
(u Obr. 3.2 je toto zpoždění omezeno pouze na jeden vzorek).
Dále struktura Obr. 3.2
byla uvedena pro fixní řád adaptivního filtru.
Tento rozdíl však není tak podstatný, neboť odvození rovnic bylo
provedeno pro obecný řád.
Jelikož jsem v minulých cvičeních používal označení pro
řád celé struktury prediktoru, učiním tak i nyní.
Řád adaptivního filtru označím
.
Platí tedy
V tomto cvičení se pomocí ALE budeme snažit potlačit harmonické rušení (rušení nemusí být zrovna harmonické, důležité je aby i vzdálenější vzorky rušení byly silně korelovány).
Nicméně úloha se dá různě modifikovat.
Můžeme otočit úlohu užitečného signálu a rušení.
Například budeme chtít získat harmonický signál (může se jednat o nějakou
modulaci). V tomto případě je pro nás výstupem predikce .
Nebo můžeme chtít určit frekvenci harmonického signálu
(to jsme zkoušeli na 3. cvičení).
Označíme vektory
![]() |
(5.1) |
Cvičení 5.0:
Uvádím zde skript pro generování vstupního signálu:
N = 500; % uzitecny signal u = zeros(N,1); % nulovy % ruseni n = 1:N; Wr = pi/4; r = sqrt(2)*sin(Wr*n'); % efektivni hodnota 1 % vstupni signal x = u + r;Skript implementující ALE napište sami, viz. Obr. 5.1 a rovnice (5.2), (5.3). Nevíte-li si rady vzpomeňte si (podívejte se) na 3. cvičení, kde jsem uváděl skript pro prediktor (odlišnost je pouze v možnosti nastavit jiná zpoždění pomocí
figure(1) subplot(4,2,1); % vyneseni modulovych spekter pri % zachovani meritek os W = linspace(0,2*pi,N); plot(W/pi,abs(fft(x)),'b-'); xlabel('W/pi') ylabel('|X|') osy = axis; subplot(4,2,3); plot(W/pi,abs(fft(e)),'r-'); xlabel('W/pi') ylabel('|E|') axis(osy); subplot(2,2,3); % vyneseni modulovych frekvencnich charakteristik % (v ustalenem stavu) |H(exp(j*W))| (celeho ALE) % a |H_a(exp(j*W))| (adaptivniho filtru) WN =100; W = linspace(0,2*pi,WN); B = [1; zeros(D-1,1); w(:,N)]; A = [1; zeros(M,1) ]; H = freqz(B,A,W); plot(W/pi,abs(H),'b-'); hold on B_a = [ w(:,N) ]; A_a = [ 1; zeros(M_a,1) ]; H_a = freqz(B_a,A_a,W); plot(W/pi,abs(H_a),'r-'); plot(W/pi,ones(WN,1),'g-'); hold off xlabel('W/pi') ylabel('|H| (modre), |H_a| (cervene)')Výsledky:
![]() |
![]() |
Cvičení 5.1: Zpoždění a řád
volte jako v předchozím cvičení.
Užitečný signál
nyní modelujte jako bílý gausovský proces s
nulovou střední hodnotou. Varianci užitečného signálu
volte podle řádu adaptivního filtru:
pro
řád
a
pro řád
(uvidíte, že u vyššího
řádu si můžete dovolit vyšší rozptyly
).
Vyneste výsledky a porovnejte jako v cvičení 1 (všimněte si rozmístění
nul a pokuste se ho vysvětlit).
Vypočtěte porovnejte (pro obě volby )
dosažené SNRE (Signal to Noise Ratio Enhancement).
Dále si vyneste predikci
(výstup při obrácení úlohy
užitečného a rušivého signálu).
Pro výpočet SNRE uvádím skript. Je hodně zjednodušený například se zde započítává i přechodový děj na začátku, dále případné zesílení nebo zkreslení vstupního signálu se započítává do výkonu šumu (na druhou stranu i tyto věci nám mohou vadit a přesnější výpočet SNRE by nám je utajil)
Pu1 = sum(u.^2)/N; % výkon uzitecneho sig. na vstupu Pn1 = sum((x-u).^2)/N; % výkon ruseni na vstupu Pu2 = sum(u.^2)/N; % výkon uzitecneho sig. na vystupu Pn2 = sum((e-u).^2)/N; % výkon ruseni na vystupu SNR1 = 10*log(Pu1/Pn1); SNR2 = 10*log(Pu2/Pn2); SNRE = SNR2-SNR1; % kdyz nechcete vysledky lovit v promptu Matlabu % muzete si je vepsat do titulku nejakeho obrazku napriklad tito zpusobem: title(['SNR1 = ' num2str(SNR1) ', SNR2 = ' num2str(SNR2) ', SNRE = ' num2str(SNRE)]);Výsledky:
![]() |
![]() |
![]() |
Poznámka: Tím, že adaptivní filtr propustí harmonické rušení
(tak aby se na chybovém výstupu vykompenzovalo) umožní minimalizaci
rozptylu na chybovém výstupu
(
). Kompenzace je zde možná, protože harmonické rušení
se dá velice dobře predikovat
5.1,
neboť jeho vzorky jsou silně korelovány (víme, že na bezchybnou predikci čistého harmonického
signálu stačí prediktor 2. řádu).
Tento způsob však nefunguje pro bílý šum , neboť jeho korelace
mezi různými vzorky je vždy nulová.
Bílý šum se proto nedá vůbec predikovat (nejlepší predikce
je 0 - jakákoli netriviální lineární kombinace minulých vzorků dává
horší (větší)
). Adaptivní filtr se tedy snaží
co nejvíce potlačit (docílit nulové predikce).
Pravdivost těchto výroků se dá velice dobře ilustrovat na vynesených frekvenčních charakteristikách. Vidíme, že adaptivní filtr v ustálení pro vyšší řád propouští takřka pouze harmonické rušení (se zesílením 1), viz. frekvenční charakteristika adaptivního filtru na Obr. 5.5 a predikce Obr. 5.6.
Cvičení 5.2: Stáhněte si
řečový signál
a použijte ho jako užitečný signál .
Řád adaptivního filtru volte
.
Zpoždění volte
Vyneste si autokorelační funkci pro řečový signál .
Jaká volba
je optimální? Ověřte optimální volbu
výpočtem
SNRE.
Uvádím zde skript pro vynesení spektrogramů pro ,
a
,
který zachovává přiřazení barev.
[U,F,T] = specgram(u); Ul = 20*log(abs(U)); [X,F,T] = specgram(x); Xl = 20*log(abs(X)); [E,F,T] = specgram(e); El = 20*log(abs(E)); T = 2*T; % napraveni casove osy u specgram maxl = max(max([Ul;Xl;El])); % trochu náročné, ale krátké minl = min(min([Ul;Xl;El])); Ul = (Ul-minl)/(maxl-minl); Xl = (Xl-minl)/(maxl-minl); El = (El-minl)/(maxl-minl); subplot(2,2,1); imagesc(T,F,Ul); caxis([0,1]); axis('xy'); xlabel('n'); ylabel('|U| [dB]'); subplot(2,2,2); imagesc(T,F,Xl); caxis([0,1]); axis('xy'); xlabel('n'); ylabel('|X| [dB]'); subplot(2,2,3); imagesc(T,F,El); caxis([0,1]); axis('xy'); xlabel('n'); ylabel('|E| [dB]');
![]() |
![]() |
Poznámka: Všimněte si, že pro je řečový signál na výstupu
výrazně potlačen (oproti vstupu
), viz. moduly spekter, dosažené
SNRE a spektrogramy na Obr. 5.7.
Je to tím, že blízké vzorky řeči jsou významně korelovány (narozdíl od
bílého šumu v předchozím cvičení).
Vzpomeňte si, jak jste na 2. cvičení modelovali řeč jako AR proces
10. řádu.
Pro můžete pozorovat výrazné zlepšení, viz. moduly spekter,
dosažené SNRE a spektrogramy na Obr. 5.8.
Důvod je ten, že korelace mezi příspěvkem řeči na vstupu
a na zpožděních adaptivního filtru
již není
tak vysoká. Řeč se tedy pro
hůře predikuje než pro
a
proto se na chybovém výstupu hůře kompenzuje.
Čím méně jsou příspěvky užitečného signálu korelovány s příspěvky
užitečného signálu na zpožděních adaptivního filtru tím lepších
výsledků dosáhneme. Tento fakt je ilustrován na porovnání průběhů
autokorelační funkce řečového signálu
:
,
a závislosti dosaženého SNRE na zpoždění
uvedeném na
Obr. 5.9.
![]() |