Jukka Parviainen, 9.11.2006
Konvoluutio on tärkeä signaalinkäsittelyn operaatio, sillä se vastaa signaalin suodattamista.
Kahdelle lukujonolle voidaan laskea konvoluutio, katso esim. paperilaskarien #1 / 1:
esim_f = [2 -1] esim_h = [-1 2 1] esim_g = conv(esim_f, esim_h)
esim_f = 2 -1 esim_h = -1 2 1 esim_g = -2 5 0 -1
%[f, Fs, nbits] = wavread('kiisseli.wav');
Signaali f voidaan suodattaa suotimen impulssivasteella h ja saada siten lopputulokseksi suodatettu signaali g.
------- f ---> | h | ---> g -------
Luodaan aluksi suotimen impulssivastejono h fir1-komennolla. Impulssivastejonon pituus on 70 merkkiä (järkevät arvot 2..200). Toisessa argumentissa 2000 on alipäästösuotimen rajataajuus: tätä alemmat taajuudet jätetään ja korkeammat vaimennetaan.
Sen jälkeen konvoloidaan signaali suotimen impulssivasteen kanssa ja saadaan ulostulo.
h = fir1(70, 2000/(Fs/2)); g = conv(f, h);
t1 = [1 : length(f)]/Fs; t2 = [1 : length(g)]/Fs; figure(51); clf; plot(t1, f, 'b', t2, g, 'k'); grid on; xlabel('aika (s)'); legend({'Alkuperäinen f','Suodatettu g'}); title('Alkuperäinen ja suodatettu signaali');
Zoomataan samaan kohtaan, mistä /i/ oli poimittu edellisessä demossa.
Huomaa kuinka signaali "pehmenee" alipäästösuodatuksessa. Viive johtuu suotimesta ja on (70/2)/Fs sekuntia eli noin 1.6 ms.
figure(52); clf; plot(t1, f, 'b', t2, g, 'k'); grid on; xlabel('aika (s)'); legend({'Alkuperäinen f','Suodatettu g'}); title('Alkuperäinen ja suodatettu /i/'); dummy = f(indA:indB); % indA ja indB kohdasta dt_t1_m4.m dummyn = min(dummy); dummyx = max(dummy); axis([indA/Fs indB/Fs dummyn dummyx]);
Ylimmässä ikkunassa alkuperäisen signaalin spektrogrammi. Keskellä suotimen amplitudivaste. Alhaalla suodatetun signaalin spektrogrammi.
Jos käytetty alipäästösuodinta 2000 Hz:n rajataajuudella, korkeammat taajuudet pitäisi olla vaimentuneet.
figure(53); clf; subplot(3,1,1) specgram(f, [], Fs); colormap(gray); colorbar title('Sisääntulosignaalin f spektogrammi'); subplot(3,1,2) [H,W] = freqz(h,1,1024,Fs); plot(W, abs(H)); title('Suotimen amplitudivaste'); xlabel('taajuus (Hz)'); grid on; axis([0 W(end) -0.1 1.2]); subplot(3,1,3); specgram(g, [], Fs); colormap(gray); colorbar title('Suodatetun signaalin g spektogrammi');
soundsc(g, Fs); % suodatettu % soundsc(f, Fs); % alkuperäinen
Katso http://www.cis.hut.fi/Opinnot/T-61.3010/Demo/esim1.shtml