how to plot BER curve for VLC-OFDM
2 次查看(过去 30 天)
显示 更早的评论
Pessoal.
Estou fazendo o script VLC-OFDM baseado em BPSK Watermark.
Alguém poderia me ajudar a encontrar a curva de BER para o código listado abaixo?
Aceito sugestões.
% Número de bits
N = 1e4;
% tamanho da constelação
M = 2;
% Número máximo de iterações para um único SNR
max_run = 100;
% Relação Sinal-Ruído (em dB)
SNRdB = 0:12;
SNR = 10. ^ (SNRdB / 10);
% desvio padrão do sinal (potência)
sigmaX2 = 0,15;
% Modelo LED
imax = 0,5;
% Modelo LED
K = 2;
% desvio padrão do ruído (potência)
% sigmaV2 = 0,1;
limiar = 150;
thresholdv = linspace (50,170,20);
thresholdv = thresholdv (fim: -1: 1);
sigmaV2 = (imax / limite) ^ 2;
SNRL1 = 10 * log10 (sigmaX2 / sigmaV2);
% Modelo LED
Vt = 0,5;
% Modelo LED
Is = 0,12;
sigmaX2v = logspace (log10 (0,001), log10 (0,5), 20);
indsigmaX2 = 1;
indsigmaV2 = 1;
para contagem = 1: comprimento (SNRL1)
% para limiar = limiarv
%
% sigmaV2vmedian (indsigmaV2) = sigmaV2;
%
% SNRideal(indsigmaV2) = 10*log10(sigmaX2/sigmaV2);
%
% indsigmaV2 = indsigmaV2+1;
%
% end
%
% for sigmaX2=sigmaX2v
%
% sigmaX2vmedian(indsigmaX2) = mean(abs( sqrt(sigmaX2)*randn(N,1)));
%
% indsigmaX2 = indsigmaX2+1;
%
% end
for run_time=1:max_run
% erro inicial
Error=0;
% Gera bits aleatórios ( matriz de variaveis binarias)
Bits_ale = randsrc(1,N,[0:1]);
% Modulação BPSK 0 -> -1; 1 -> 1
Bits_bpsk = 2 * Bits_ale-1;
% Gera bits de marca d'água aleatórios
Bit_wat = randsrc(1,N,[0:1]);
% Ângulo da marca d'água
Theta = pi/4;
% Fórmula para obter a equação geral.
for k = 1:N
if Bit_wat(k)==1
Bit_enviado(k) = Bits_bpsk(k) * exp(1i * Bits_bpsk(k) * Theta);
else
Bit_enviado(k) = Bits_bpsk(k) * exp(-1i * Bits_bpsk(k) * Theta);
end
end
Y = Bit_enviado;
stdS = std(Y);
X = zeros(1,4*N);
X(2:2:end) = [Y; conj(Y(end:-1:1))];
xTD = ifft(X);
xTD = (sqrt(sigmaX2))*xTD/std(xTD);
x= xTD;
ind = find(xTD<0);
x(ind) = zeros(size(ind));
% Laser-related equations
s = x;
iLED = Is*(exp(s/Vt)-1);
xLED = iLED./( (1 + (iLED/imax).^(2*K)).^(1/(2*K)));
nErrors = 0;
cont = 0;
while nErrors < 200
cont=cont+1;
v = sqrt(sigmaV2)*randn(size(x));
y = xLED + v;
Nframe = length(y);
Xhat = (fft(y));
Shat = Xhat(2:2:Nframe/2);
Shat = stdS*Shat/std(Shat);
RxData1 = pskdemod (Shat, M);
RxData = Shat;
nErrorsFrame = soma (sinal (abs (RxData1 - Bits_bpsk)));
nErrors = nErrors + nErrorsFrame;
fim
BER = nErros / (N * cont);
fim
% Fim do loop para SNR diferente
fim
% Calcular BER analítico (para função normal
BER_th = (1/2) * erfc (sqrt (SNR));
0 个评论
回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 BPSK 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!