Výsledky implementace algoritmu spektrálního odečítání



Algoritmus spektrálního odečítání jsem implementoval v programu MATLAB. Soubory s implementací je možno stáhnout v oddílu Download. Demo algoritmu se spouští souborem spdemon.m v programu MATLAB.

Popis prostředí :


Příklady výsledků :


Následuje tabulka výsledků:
Signál - s1.bin,
N=10000.
 
GSnr (dB) Alpha Lambda SSnrIn (dB) SSnrOut (dB) Poznámka
5 4 1 -4,5 -1,6 Příklad 2
10 6 1 0,5 3,0
15 3 1 5,5 6,4
20 3 1 10,5 11,4
25 2 1 15,5 15,4
5 1 0,2 -4,6 0,1 Příklad 1
10 5 0,9 0,4 3,1 Příklad 3
15 3 0,9 5,4 6,4
25 3 1,1 15,5 15,5

V první části tabulky jde o odečítání amplitudových spekter (Lambda=1). V druhé části jsem optimalizoval oba parametry Alpha i Lambda tak, aby bylo dosaženo maximálního SSnrOut. Je vidět, že při větším odstupu signál-šum směsi SSnrIn, tato metoda potlačení šumu selhává, ve směsi je malý podíl šumu a proto lze špatně odhadnout spektrum šumu. Navíc se při SSnrIn=15 začíná projevovat zkreslení signálu samotným průchodem algoritmem (segmentace a opětovné skládání). Tento fakt jsem prověřoval při zadaných parametrech: GSn=100dB, Alpha=0,0001 (při spektrálním odečítání neodečítám téměř nic), Lambda=1,  SSnrIn=90,45 , SSnrOut=25,21.

Další tabulka ukazuje, vliv N na kvalitu potlačení šumu. Při delších signálech může být porušen předpoklad stacionarity šumu. Jeden odhad spektra šumu nevystihuje změny šumu v průběhu celého signálu. Bylo by pak lepší odhadovat spektrum šumu rekurentně, nikoliv najednou z celého signálu.
 
N GSnr Alpha Lambda SSnrIn SSnrOut
10000 10 5 0,9 0,4476 3,143
15000 10 5 0,9 2,38 4,769
20000 10 5 0,9 1,576 3,842