%Teknillinen korkeakoulu
%Tietoliikennelaboratorio
%Seppo Saastamoinen 8.11.2007

%S-72.1110 SIGNAALIT JA JÄRJESTELMÄT, S-07
%Laboratoriotyö 2, osa C: RC-alipäästösuodatin
%MAKRO: RC2007.m

%Nollataan muuttujat ja suljetaan kuvat;
clear all; close all;

Teekkari1 = 'nimi opiskelijanumero';
Teekkari2 = 'nimi opiskelijanumero';

%Asetetaan näytenopeus Fs ja aika-alue sopiviksi eli
Fs = 11025; Ts = 1/Fs; t = 0:Ts:1-Ts;

%Aikavakion tau asetus:
%tau = arvo?; %Esim. 123e-7 eli 123*10^-7;

%Tässä alla on konvoloitava suorakaidepulssi, ts. sama
%pulssi kuin esiselostuksessa oli laskettavana. Pikku viive
%eli -Ts on lisätty, jotta pulssi olisi helpommin havaittavissa
%aika-alueessa.
xt = rectpuls(t-2.5*tau-Ts,5*tau); 

%Lasketaan xt:n näytemäärä eli
N = max(size(xt));

%[xt,Fs] = wavread('c:\Temp\Sinkut\kissa.wav');
%N = max(size(xt)); Ts = 1/Fs; t = 0:Ts:(N-1)*Ts;

%Alla on impulssivasteen kaava esiselostuksen perusteella eli
ht = (1/tau)*exp(-1*t/tau);

%Rajataan impulssivasteen kesto sopivasti, jotta
%konvoluution laskeminen ei kestäisi pitkään.
ht = ht(1:1680);

%Lasketaan xt:n ja ht:n konvoluutio:
yt = conv(xt,ht)/(N+max(size(ht))); %xt:n ja ht:n konvoluutio;

%Konvoluution jäljiltä yt:n pituus on xt:n pituus plus
%ht:n pituus - 1. Jotta yt olisi samanmittainen xt:n kanssa
%otetaan yt:stä xt:n mittainen osuus:
yt = yt(1:N);

%Asetellaan arvoja tulostusta varten:
f0xt = Fs/max(size(xt));
fxt = 0:f0xt:Fs-f0xt;
Xf = 2*abs(fft(xt))/N;

f0ht = Fs/max(size(ht));
fht = 0:f0ht:Fs-f0ht;

%Tässä lasketaan siirtofunktion itseisarvo:
Hf = abs(1./(1+i*2*pi*tau*fht));

fyt = fxt;
Yf = 2*abs(fft(yt))/N;

%Haetaan päiväys ja kellonaika tulostusta varten eli
h = fix(clock);

%Tulostusosio, 6 kuvaa, 2 rinnakain ja 3 allekain:
subplot (3,2,1); plot (t,xt); 
axis ([0 max(t) 1.2*min(xt) 1.2*max(xt)]);
xlabel ('Aika/s'); ylabel ('xt');
grid on; zoom on;

title({['Kurssi: S-72.1110 S-2007 Laboratoriotyö 2, osa C'];...
      ['500 Hz:n RC-alipäästösuodattimen simulointi'];...    
      ['Tekijät: ' Teekkari1 ' ja ' Teekkari2];...
      [int2str(h(3)) '.' int2str(h(2)) '.' int2str(h(1)) ' klo '...
          int2str(h(4)) ':' int2str(h(5)) ':' int2str(h(6))]});

subplot (3,2,2); plot (fxt,Xf); 
axis ([0 Fs/2 -0.1*max(Xf) 1.2*max(Xf)]);
xlabel ('Taajuus/Hz'); ylabel ('Xf');
grid on; zoom on;

subplot(3,2,3); plot(t(1:max(size(ht))),ht);
xlabel ('Aika/s'); ylabel ('ht');
axis([0 (max(size(ht))-1)*Ts -0.05 1.2*max(ht)]);
grid on; zoom on;

subplot (3,2,4); plot (fht,Hf); 
axis ([0 Fs/2 -0.1*max(Hf) 1.2*max(Hf)]);
xlabel ('Taajuus/Hz'); ylabel ('Hf');
grid on; zoom on;

subplot(3,2,5); plot(t,yt);
axis([0 max(t)-Ts 1.2*min(yt) 1.2*max(yt)]);
xlabel ('Aika/s'); ylabel ('yt');
grid on; zoom on;

subplot (3,2,6); plot (fyt,Yf); 
axis ([0 Fs/2 -0.1*max(Yf) 1.2*max(Yf)]);
xlabel ('Taajuus/Hz'); ylabel ('Yf');
grid on; zoom on;

shg;


%HUOM! Alla olevat käskyt kannattaa kopioida Matlabin komentoikkunaan
%ja ajaa niitä siellä!
%soundsc(xt,Fs);
soundsc(yt,Fs);