%TEKNILLINEN KORKEAKOULU
%Tietoliikennelaboratorio
%Seppo Saastamoinen 8.11.2007

%S-72.1110 SIGNAALIT JA JÄRJESTELMÄT S-07
%Laboratoriotyö 3C: Puheen salauslaite
%Makro: salaus2007.m

Teekkari1 = 'Nimi Opiskelijanumero';
Teekkari2 = 'Nimi Opiskelijanumero';

%Tämän makro simuloi puheensalaus- ja salauksenpurkulaitetta.

%Makro on jaettu lohkoihin, jotta laitteen toimintaa olisi
%helpompi tutkia.

%--------------------------------------------------------
%TULOSIGNAALI

%Haetaan puhe (muuta polku ja tiedostonimi oikeiksi):
[xt,Fs] = wavread('C:\Temp\Sinkut\jokuääni.wav');

%Lasketaan näytemäärä, näyteväli ja tehdään aikavektori
N = max(size(xt)); Ts = 1/Fs; t = 0:Ts:(N-1)*Ts;
%soundsc(xt,Fs); %Kuunnellaan xt, jos tarpeen

%Salattu ääni voidaan kierrättää, jolloin salauslaite toimii purku-
%laitteena!: (HUOM! Poista %-merkki xt:n edestä)
%xt = yt';

%Lasketaan tulosignaalin spektri 2-puoleista taajuusaluetta varten:
Xf1 = 20*log10((fftshift(abs(fft(xt)))/N)');

%--------------------------------------------------------
%TULOSIGNAALIN SUODATUS
%Suodatetaan puhe taajuusalueelle 300 ... 3400 Hz.
%Ao. taajuusalue on käytössä (lanka)puhelimissa.
%Suodatus tehdään "ideaalisesti" taajuusalueessa.

fl = 300; %Suodattimen alarajataajuus (Hz) - l = low
fh = 3400; %Suodattimen ylärajataajuus (Hz) - h = high

%Kutsutaan makroa suodatus.m, joka tekee työn:
[yt] = suodatus (xt,Fs,fl,fh);

%Kopioidaan suodatettu signaali vektoriin xt2:
xt2 = yt;

%Lasketaan suodatetun tulosignaalin spektri 2-puoleista 
%taajuusaluetta varten:
Xf2 = 20*log10(fftshift(abs(fft(xt2)))/N);
%soundsc(xt2,Fs); %Kuunnellaan xt2, jos tarpeen

%--------------------------------------------------------
%DSB-MODULAATTORI
%Tehdään DSB-modulaatio puhesignaalille xt2:
xt = 2*xt2.*cos(2*pi*10000*t);

%soundsc(xt,Fs); %Kuunnellaan DSB-modulaatiotuotos, jos tarpeen.

%Lasketaan moduloidun tulosignaalin spektri 2-puoleista 
%taajuusaluetta varten:
Xf3 = 20*log10(fftshift(abs(fft(xt)))/N);

%Transponoidaan saatu modulaatiotulos:
xt = xt';

%--------------------------------------------------------
%YLIPÄÄSTÖSUODATIN
%Poistetaan saadusta DSB-tuotoksesta alempi sivukaista pois

%Asetetaan suodattimen rajataajuudet:
fl = 10000; fh = 22049;

%Tehdään suodatus makron suodatus.m avulla:
[yt] = suodatus(xt,Fs,fl,fh);

%Lasketaan ylipäästösuodatetun signaalin spektri 2-puoleista 
%taajuusaluetta varten:
Xf4 = 20*log10(fftshift(abs(fft(yt)))/N);

%soundsc(yt,Fs); %Kuunnellaan suodatettua modulaatiotuotosta, jos tarpeen.

%--------------------------------------------------------
%DSB-MODULAATTORI
%Asetetaan kantoaallon taajuudeksi em. DSB:n kantoaallon taajuus +
%puhesignaalin korkein taajuus eli 10000 Hz + 3400 Hz:
xt = 2*yt.*cos(2*pi*13400*t);

%soundsc(xt,Fs); %Kuunnellaan DSB-modulaatiotuotos, jos tarpeen.

%Lasketaan toiseen kertaan moduloidun tulosignaalin spektri 2-puoleista 
%taajuusaluetta varten:
Xf5 = 20*log10(fftshift(abs(fft(xt)))/N);

%Transponoidaan saatu modulaatiotulos:
xt = xt';

%--------------------------------------------------------
%KAISTANPÄÄSTÖSUODATUS
%Suodatetaan DSB-moduloinnin tuloksena syntyneet korkeat taajuudet pois.

%Asetetaan suodattimen rajataajuudet:
fl = 300; fh = 3400;

%Tehdään suodatus jälleen makrolla:
[yt] = suodatus(xt,Fs,fl,fh);

%Lasketaan lähtösignaalin spektri 2-puoleista taajuusaluetta varten:
Xf6 = 20*log10(fftshift(abs(fft(yt)))/N);

%--------------------------------------------------------
%LÄHTÖSIGNAALI
%Kuunnellaan muokattua signaalia:
soundsc(yt,Fs);

%--------------------------------------------------------
%TULOSTUSOSIO
%Tulostetaan kaikkiaan kuusi spektrikuvaa lähtien tulosignaalista
%päätyen lähtösignaaliin.

%Lasketaan näyteväli taajuusalueessa:
f0 = Fs/N; 
%Tehdään taajuusvektori 2-puoleista taajuusaluetta varten:
f = -Fs/2:f0:Fs/2-f0;

%Asetellaan tulostus.
subplot(6,1,1); %6 käyräesitystä pysty- ja 1 vaakasuunnassa.

plot(f,Xf1); %Piirretään taajuusvaste alla olevien ehtojen mukaan.
%Y-akselin yksikkö on dBV/Hz.

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

%Kuvan otsikko voi olla monirivinen, kuten alla:

title({['Kurssi: S-72.1110 S-2007 Laboratoriotyö 3, osa C'];...
      ['Puheensalauslaitteen spektrikuvat tulosta lähtöön'];...    
      ['Tekijät: ' Teekkari1 ' ja ' Teekkari2];...
      [int2str(h(3)) '.' int2str(h(2)) '.' int2str(h(1)) ' klo '...
          int2str(h(4)) ':' int2str(h(5)) ':' int2str(h(6))]});

grid on; %Asteikkoruudukko päälle.
%Akseliarvojen asetus x- ja y-suunnissa:
axis([-Fs/2 Fs/2 -100 max(Xf1)+3]);
xlabel('Taajuus Hz'); %x-akselin nimi.
ylabel('Tulosignaali dBV/Hz'); %y-akselin nimi.
zoom on; %Sallii zoomauksen hiirellä. Kaksoisnäpäytys palauttaa
%alkuperäisen kuvan.

subplot(6,1,2); 
plot(f,Xf2); grid on; 
axis([-Fs/2 Fs/2 -100 max(Xf2)+3]); 
xlabel('Taajuus/Hz'); ylabel('Suod. tulosign. dBV/Hz'); zoom on;

subplot(6,1,3); 
plot(f,Xf3); grid on; 
axis([-Fs/2 Fs/2 -100 max(Xf3)+3]); 
xlabel('Taajuus/Hz'); ylabel('DSB-mod. sign. dBV/Hz'); zoom on;

subplot(6,1,4); 
plot(f,Xf4); grid on; 
axis([-Fs/2 Fs/2 -100 max(Xf4)+3]); 
xlabel('Taajuus/Hz'); ylabel('Ylip. suod. sign. dBV/Hz'); zoom on;

subplot(6,1,5); 
plot(f,Xf5); grid on; 
axis([-Fs/2 Fs/2 -100 max(Xf5)+3]); 
xlabel('Taajuus/Hz'); ylabel('DSB-mod. sign. dBV/Hz'); zoom on;

subplot(6,1,6); 
plot(f,Xf6); grid on; 
axis([-Fs/2 Fs/2 -100 max(Xf6)+3]); 
xlabel('Taajuus/Hz'); ylabel('Lähtösignaali dBV/Hz'); zoom on;

shg; %Tuo figure-esityksen päällimmäiseksi kuvaruudussa.
