%Cristian David Grajales, cristiandavidgm at yahoo dot com
%I did this script as part of an assignement, I'm completly sure that it
%can be improved but it doesn't matter now, my grade will not change :D
%This is a very basic simulation of the multiple acces technology FDM.
%The major problem I had was the design of the filters. I tried using
%fdatool but the filters I built didn't work.
%I'm too lazy to translate the entire script to english. so, I will let yo do it. :D
%If you can improve this script, plase tell about or send me a copy, I
%would like to have it.
clear all
%PARAMETERS
bandwidth = 4000; % bandwidth for each frequency band in Hz
guarda_medios = 300; %
signal_to_noise_ratio = 20;
modulacion_ssb = 1;% 1 for Single SSB modulation, 0 for AM
%The first signal will be placed in the third channel, the second in the
%fourth and the third in the fifth.
frec_carrier1 = bandwidth*3;% Frecuencia de las portadoras en Hz
frec_carrier2 = bandwidth*4;
frec_carrier3 = bandwidth*5;
Fs = frec_carrier3*2+5000;
%Fs = 44100;
frec_corte_filtro_pasabajo = 2500;
% 1 show graphics, 0 don't
graphics = 1;
% 1 play sounds, 0 don't
sounds = 1;
%Define filters
[B,A] = butter(4,frec_corte_filtro_pasabajo/(Fs/2));
pasa_bajo = @(S) filter(B,A,S);
[C1,D1] = butter(2,[bandwidth*2+guarda_medios bandwidth*3-guarda_medios]/(Fs/2));
filtro_banda3 = @(S) filter(C1,D1,S);
[C2,D2] = butter(2,[bandwidth*3+guarda_medios bandwidth*4-guarda_medios]/(Fs/2));
filtro_banda4 = @(S) filter(C2,D2,S);
[C3,D3] = butter(2,[bandwidth*4+guarda_medios bandwidth*5-guarda_medios]/(Fs/2));
filtro_banda5 = @(S) filter(C3,D3,S);
%cargar los archivos
s1 = wavread('ali-university-story.wav');
longituds1 = length(s1);
s2 = wavread('birth-of-a-star-story.wav');
longituds2 = length(s2);
s3 = wavread('board-game-story.wav');
longituds3 = length(s3);
beep = wavread('beep-8.wav');
playerbeep = audioplayer(beep,44100);
%se truncan a la longitud del menor
longitud_minima = min([longituds1 longituds2]);
t = linspace(0,5, longitud_minima);
s1 = s1(1:longitud_minima);
s2 = s2(1:longitud_minima);
s3 = s3(1:longitud_minima);
FLAG = input('PASO 1, se reproducen las señales tal y como llegan');
%se reproducen
if (sounds > 0)
player = audioplayer(s1,44100);
playblocking(player);
playblocking(playerbeep);
player2 = audioplayer(s2,44100);
playblocking(player2);
playblocking(playerbeep);
player3 = audioplayer(s3,44100);
playblocking(player3);
end
FLAG = input('PASO 2, graficar los espectros de las señales tal y como llegan');
if (graphics > 0)
figure
esps1=abs(fft(s1));
subplot(3,1,1),plot(esps1),grid on,zoom,title('Espectro señal1');
esps2=abs(fft(s2));
subplot(3,1,2),plot(esps2),grid on,zoom,title('Espectro señal2');
esps3=abs(fft(s3));
subplot(3,1,3),plot(esps3),grid on,zoom,title('Espectro señal3');
end;
FLAG = input('PASO 3, Las señales se pasan por un filtro pasa bajo y se grafican');
%se pasanm por el filtro pasa bajo
s1 = pasa_bajo(s1);
s2 = pasa_bajo(s2);
s3 = pasa_bajo(s3);
%se grafican
if (graphics > 0)
figure
esps1=abs(fft(s1));
subplot(3,1,1),plot(esps1),grid on,zoom,title('Espectro señal1 filtrada');
esps2=abs(fft(s2));
subplot(3,1,2),plot(esps2),grid on,zoom,title('Espectro señal2 filtrada');
esps3=abs(fft(s3));
subplot(3,1,3),plot(esps3),grid on,zoom,title('Espectro señal3 filtrada');
end
FLAG = input('PASO 4, reproducir las señales luego de pasarlas por el filtro');
%se reproducen
if (sounds > 0)
playerbeep = audioplayer(beep,44100);
player = audioplayer(s1,44100);
playblocking(player);
playblocking(playerbeep);
player2 = audioplayer(s2,44100);
playblocking(player2);
playblocking(playerbeep);
player3 = audioplayer(s3,44100);
playblocking(player3);
playblocking(playerbeep);
end
FLAG = input('PASO 5, Las señales se modulan a diferentes portadoras');
%modular los archivos
if ( modulacion_ssb > 0)
s1mod = ssbmod(s1,frec_carrier1,Fs);%se modula
s2mod = ssbmod(s2,frec_carrier2,Fs);%se modula
s3mod = ssbmod(s3,frec_carrier3,Fs);%se modula
else
s1mod = ammod(s1,frec_carrier1,Fs);%se modula
s2mod = ammod(s2,frec_carrier2,Fs);%se modula
s3mod = ammod(s3,frec_carrier3,Fs);%se modula
end
%se grafican
if (graphics > 0)
figure
esps1=abs(fft(s1mod));
subplot(3,1,1),plot(esps1),grid on,zoom,title('Espectro señal1 modulada');
esps2=abs(fft(s2mod));
subplot(3,1,2),plot(esps2),grid on,zoom,title('Espectro señal2 modulada');
esps3=abs(fft(s3mod));
subplot(3,1,3),plot(esps3),grid on,zoom,title('Espectro señal3 modulada');
end
FLAG = input('PASO 6, Las señales moduladas se filtran en la banda determinada y se suman');
%se filtran y se suman
%fs1=filter(filtro_banda1,s1mod);%se filtra
%fs2=filter(filtro_banda2,s2mod);%se filtra
%fs3=filter(filtro_banda3,s3mod);%se filtra
fs1 = s1mod;
fs2 = s2mod;
fs3 = s3mod;
%ACA SE SUMAN
senial_completa = fs1+fs2+fs3;
%se grafican
if (graphics > 0)
figure
esps1=abs(fft(fs1));
subplot(4,1,1),plot(esps1),grid on,zoom,title('Espectro señal1 modulada y filtrada');
esps2=abs(fft(fs2));
subplot(4,1,2),plot(esps2),grid on,zoom,title('Espectro señal2 modulada y filtrada');
esps3=abs(fft(fs3));
subplot(4,1,3),plot(esps3),grid on,zoom,title('Espectro señal3 modulada y filtrada');
espf=abs(fft(senial_completa));
subplot(4,1,4),plot(espf),grid on,zoom,title('Espectro sumadas')
end
FLAG = input('PASO 7, se añade algo de ruido a la señal transmitida');
if (graphics > 0)
figure
esps1=abs(fft(senial_completa));
subplot(2,1,1),plot(esps1),grid on,zoom,title('Espectro señal completa mas algo de ruido');
end
senial_completa = awgn(senial_completa, signal_to_noise_ratio );
if (graphics > 0)
esps1=abs(fft(senial_completa));
subplot(2,1,2),plot(esps1),grid on,zoom,title('Espectro señal completa mas algo de ruido');
end
FLAG = input('PASO 8, al llegar se filtra cada banda');
%se reciben las señales y se filtran
%demuxs1=filter(filtro_banda1,senial_completa);%se filtra
demuxs1 = filtro_banda3(senial_completa);
%demuxs2=filter(filtro_banda2,senial_completa);%se filtra
demuxs2 = filtro_banda4(senial_completa);
%demuxs3=filter(filtro_banda3,senial_completa);%se filtro
demuxs3 = filtro_banda5(senial_completa);
%se grafican
if (graphics > 0)
figure
esps1=abs(fft(demuxs1));
subplot(3,1,1),plot(esps1),grid on,zoom,title('Espectro señal1 filtrada');
esps2=abs(fft(demuxs2));
subplot(3,1,2),plot(esps2),grid on,zoom,title('Espectro señal2 filtrada');
esps3=abs(fft(demuxs3));
subplot(3,1,3),plot(esps3),grid on,zoom,title('Espectro señal3 filtrada');
end
FLAG = input('PASO 9, cada banda recuperada se demodula para regresar la señal a la frecuencia indicada');
%se demodulan
if ( modulacion_ssb > 0)
demods1 = ssbdemod(demuxs1, frec_carrier1,Fs);
demods2 = ssbdemod(demuxs2, frec_carrier2,Fs);
demods3 = ssbdemod(demuxs3, frec_carrier3,Fs);
else
demods1 = amdemod(demuxs1, frec_carrier1,Fs);
demods2 = amdemod(demuxs2, frec_carrier2,Fs);
demods3 = amdemod(demuxs3, frec_carrier3,Fs);
end;
%se grafican
if (graphics > 0)
figure
esps1=abs(fft(demods1));
subplot(3,1,1),plot(esps1),grid on,zoom,title('Espectro señal1 demodulada');
esps2=abs(fft(demods2));
subplot(3,1,2),plot(esps2),grid on,zoom,title('Espectro señal2 demodulada');
esps3=abs(fft(demods3));
subplot(3,1,3),plot(esps3),grid on,zoom,title('Espectro señal3 demodulada');
end
FLAG = input('PASO 1