%Teknillinen korkeakoulu
%Tietoliikennelaboratorio
%Seppo Saastamoinen 5.12.2007

%S-72.1110 Signaalit ja järjestelmät, S-2007
%Laboratoriotyöt, työ 3a, kohinan tutkiminen
%MAKRO: auto2007.m

clear; close all; %Nollataan muistit ja kuvat

Teekkari1 = 'Teemu Teekkari 12345A';
Teekkari2 = 'Liisa Teekkari 54321B';

%Tässä työssä haetaan 3 satunnaissignaalia tarkasteltaviksi. Tulostuksista nähdään
%signaali aika- ja taajuusalueessa, signaalin autokorrelaatio ja amplitudijakauma.
%Työohjeessa on mainittu, mitä tuloksille tulee tehdä.

%Signaalin haku muistista
%Haetaan signaalit sat1, sat2 ja sat 3 vuoron perään internetistä.
%Muista muuttaa sat1:n paikalle molemmissa alla olevissa riveissä sat2 ja sat3 jatkossa!
%MUISTA muuttaa myös tulostusotsikkoa vastaamaan signaalia!

%Esimerkki, muuta tiedostonimi oikeaksi myös xt1-rivillä!
load 'D:\Matlab\sat1.txt'; %Satunnaisignaalin haku. 

xt1 = sat1; %Siirretään vektoriin xt1 signaalin sisältö.
Nx = max(size(xt1));

%Aika-alue
%Nämä arvot tiedetään ennakolta, älä muuta arvoja!
Fs = 1024; %Näytenopeus 1024 Hz
t = (-4:1/Fs:4-1/Fs); %Aikavektori -4 sekunnista noin +4 sekuntiin.
N = max(size(t)); %Lasketaan aikavektorin näytemäärä.

%Signaali taajuusalueessa
Xf = 2*abs(fft(xt1))/N; %Signaalin spektri 1-puoleisessa taajuusalueessa
fs1 = Fs/N; %Taajuuden askellusväli
f = 0:fs1:Fs-fs1; %Taajuusalue tulostusta varten

%Autokorrelaatio
%Tässä osuudessa lasketaan autokorrelaatio signaalille xt1 konvoluution avulla. Eli xt1:stä verrataan
%itseensä eri viivearvoilla. Temppu tehdään tässä konvoluution avulla. Siksi tehdään xt2 eli käännetty xt1.
%Konvoluutio kääntää xt2:n takaisin xt1:seksi.

xt2 = fliplr(xt1); %Kääntää vektorin xt1 toisinpäin
yt = conv(xt1,xt2)/N; %xt:n ja yt:n konvoluutio
t2 = (-8+1/Fs:1/Fs:8-1/Fs); %Aikavektori yt:lle, jotta vektoreiden pituudet olisivat samat.

%Signaalin amplitudijakauma
v = 0.01; %Määritellään jakauman askellusväli, jolta alueelta osumat lasketaan
a = (-4:v:4); %Aika-alueen amplitudijakauma-alue -4 - +4, askellusväli v
H1 = (1/v)*hist(xt1,a)/N; %Jakauman laskenta

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

%Tulostusosio

subplot (2,2,1); plot(t,xt1); xlabel ('Aika/s'); ylabel ('Signaali/V');
axis([-4.5 4.5 1.2*min(xt1) 1.2*max(xt1)]); grid on; zoom on;

%Muista muuttaa seuraavan titlen X haettavan signaalin mukaiseksi!

title({['Kurssi: S-72.1110 S-2007, Laboratoriotyö 3, osa A'];...
      ['Satunnaissignaalianalyysi, signaali X'];...    
      ['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(2,2,2); plot (f,Xf); axis ([-50 Fs/2 -0.01 1.2*max(Xf)]);
xlabel ('Taajuus/Hz'); ylabel ('Amplitudi/ V/Hz');
grid on; zoom on;

subplot(2,2,3); plot(t2,yt); axis([-8.5 8.5 1.2*min(yt) 1.2*max(yt)]);
xlabel ('Aika/s'); ylabel ('Signaalin autokorrelaatio/W');
grid on; zoom on;

subplot(2,2,4); plot(a,H1); axis([-4.2 4.2 0 1.2*max(H1)]);
xlabel ('Signaalin amplitudi/V');ylabel('Todennäköisyys'); 
grid on; zoom on;

shg; %Tulostusnäyttö päällimmäiseksi näytössä.

%LUE ALLA OLEVA !
%Lasketaan työpöytä- eli komentoikkunatarkastelua varten, siis
%kirjoita esim. haj ja enter, niin Matlab näyttää vaihtojännitteen
%tehollisarvon.

ka = mean(xt1); %Signaalin aikakeskiarvo eli tasajännitearvo.
haj = std(xt1); %Signaalin keskihajonta eli vaihtojännitteen tehollisarvo.
teho = ka^2+haj^2; %Signaalin teho 1 ohmin kuormassa.
