function skjdemo1
% SKJDEMO1 demoaa digitaalista signaalia.
%
% Käytetään signaalina puhetta. Esitellään jatkuva signaali
% x(t), huomataan, että se on tietokoneessa pelkkiä numeroita,
% joita voidaan käsitellä yksinkertaisin tavoin. Tehdään 
% muutama tällainen operaatio.

% 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,'************  SKJDEMO1.m  **************\n');
fprintf(1,'****************************************\n');
fprintf(1,'** Ajaako Hill maailmanmestaruudesta? **\n');
fprintf(1,'************    osa I     **************\n');
fprintf(1,'****************************************\n');
fprintf(1,'\n\n');

fprintf(1,'** Odota hetki...\n\n');

% Luetaan äänisignaali sisään Matlabiin
[y, fs, nbits] = wavread('skjdemo1.wav'); 

win = linspace(1,0,length(y));
y2 = y.*win'; % vaimentaminen, fade out

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


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

clc;

fprintf(1,'Tutkitaan äänisignaalia x(t), joka\n');
fprintf(1,'muuttuu ajan t mukana.\n');
fprintf(1,'Signaalin arvot voidaan piirtää.\n\n');


t = linspace(0, length(y)/fs, length(y));
ku1 = plot(t, y);      % voidaan piirtää
title('Signaali x(t)');
xlabel('aika (sekunnit)');
ylabel('voimakkuus');
grid on;
axis([0 t(end) 1.1*min(y) 1.1*max(y)]);

fprintf(1,'Voit zoomata ruudulla valitsemalla yläpalkista\n');
fprintf(1,'suurennuslasin ja vetää kapean ikkunan.\n');
fprintf(1,'Oikealla hiiren näppäimellä pääset takaisinpäin.\n\n');

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

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

aa = 273500;
ab = 274900;
axis([t(aa) t(ab) 1.2*min(y(aa:ab)) 1.2*max(y(aa:ab))]);
% set(ku1,'Linewidth',2);

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

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

clc;

fprintf(1,'Tietokoneessa esitettävä signaali on digitaalista.\n');
fprintf(1,'Esimerkiksi tässäkin puhesignaalissa on\n');
fprintf(1,[num2str(fs) ' näytettä jokaista sekuntia kohden.\n\n']);

fprintf(1,'Diskreettiä sekvenssiä eli lukujonoa kuvataan\n');
fprintf(1,'merkinnällä x[n], jossa n on indeksinumero.\n');
fprintf(1,'Piirroksissa käytetään usein "nuppineulaa".\n\n');

stem(t(20501:21000),y(20501:21000));  %diskreetti, digitaalinen
title('Sekvenssi x[n]');
xlabel('aika (sekunnit)');
ylabel('voimakkuus');
grid on;
axis([t(20501) t(20600) 1.2*min(y(20501:20600)) 1.2*max(y(20501:20600))]);

fprintf(1,'Kuvaan on piirretty 100 näytettä signaalin keskeltä.\n');
fprintf(1,'Sekvenssi koostuu arvoista\n');
fprintf(1,'{x[20501], x[20502], x[20503], ..., x[20600]}\n\n');

fprintf(1,'Nämä arvot ovat siis pelkkiä lukuarvoja:\n\n');

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

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

y(10501:20600)  %printtaa pelkkiä numeroita

fprintf(1,'\n\n - siis vain pelkkiä numeroita, mutta kuunnellaan ne!\n\n');

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

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

clc;

plot(t(1:10:end),flipud(y(1:10:end))); %näytetetään vain osa nopeuttamiseksi
title('x(t) - Matti ja Keke ');
xlabel('aika (sekunnit)'); 
ylabel('voimakkuus');
grid on;
axis([0 t(end) 1.1*min(y) 1.1*max(y)]);

soundsc(y, fs);  %..mutta kuuntele! 
y(10501:20600)   % eli vain numeroita, mutta kun kaiuttimesta 

fprintf(1,'Koska sekvenssi koostuu pelkistä numeroista\n');
fprintf(1,'voidaan niitä soittaa eri nopeuksilla\n\n');

fprintf(1,'** Paina ENTER äänen kuuntelun jälkeen...\n\n');
pause;


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

clc;

fprintf(1,'Soitetaan näytteitä eri nopeudella.\n');
fprintf(1,'Anna kerroin (0.5 .. 2), esimerkiksi 1.3\n');
kerroin = input('Anna nopeutus/hidastuskerroin: ');
fprintf(1,'\n\n');

if ((kerroin < 0.49) | (kerroin > 2.01))
    warning('Käytetään kerrointa 1.3');
    kerroin = 1.3;
end;
soundsc(y, kerroin*fs);

fprintf(1,'Numerojonoa voi käsitellä monin eri tavoin...\n\n');

fprintf(1,'** Paina ENTER äänen kuuntelun jälkeen...\n\n');
pause;

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

clc;

fprintf(1,'...vaimennetaan (fade-out) ääntä ajan myötä.\n\n');

% win = linspace(1,0,length(y));
% y2 = y.*win'; % vaimentaminen, fade out
plot(t,y2);
title('"Fade-out", vaimennettu signaali x_f(t)');
xlabel('aika (sekunnit)'); 
ylabel('voimakkuus');
grid on;
axis([0 t(end) 1.1*min(y2) 1.1*max(y2)]);

soundsc(y2,fs); 

fprintf(1,'...tai edelleen...\n\n');

fprintf(1,'** Paina ENTER äänen kuuntelun jälkeen...\n\n');
pause;

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

clc;

fprintf(1,'...Koska sekvenssi on vain lukuja, \n');
fprintf(1,'voidaan järjestys vaihtaa vastakkaiseksi!\n\n');

soundsc(flipud(y),fs);

plot(t(1:10:end),flipud(y(1:10:end))); %käännetään, ja näytetetään vain osa nopeuttamiseksi
title('Käännetty  signaali x_i(t)');
xlabel('aika (sekunnit)'); 
ylabel('voimakkuus');
grid on;
axis([0 t(end) 1.1*min(y2) 1.1*max(y2)]);

fprintf(1,'** LOPPU. Siirry seuraavaksi demoon SKJDEMO2.m.\n\n');

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