Implementación Señal BB modulada en FM Stereo

Contents

Importamos la señal digital

data=importdata('x3.wav');
xL=data.data(1:2^15,1); %Toma algunas muestras
xR=data.data(1:2^15,2);
FsBB=data.fs;
FsFI=4*FsBB;  % Nyquist

Incremento de la Frecuencia de Muestreo a 4*FsBB

%(Esto no hay porque entenderlo)
L = (FsFI/FsBB)-1;
% Inserccion de 0s
zint=zeros(length(xL),L);
xLMatInterp=[xL,zint];
xRMatInterp=[xR,zint];

xLInterp=reshape(xLMatInterp',1,size(xLMatInterp,1)*size(xLMatInterp,2));
xRInterp=reshape(xRMatInterp',1,size(xLMatInterp,1)*size(xLMatInterp,2));

% Filtro a 15kHz para quitar las frecuencias altas
Hd = LPF15khz(FsFI);

a=1;b=Hd.Numerator;
xLInterp_LPF=filter(b,a,xLInterp); % Señal canal izdo filtrada
xRInterp_LPF=filter(b,a,xRInterp); % Señal canal dcho filtrada


figure
f=linspace(-.5,.5,length(xLInterp)).*FsFI;
plot(f*1e-3,abs(fftshift(fft(xLInterp))));
title('Espectro de la señal interpolada sin filtrar'), grid on
xlabel('Frecuencia en kHz')


figure
f=linspace(-.5,.5,length(xLInterp_LPF)).*FsFI;
plot(f*1e-3,abs(fftshift(fft(xLInterp_LPF))));
title('Espectro de la señal interpolada y filtrada'), grid on
xlabel('Frecuencia en kHz')

Composición de las señales suma y resta

xSum= xLInterp_LPF+xRInterp_LPF; % Composición de la señal suma
xDiff= xLInterp_LPF-xRInterp_LPF; % Composición de la señal resta

f=linspace(-.5,.5,length(xSum)).*FsFI;
figure,plot(f*1e-3,abs(fftshift(fft(xSum))));
title('Espectro de la señal suma en BandaBase'), grid on
xlabel('Frecuencia en kHz')

figure
f=linspace(-.5,.5,length(xDiff)).*FsBB;
plot(f*1e-3,abs(fftshift(fft(xDiff))));
title('Espectro de la señal resta en BandaBase'), grid on
xlabel('Frecuencia en kHz')

Tono de 19kHz

%Genero la base de tiempos para construir el tono de 19kHz
Fosc=19e3;
N=length(xLInterp_LPF); %Tomo la longitud para generar un vector igual de largo
t=0:1/FsFI:(N-1)/FsFI;
t=t(:); % este como este, la pongo en columna

tono19=.01*cos(2*pi*Fosc*t);
 figure
subplot(2,1,1)
plot(t(1:500)*1e3,tono19(1:500)), title('Tono de 19kHz en el tiempo'),xlabel('Tiempo en ms'), grid on
subplot(2,1,2)
f=linspace(-.5,.5,length(t)).*FsFI;
plot(f*1e-3,abs(fftshift(fft(tono19)))), title('Tono de 19kHz en el tiempo'), xlabel('Frecuencia en kHz'), grid on

Modulacion de la señal resta

La señal resta se modula en doble banda lateral utilizando el doble de frecuencia del tono como señal portadora

xSup=xDiff.*cos(2*pi*Fosc*2*t.');

Composición del espectro final

Compongo la señal completa con la parte superior (señal resta modulada en DSB), tono de 19kHz y parte inferior (señal suma)

xInf=xSum; %Espectro inferior

% Sumo todas las componentes de banda base antes de subirlo a la portadora

senyalBB=xInf+xSup+tono19.';

Figuras

f=linspace(-.5,.5,length(xSup)).*FsFI;
figure
plot(f*1e-3,abs(fftshift(fft(xSup))));
hold on
plot(f*1e-3,abs(fftshift(fft(tono19))),'r');
plot(f*1e-3,abs(fftshift(fft(xInf))),'g');
grid on
legend('Senyal Diferencia', 'Tono de 19kHz', 'Senyal Suma');
xlabel('Freq. in kHz')
title('Espectro en BB con las diferentes señales')

figure
plot(f*1e-3,abs(fftshift(fft(senyalBB)))), grid on
xlabel('Freq. in kHz')
title('Espectro en BB conjunto')