Quando um sinal binário é transmitido e o número de bits '0's e '1's possuem probabilidade de ocorrência diferente (ex: 60% e 40%), o cálculo da taxa de erro é um pouco mais complicado que na situação mais simples de bits equiprováveis.
Se o sinal binário for mapeado nos símbolos "+1" e "-1" distribuídos com igual probabilidade, a taxa de erro, considerando um ruído do tipo gaussiano e de média nula e variância $\sigma_x^2$, pode ser calculada por:
$$ P_e = Q\left( \frac{1}{\sigma_x}\right) = \frac{1}{2} erfc\left( \frac{1}{\sqrt{2}\sigma_x}\right) $$
se for usado um limiar de comparação $\lambda = 0$.
Se os símbolos "+1" e "-1" não forem igualmente prováveis, é necessário se calcular primeiro o limiar de comparação. Esse limiar vai depender do ruído (variância do ruído) e da probabilidade de ocorrência ($P_0$ para o símbolo "-1" e $P_1$ para o símbolo "+1") dos símbolos:
$$ \lambda_0 = -\frac{\sigma_x^2}{2}\ln\left(\frac{P_1}{P_0}\right) $$
Com esse valor de limiar, a taxa de erro pode ser calculada por:
$$ P_e = P_0 Q(\lambda_u) + P_1 Q(-\lambda_t)$$
sendo $\lambda_u = (\lambda_0 + 1)/\sigma_x$ e $\lambda_t = (\lambda_0 - 1)/\sigma_x$. Os detalhes dessas deduções foram, naturalmente, omitidos.
O programa Scilab abaixo faz uma simulação e o cálculo do valor ótimo de comparação quando os símbolos apresentam uma probabilidade de 60% (+1) e 40% (-1) e ruído apresenta uma variância de 0,50. O resultado gráfico é:
----------------------------------
--------------
----
clear; clc; close; close; close; N = 1e5; pv = 1; for mm=1:5 disp(mm); // gerando +1 (60%), -1 (40%) b = ones(1,N); for k=1:N x= rand(1,1,'u'); if x>0.6 then b(k)=-1; end end // corrigindo o numero de +1, -1: mmb = mean(b); pos = 100; while mmb<0.199999 b(pos) = 1; pos = pos + 10; mmb = mean(b); end disp([1, pos]); while mmb>0.200001 b(pos) = -1; pos = pos + 10; mmb = mean(b); end disp([2 pos]); // ruido: vn = sqrt(0.5); n = rand(1,N,'n'); n = n - mean(n); n = n/sqrt(variance(n)); n = vn*n; bn = b + n; bd = sign(bn); erros = sum(abs(bd - b))/2; vcomp = -vn*vn*log(0.6/0.4)/2; // valor ótimo de comp. emm = 0.1; vc1 = vcomp - 4*0.02; vc2 = vcomp + 4*0.02; pv=1; er = 0.00001; vlamb = vc1:0.02:vc2; verrosm = 0*vlamb; verros = verrosm; for lamb = (vc1):0.02:(vc2+0.0001) for k=1:N if bn(k) > lamb then bd(k) = 1; else bd(k) = -1; end end erros2 = sum(abs(bd - b))/2; verros(pv) = erros2/N; // disp([pv, lamb]) pv = pv + 1; end; if mm==1 then verrosm = verros; else verrosm = verrosm + verros; end end; verrosm = verrosm/mm; plot(vlamb, verrosm); xgrid; title('Taxa de erros em função do limiar'); figure; subplot(2,2,1); bar([-1 1],[0.4 0.6],0.1); x=-3:0.001:3; g1 = (0.4/(sqrt(2*%pi)*vn))*exp(-(x+1).*(x+1)/(2*vn*vn)); g2 = (0.6/(sqrt(2*%pi)*vn))*exp(-(x-1).*(x-1)/(2*vn*vn)); gn = (1/(sqrt(2*%pi)*vn))*exp(-(x).*(x)/(2*vn*vn)); subplot(2,2,2); plot(x,gn); title('Ruído'); subplot(2,1,2); histplot(50,bn); plot(x,g1,x,g2,x,g1+g2); title('Sinal com ruido'); plot([vcomp vcomp],[0 0.4],'m');
Nenhum comentário:
Postar um comentário