Úvod do číslicového zpracování signálů - UCZ 
Cvičení 9
Ukázka decimace | Ukázka interpolace | Reálné provedení decimace | Reálné provedení interpolace

kodovani ISO 8859-2
Úloha 9.1 "Ukázka decimace"

Generujte signál složený ze tří sinusových průběhů o následujících parametrech

Takto vzniklý signál převzorkujte tak, aby jeho nový vzorkovací kmitočet byl roven  fs2 = 1000 Hz. Zobrazte původní a převzorkovaný signál v časové oblasti se správnými měřítky na časových osách. Zobrazte také spektra obou signálů.


Řešení :
Protože nový vzorkovací kmitočet fs2 je nižší než původní fs1, jedná se o tzv. decimaci signálu. K tomuto účelu program Matlab disponuje funkcí decimate. Vstupními parametry této funkce je vstupní signál a číslo označené v nápovědě k této funkci jako R (Resample). Číslo R určuje, kolikrát bude vzorkovací kmitočet výstupního signálu nižší než vzorkovací kmitočet vstupního signálu (v tomto případě R = 8). Výstupním parametrem funkce je decimovaný signál se vzorkovacím kmitočtem fs2 = fs1/R .

Vygenerování a zobrazení požadovaného signálu

% generovani vstupniho signalu
f_1=100;
f_2=200;
f_3=1000;
fs=8000;
N=160;
n=(0:N-1);
signal=sin(2*pi*n*f_1/fs)+0.5*sin(2*pi*n*f_2/fs)+0.1*sin(2*pi*n*f_3/fs);
% zobrazeni vstupniho signalu v casove i frekvencni oblasti
figure(1);
subplot(2,1,1);
casove_meritko=n*(1/fs);
stem(casove_meritko,signal,'.');
title('vstupni signal');
xlabel('cas [s]');
subplot(2,1,2);
N_fft=160;
frekvencni_meritko=(0:(N_fft-1))*fs/N_fft;
stem(frekvencni_meritko,abs(fft(signal,N_fft))/(N_fft/2),'.');
xlabel('frekvence [Hz]');

 

Provedení decimace a zobrazení výsledného signálu

% decimace signalu pomoci funkce decimate
mira_decimace=8;
decimovany_signal=decimate(signal,mira_decimace);
% zobrazeni decimovaneho signalu v casove i frekvencni oblasti
figure(2);
subplot(2,1,1);
fs2=fs/mira_decimace;
casove_meritko2=(0:(length(decimovany_signal)-1))*(1/fs2);
stem(casove_meritko2,decimovany_signal,'.');
title('signal po decimaci');
xlabel('cas [s]');
subplot(2,1,2);
N_fft2=N_fft/mira_decimace;
frekvencni_meritko2=(0:(N_fft2-1))*fs2/N_fft2;
stem(frekvencni_meritko2,abs(fft(decimovany_signal,N_fft2))/(N_fft2/2),'.');
xlabel('frekvence [Hz]');


Úloha 9.2 "Ukázka interpolace"

Výsledný signál z úlohy 10.1 převzorkujte zpět z fs2 = 1kHz na fs1 = 8 kHz. K tomuto účelu použijte funkci interp. Zobrazte jak časový průběh, tak i spektrum signálu.


Řešení :
Funkce interp vyžaduje obdobné zadání parametrů jako funkce decimate. Parametr R zde udává, kolikrát má být vzorkovací frekvence výstupního signálu vyšší než vzorkovací frekvence vstupního signálu.

Provedení interpolace a zobrazení interpolovaného signálu

% interpolace decimovaneho signalu pomoci funkce interp
mira_interpolace=8;
interpolovany_signal=interp(decimovany_signal,mira_interpolace);
% zobrazeni interpolovaneho signalu v casove i frekvencni oblasti
figure(3);
subplot(2,1,1);
fs3=fs2*mira_interpolace;
casove_meritko3=(0:(length(interpolovany_signal)-1))*1/fs3;
stem(casove_meritko3,interpolovany_signal,'.');
title('signal po interpolaci');
xlabel('cas [s]');
subplot(2,1,2);
N_fft3=N_fft2*mira_interpolace;
frekvencni_meritko3=(0:(N_fft3-1))*fs3/N_fft3;
stem(frekvencni_meritko3,abs(fft(interpolovany_signal,N_fft3))/(N_fft3/2),'.');
xlabel('frekvence [Hz]');


Úloha 9.3 "Reálné provedení decimace"

V úloze 10.1 bylo pro provedení decimace signálu použito funkce decimate. Napište m-file, který tuto funkci nahradí. Jako "zkušební signál" zvolte průběh z úlohy 10.1. Při převzorkování z fs1 = 8000Hz na fs2 = 1000Hz, kde fs1/fs2=R, lze postupovat následujícím způsobem:


Průběh decimace v grafech:

Signál byl generován stejným způsobem jako v úloze 10.1

Frekvenční charakteristiky filtru s mezním kmitočtem fs1/2R

Signál po přefiltrování tímto filtrem (signál se při filtraci posune o skupinové zpoždění filtru - toto zpoždění bylo na tomto obrázku korigováno)

Signál po převzorkování (ponechání každého R-tého prvku)



Úloha 9.4 "Reálné provedení interpolace"

V úloze 10.2 byl signál interpolován pomocí funkce interp. Napište m-file, který tuto funkci nahradí. Jako vstupní signál zvolte výsledný průběh z úlohy 10.3. Při převzorkování z fs2 = 1000Hz na fs1 = 8000Hz, kde fs1/fs2=R, lze postupovat následujícím způsobem:


Průběh interpolace v grafech:

Signál doplněný nulami

Frekvenční charakteristiky filtru

Výsledný přefiltrovaný signál (interpolovaný signál), (signál se při filtraci posune o skupinové zpoždění filtru - toto zpoždění bylo na tomto obrázku korigováno)


Tento text vznikl jako podklad pro cvičení z předmětu UCZ na katedře teorie obvodů ČVUT. Pro přípravu těchto stránek bylo využito informací z webových stránek Číslicové Signály a Systémy (CSS), kde je také možno najít další zajímavé informace :-)

Jan Novotný: novotnj2@feld.cvut.cz 11.11.2001