%% Lezione del 4 novembre 2007
%
% Appoggiandosi al seguente script Matlab, riprodurre e informalmente
% verificare alcuni degli effetti psicoacustici descritti all'appendice
% C del libro di testo. In particolare:
% - curve di equal loudness
% - curva di altezza (pitch)
% - battimenti e "roughness" a diverse bande critiche
% - mascheramento di un tono puro a 400 Hz e, successivamente, a 10000 Hz
%
%%

clear all

Fs = 44100;                    % Frequenza di campionamento Fs=1/T con T periodo di campionamento
p0 = 10^(-6);                  % Pressione di riferimento (puramente nominale, non conosciamo il sistema di riproduzione!)

%%%%%%%%%% First tone

dB1 = 80;                      % Pressione sonora tono 1 (in dB)
freq1 = 1000;                  % Frequenza tono 1 (in Hz)

%%%%%%%%%% Second tone

dB2 = 80;                      % Pressione sonora tono 2 (in dB)
freq2 = 1000;                  % Frequenza tono 2 (in Hz)

%%%%%%%%%% Processing

x = [0:2*Fs-1];                % Dominio numerico del segnale (2 secondi, cioè dimensione 2*Fs)

p1 = p0* 10^(dB1/20);          % Pressione sonora tono 1
p2 = p0* 10^(dB2/20);          % Pressione sonora tono 2

y1 = p1*sin(2*pi*freq1/Fs*x);  % Segnale 1
y2 = p2*sin(2*pi*freq2/Fs*x);  % Segnale 2

y = y1+y2;                     % Sovrapposizione di 1 e 2

%%%%%%%%%% Plots

upper_limit = 0.1              % estremo superiore nel grafico (in secondi)

domain = [1/Fs:1/Fs:upper_limit];  % dominio del grafico

figure(1)
plot(domain,y1(1:upper_limit*Fs),domain,y2(1:upper_limit*Fs))
xlabel('time (s)'), ylabel('amplitude (psi)'), title('Tones')

figure(2)
plot(domain,y(1:upper_limit*Fs))
xlabel('time (s)'), ylabel('amplitude (psi)'), title('Superposition')

%%%%%%%%%% Save data

wavwrite(y1,Fs,'y1.wav');      % salva i file .wav
wavwrite(y2,Fs,'y2.wav');
wavwrite(y,Fs,'y.wav');

wavplay(y1,Fs), pause(1);      % suona (se possibile) il file
wavplay(y2,Fs), pause(1);
wavplay(y,Fs);
