% AM-SSB.m
%
% Neste script é demonstrado o esquemas de modulação SSB, onde modulamos 
% um sinal utilizando apenas uma das bandas laterais.
% é observado os espectros dos sinais modulante, de sua transformada
% de hilbert e do sinal modulado.
%
% A demonstraçào é feita com amostras de áudio gravadas em arquivo tipo wav
% obs: arquivos wav com compressão não podem ser abertos
%
% É salvo o arquivo de áudio:
%   'usb_demod.wav'

% Universidade de Brasília
% André Noll Barreto, 12 maio 2011

close all % fechar janelas abertas

%
% parâmetros
arquivoSom = 'female2.wav';

fmin = 32000; % frequência máxima observável na DFT
fc = 15000; %frequência da portadora 
ncorr = 256; % número de amostras da autocorrelação
phi_err = pi / 8; % erro de fase na demodulação DSB-SC
%%%%%%%%%%


[som, fs, bits] = wavread(arquivoSom);

minsize = min(length(som), length(som));
som = som(1:minsize);

os = ceil(2*fmin/fs); % fator de superamostragem

t = (0:length(som)-1) / fs;
t_os = (0 : 1/os : (length(som)-1)) / fs;
t_s = 1 / fs / os;


som_os = interp1(t, som, t_os);

[ som_psd, f ] = pwelch( som_os, ncorr, [],[], fs*os);

som_os_h = imag(hilbert(som_os));

som_aux = (som_os + som_os_h)*sqrt(2)/2;

som_h_psd = pwelch( som_os_h, ncorr, [],[], fs*os); 

wavwrite(som_os_h, fs * os, bits, 'hilbert.wav');

wavwrite(som_aux, fs * os, bits, 'hilbertsum.wav');

figure(1);
plot(f, abs(som_psd), f, abs(som_h_psd));
title('Densidade Espectral de Potência - Mensagem de Voz');
xlabel('frequência (Hz)');
legend('sinal original', 'transformada de Hilbert');



nsamp = 2^10;
som_samp = som_os(1:nsamp);
som_samp_f = fft(som_samp);
som_h_samp = som_os_h(1:nsamp);
som_h_samp_f = fft(som_h_samp);

phase = atan2(imag(som_samp_f), real(som_samp_f));
phase_h = atan2(imag(som_h_samp_f), real(som_h_samp_f));

f_samp = (0:nsamp-1 )/ (t_s * nsamp);
f_samp = fftshift(f_samp);
f_samp(f_samp > nsamp/2) = nsamp/2 - f_samp(f_samp > nsamp/2);

t_samp = (0:nsamp-1)*t_s;

figure(2)
plot(t_os, som_os, t_os, som_os_h)

figure(3)
plot(f_samp, fftshift(phase), f_samp, fftshift(phase_h))

title('Fase de uma amostra do sinal');
xlabel('frequência (Hz)');
legend('sinal original', 'transformada de Hilbert');


s_usb =  som_os .* cos(2 * pi * fc * t_os) - som_os_h .* sin(2 * pi * fc * t_os);
usb_psd = pwelch( s_usb, ncorr, [],[], fs*os); 
s_lsb = som_os .* cos(2 * pi * fc * t_os) + som_os_h .* sin(2 * pi * fc * t_os);
lsb_psd = pwelch( s_lsb, ncorr, [],[], fs*os);

figure(4);
plot(f, abs(usb_psd), f, abs(lsb_psd));
title('Densidade Espectral de Potência - Mensagem Modulada');
xlabel('frequência (Hz)');
legend('USB', 'LSB')

% demodulação
% filtro passa baixa
ffil = fs / 2;
lfil = 100;
h= fir1 ( lfil, ffil / (fs*os) * 2 );

som_demod = filter (h, 1, 2 * s_usb .* cos(2 * pi * fc * t_os) );
wavwrite(som_demod, fs * os, bits, 'usb_demod.wav');

som_demod_psd = pwelch( som_demod, ncorr, [],[], fs*os);
figure(5);
plot(f, abs(som_psd), f, abs(som_demod_psd));
title('Densidade Espectral de Potência - Mensagem de Voz');
xlabel('frequência (Hz)');
legend('som original','som demodulado')
