%TEKNILLINEN KORKEAKOULU
%Tietoliikennelaboratorio
%S-72.060 Signaalit ja järjestelmät
%Seppo Saastamoinen 2.3.2005 ver. 1.0
%MAKRO: modu2005.m
clear; close all; %Nollataan muistit ja kuvat

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

%MODULAATIO

%Tämän makron avulla voidaan simuloida amplitudi- (AM) ja kulma- (FM/PM)
%modulaatioita. Moduloivana signaalina on kosiniaalto, jotta modulaatio-
%tulosten tulkinta olisi helpompaa.

%Amplitudimodulaatiossa kantoaallon (fc) amplitudi muuttuu moduloivan
%signaalin (xt) amplitudin mukaan.
%Taajuusmodulaatiossa kantoaallon (fc) taajuus muuttuu moduloivan
%signaalin (xt) amplitudin mukaan.

%Amplitudimodulaation peruskaava on

%AM = (1 + m*xt)*cos(2*pi*fc*t)

%,jossa m on modulaatioindeksi.

%Kaavassa oletetaan, että kantoaallon ja signaalin xt huippuarvo on 1.
%Jos m = 1 (100%), voi kantoaaltolausekkeen (cos...) edessä oleva
%amplitudilauseke (1 + m*xt) saavuttaa arvoja välillä 0...2.
%Jos m = 0,5, saavuttaa amplitudilauseke arvoja välillä 0,5...1,5.

%Kantoaallon fc taajuus on käytännössä paljon suurempi kuin signaalin xt
%suurin taajuus.

%Kulmamodulaation peruskaava on

%FM = cos(2*pi*fc*t+b*xt)

%,jossa b on modulaatioindeksi.
%Kaavassa oletetaan, että kantoaallon ja signaalin xt huippuarvo on 1.

%Modulaatioindeksi b on df/fm, jos df on deviaatio ja fm moduloivan
%signaalin xt suurin taajuus.
%Deviaatio kertoo, kuinka paljon kantoaallon taajuus enimmillään
%poikkeaa arvosta fc. Jos deviaatio on esimerkiksi 75 kHz, xt:n huippuarvo
%kasvattaa fc:n arvoa 75 kHz:llä. xt:n minimiarvo eli -1 puolestaan
%pienentää fc:tä 75 kHz:llä.

%Kantoaallon fc taajuus on käytännössä paljon suurempi kuin signaalin xt
%suurin taajuus.

%Asetetaan näytenopeus riittävän suureksi.
Fs = 44100;

%Lasketaan näyteväli Ts.
Ts = 1/Fs;

%Asetetaan aikavektori 1 s mittaiseksi.
t = 0:Ts:1-Ts;

%Asetetaan kantoaallon (carrier) taajuus.
fc = 2000;

%Asetetaan moduloivan signaalin taajuus.
fm = 100;

%Moduloiva signaali xt on
xt = cos(2*pi*fm*t);

%Asetetaan modulaatioindeksi m AM:lle.
m = 0.5;

%Asetetaan deviaatio (kantoaallon suurin taajuuspoikkeama) df FM:lle.
df = 1000;
%Lasketaan FM:n modulaatioindeksi b.
b = df/fm;

%VALITSE SEURAAVISTA JOKO AM TAI FM! MUUTOKSIA TARVITAAN MYÖS RIVEILLÄ
%91, 106, 112 JA 129 FM:N TAPAUKSESSA!

%AM:n kaava:
AM = (1+m*xt).*cos(2*pi*fc*t);

%FM:n kaava:
%FM = cos(2*pi*fc*t+b*xt);

N = max(size(xt));
%Lasketaan signaalin AM tai FM 1-puoleinen Fourier-muunnos FFT:llä.
%Muuta AM:n paikalle FM tarvittaessa!
Xf = 2*abs(fft(AM))/N;
%Lasketaan Xf desibelivoltteina (0 dBV = 1 V).
XfdBV = 20*log10(Xf);

%Asetetaan taajuusasteikon vektori f.
f = 0:1:Fs-1;

%Tulostetaan signaali:;
%a) Aika-alueessa "voltteina" eli AM-t tai FM-t (subplot 3,1,1).
%b) Taajuusalueessa "voltteina" Xf-f (subplot 3,1,2). 
%c) Taajuusalueessa dBV:na (subplot 3,1,3).

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

subplot(3,1,1); plot(t,AM); %Muista tarvittaessa FM!
axis([0 1 -2.1 2.2]); 
xlabel('Aika/s'); ylabel('Jännite/V');
title('Modulointitulos aika-alueessa'); grid on; zoom on;

title({['Kurssi: S-72.060 K-2005 Laboratoriotyö 4, osa B: MODULAATIO'];...
      ['Signaali: AM, 1*(1+0.5*cos(2*pi*100*t)*cos(2*pi*1000*t), 1-puoleinen taajuusalue'];...    
      ['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,1,2); plot(f,Xf);
axis([0 Fs/2 -0.1 2]); 
xlabel('Taajuus/Hz'); ylabel('Jännite/V');
title('Modulointitulos taajuusalueessa'); grid on; zoom on;

subplot(3,1,3); plot(f,XfdBV);
axis([0 Fs/2 -60 6]);
xlabel('Taajuus/Hz'); ylabel('Jännite/dBV');
title('Modulointitulos taajuusalueessa dB:nä'); grid on; zoom on;

shg;

soundsc(AM,Fs); %Kuunnellaan modulaatiotulos.

%SIREENI?
%Hälytysajoneuvoista tuttu "vouvotus" on FM:n sovellus.
%Silloin taajuutta poikkeutetaan n. 1500 Hz (=fc)
%molemmin puolin n. 1000 Hz (=deviaatio) noin
%4 kertaa (=fm = 4) sekunnissa.