function skjdemo3
% SKJDEMO3 demoaa signaalin jaksollisuutta.
%
% Käytetään signaalina jaksollista äännettä.

% Jukka Parviainen, parvi@hut.fi, 15.1.2002, 17.1.2001.
% Tiedostot saatavilla 
% http://www.cis.hut.fi/Opinnot/T-61.140/  -> Vinkkejä ja linkkejä

% Alkutoimenpiteet: tarkista että esityskoneessasi on 
% kaiuittimet tai salin kyseessä ollen audioliitäntä.
% Kutista Matlab-työikkuna suhteellisen pieneksi ruudun alareunaan,
% sijoita piirtoikkuna, esimerkiksi ensimmäisen vaiheen jälkeen,
% sopivaan paikkaan, että se näkyy.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

close all;      % sulkee kaikki ikkunat
clc;            % puhdistaa ruudun

fprintf(1,'****************************************\n');
fprintf(1,'****************************************\n');
fprintf(1,'************  SKJDEMO3.m  **************\n');
fprintf(1,'****************************************\n');
fprintf(1,'*******  Jaksolliset signaalit  ********\n');
fprintf(1,'**************  Sampsa  ****************\n');
fprintf(1,'****************************************\n');
fprintf(1,'\n\n');

[y, fs, nbits] = wavread('skjdemo3.wav');
y = y - mean(y);

yF = fft(y);  % silmänlumetta, että täällä!



fprintf(1,'Kuultava ääni on tutkija\n Sampsa Laineen lahja maailmalle...\n\n');

fprintf(1,'Vokaaliäänne on nauhoitettu ja\n saatettu digitaaliseen muotoon\n\n');

fprintf(1,'Aloitetaan kuuntelemalla ääntä.\n\n');

fprintf(1,'** Paina ENTER...\n\n');
pause;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

soundsc(y, fs);

fprintf(1,'** Paina ENTER...\n\n');
pause;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc;
 
fprintf(1,'Piirretään äänisignaali x(t).\n\n');

pituus_sek = length(y)/fs;
t = linspace(0, pituus_sek, length(y));
plot(t,y);
title('Vokaaliäänne');
xlabel('Aika (sekunnit)');
ylabel('Voimakkuus');
axis([0 t(end) 1.1*min(y) 1.1*max(y)]);
% Näyttää varsin sekavalta - otetaan pieni näyte kymmenysosasekunnin 
% ajalta:
fprintf(1,'Näyttää varsin sekavalta - otetaan lyhyt näyte välistä...\n\n');

fprintf(1,'** Paina ENTER...\n\n');
pause;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc;

plot(t(1:4410),y(1:4410));
grid on;
title('Vokaaliäänne, t = 0..0.1 sek');
xlabel('aika (sekunnit)');
ylabel('voimakkuus');
% Signaali näyttää lähes periodiselta eli x(t) = x(t+T). 
% Mikä on sen "jaksonpituus" T?
fprintf(1,'Signaali näyttää lähes periodiselta eli x(t) = x(t+T).\n');
fprintf(1,'Mikä on sen "jaksonpituus" T?\n\n');

fprintf(1,'** Paina ENTER...\n\n');
pause;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc;

% Taajuustasoon fourier-muuntamalla ja sen spektri:
fprintf(1,'Signaaleja kannattaa tutkia niin aika- kuin taajuustasossa.\n');
fprintf(1,'Taajuustason tutkimiseen Fourier-muunnos on oiva työkalu.\n\n');

fprintf(1,'Lasketaan siis seuraavaksi signaalin Fourier-muunnos.\n\n');

fprintf(1,'** Paina ENTER...\n\n');
pause;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc;

% Seuraava pelkkää pluffia
h = waitbar(0,'Lasketaan Fourier-muunnosta...');
for i=1:20,
  pause(0.03);
  waitbar(i/20,h)
end
close(h)

hz = linspace(0,fs, length(yF));
plot(hz, abs(yF));
axis([0 4000 0 1.1*max(abs(yF))]);
grid on;
title('Vokaaliäänne, spektri f = 0..4000 Hz');
xlabel('Taajuus (hertz eli 1/s)');
ylabel('Voimakkuus');
fprintf(1,'Signaalin jaksollisuus näkyy nyt piikkeinä spektrissä!\n\n');
fprintf(1,'Arvioi ensimmäisen piikin taajuus (perustaajuus)\n');
fprintf(1,'ja vertaa sitä yllä laskemaasi jaksonpituuteen T!\n\n');

fprintf(1,'** Paina ENTER...\n\n');
pause;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

clc;

fprintf(1,'Mikä merkitys harmonisilla komponenteilla on?\n\n');

fprintf(1,'** LOPPU. Jatka demoon SKJDEMO4.m \n\n');

