... simulé un sistema de comunicación de luz visible (VLC) para un canal AWGN (ruido gaussiano blanco aditivo) y dibujé la BER (tasa de error de bits) contra Ebno. Utilicé la respuesta de impulso LED (diodo emisor de luz) y la convolví con la señal producida para transmitir. Pero los resultados no están bien. Significa que la BER es fija o 0.5. Es un sistema PAM-DMT (multitono discreto por modulación de amplitud de pulso) cuyo transmisor es un conjunto de 50 * 50 LED. La entrada es una secuencia binaria modulada por el modulador PAM. Se utilizan para hacer símbolos OFDM mediante el algoritmo PAM-DMT. Los símbolos OFDM se modulan con la intensidad del LED y se transmiten al canal. En el lado del receptor, después de demodular los símbolos recibidos, la secuencia binaria recibida se compara con la secuencia binaria de entrada para calcular la BER. En cada símbolo OFDM, hay algunos portadores de datos, portadores de símbolos piloto y portadores nulos. Creo que el problema es sobre el esquema que utilizo para cortar la longitud extendida (hecha mediante la convolución de la entrada de LED con la respuesta de impulso de LED) de la señal transmitida en el lado del receptor. ¿Podría alguien ayudarme si estoy equivocado? Gracias de antemano.
Aquí está mi código de Matlab:
clear,clc;
close all;
%%
k=4;M=2^k; %4 bits per PAM symbol%
c=3*1e8; %m/ns
f_3dB=15e6;%1/ns
N=32;
R=0.54;%Responsivity at A/W%
ro=0.8;% Reflection coefficient
Ar=1e-4;
index=1.5;
carier_freqSpac=f_3dB/N;
T_sym=1/f_3dB;%The time of a PAM symbol is 0.5us or 500ns.
Tb=T_sym/k;
Rb=1/Tb;
T_ifft=1/carier_freqSpac;
l_cp=N/4;
T_cp=T_sym*l_cp;
T_ofdmsym=T_ifft+T_cp; %OFDM symbol duration is 4us%
l_ofdm_sym=N+l_cp;
n_pilot_carrier=N/16;
n_null=N/16;
n_data_carrier=N-n_null-n_pilot_carrier;
nofdm=2e4;
TTran_ofdm_sym=((n_data_carrier+n_pilot_carrier)*T_sym)+T_cp;
Rb_ofdm=((n_data_carrier+n_pilot_carrier)*k)/TTran_ofdm_sym;% at b/s
hpammod=comm.PAMModulator(M,'BitInput',true);
hpam_demod=comm.PAMDemodulator(M,'BitOutput',true);
%Pilots in the 1st half
if N==32;
PS=[1];
elseif N==64;
PS=[-1 1];
elseif N==128;
PS=[-1 -1 1 1];
end;
input_b=randi([0,1],nofdm*(n_data_carrier/2)*k,1);
n_bit=length(input_b);
PAM_sym=step(hpammod,input_b);
n_PAMsym=n_bit/k;
PAM_sym=reshape(PAM_sym,n_data_carrier/2,nofdm);
PAM_sym_PS_1st=[];
if N==32;
for i=1:nofdm;
PAM_sym_ps_1st=1j.*[0;PAM_sym(1:14,i);PS(1)];
PAM_sym_PS_1st=[PAM_sym_PS_1st PAM_sym_ps_1st];
PAM_sym_ps_2nd=circshift(conj(flipud(PAM_sym_ps_1st)),1);
PAM_sym_PS_2nd=[PAM_sym_PS_2nd PAM_sym_ps_2nd];
end;
elseif N==64;
for i=1:nofdm;
PAM_sym_ps_1st=1j.*[0;PAM_sym(1:14,i);PS(1);0;PAM_sym(15:28,i);PS(2)];
PAM_sym_PS_1st=[PAM_sym_PS_1st PAM_sym_ps_1st];
PAM_sym_ps_2nd=circshift(conj(flipud(PAM_sym_ps_1st)),1);
PAM_sym_PS_2nd=[PAM_sym_PS_2nd PAM_sym_ps_2nd];
end;
elseif N==128;
for i=1:nofdm;
PAM_sym_ps_1st=1j.* [0;PAM_sym(1:14,i);PS(1);0;PAM_sym(15:28,i);PS(2);0;PAM_sym(29:42,i);PS(3);0;PAM_sym(43:56,i);PS(4)];
PAM_sym_PS_1st=[PAM_sym_PS_1st PAM_sym_ps_1st];
PAM_sym_ps_2nd=circshift(conj(flipud(PAM_sym_ps_1st)),1);
PAM_sym_PS_2nd=[PAM_sym_PS_2nd PAM_sym_ps_2nd];
end;
end;
ifft_in=[PAM_sym_PS_1st;PAM_sym_PS_2nd];
ifft_out=ifft(ifft_in,N);
cp=ifft_out(N-l_cp+1:N,:);
ofdm_sym=[cp;ifft_out];
ofdm_sym1=reshape(ofdm_sym,l_ofdm_sym*nofdm,1);% P/S%
uni_ofdm_sym=(ofdm_sym1+abs(ofdm_sym1))./2;
% t=0:T_sym:100e-9;%ns
t=0:T_sym:100e-9;%ns
n_led=2500;
hled=(n_led).*exp((-2*pi*f_3dB).*t);
hled=hled./sum(hled);
ledin=48e-6*n_led+uni_ofdm_sym;
optsig=R.*conv(ledin,hled);
l=length(optsig)-length(ofdm_sym1);
Ebno_dB=0:20;
SNR_db=Ebno_dB+10*log10((N/N+l_cp))...
+10*log10(((n_data_carrier+n_pilot_carrier)/N))+10*log10(k);
Ber=zeros(1,length(SNR_db));
for rr=1:length(SNR_db);
inoisy=awgn(optsig,SNR_db(rr),'measured');
inoisy1=inoisy((1+floor(l/2)):(floor(l/2)+length(ofdm_sym1)));
inoisy22=reshape(inoisy1,l_ofdm_sym,nofdm);
fft_in=inoisy22(l_cp+1:N+l_cp,:);
fft_out=fft(fft_in,N);
if N==32;
fft_out2=fft_out(2:15,:);
ps=fft_out(16,:);
hprim=ps/PS;
elseif N==64;
f1=fft_out(2:15,:);
f2=fft_out(18:31,:);
fft_out2=[f1;f2];
ps1=fft_out(16,:)/PS(1);ps2=fft_out(32,:)/PS(2);
hprim=[ps1;ps2];
elseif N==128;
f1=fft_out(2:15,:);
f2=fft_out(18:31,:);
f3=fft_out(34:47,:);
f4=fft_out(50:63,:);
fft_out2=[f1;f2;f3;f4];
ps1=fft_out(16,:)/PS(1);ps2=fft_out(32,:)/PS(2);ps3=fft_out(48,:)/PS(3);ps4=fft_out(64,:)/PS(4);
hprim=[ps1;ps2;ps3;ps4];
end;
fft_out3=2.*imag(fft_out2);
fft_out4=reshape(fft_out3,n_data_carrier*0.5*nofdm,1);
demoded_sig=step(hpam_demod,fft_out4);
ber1=xor(input_b,demoded_sig);
Ber(1,rr)=sum(ber1)/length(ber1)
end;
semilogy(Ebno_dB,Ber,'g-s','LineWidth',2.5,'MarkerSize',8);grid on;