\[ E_X = \int_{-\infty}^{+\infty} |x(t)|^2 dt \]
sendo $x(t)$ um sinal aleatório ou determinístico que varia no tempo. A densidade espectral de potência $S_X$ indica como a energia de uma sinal está distribuída ao longo do eixo de frequência e pode ser calculada por:
\[ S_X = \int_{-\infty}^{+\infty} R_X(\tau) e^{-j2\pi f \tau} d\tau \]
onde $R_X(\tau)$ é função de autocorrelação de um processo $x(t)$ estacionário no sentido amplo. Essa definição de densidade espectral de energia requer que a transformada de Fourier exista, ou seja, que a integral quadrada seja calculável. Para um sinal binário aleatório (amplitude $+A$, $-A$), a função de autocorrelação é
\[ R_X(\tau) = \left\{\begin{matrix}
A^2(1-|\tau|/T) & |\tau| < T\\
0 & |\tau| \geqslant T
\end{matrix}\right. \]
e a densidade espectral de potência é neste caso:
\[ S_X(f) = A^2 T sinc^2(fT) \]
Abaixo temos um exemplo de código Scilab que explora esses conceitos. O sinal gerado é um sinal binário aleatório com amplitude $\pm 1$.
Código Scilab:
//// Aula de 20/09/2022
close; close; close; close; clc;
N = 10000; ///bits
tb = 10;
p1 = ones(1,tb);
x = [];
b = sign(rand(1,N,'n')); ///+1-1
for k=1:N
x = [x, b(k)*p1] ;
end
subplot(2,2,1); plot(x(1:200)*1.01);
title('Sinal binário'); xgrid;
Rx = xcorr(x); /// autocorrelação
M = round(max(size(Rx))/2);
subplot(2,2,2); plot(Rx(M-199:M+199));
title('Autocorrelação');
Sx = abs(fft(x));
Sx = Sx.*Sx;
subplot(2,2,3); plot(Sx(1:round(M/2)));
SxR = abs(fft(Rx));
SxR = log10(SxR + 1e-6);
subplot(2,2,4); plot(SxR(1:M));
//////////////////////////////
ruido = 0.35*rand(x,'n');
x = x + ruido;
figure;
subplot(2,2,1); plot(x(1:200)*1.01); title('Sinal binário');
Rx = xcorr(x);
M = round(max(size(Rx))/2);
subplot(2,2,2); plot(Rx(M-199:M+199)); title('Autocorrelação');
Sx = abs(fft(x));
Sx = Sx.*Sx;
subplot(2,2,3); plot(Sx(1:round(M/2)));
SxR = abs(fft(Rx));
subplot(2,2,4); plot(SxR(1:M));
/////////////////
h = convol([0.2 0.4 0.5 0.5 0.4 0.2],[0.3 0.5 0.3]);
h = h/sum(h);
x = filter(h,1,x);
figure;
subplot(2,2,1); plot(x(1:200)*1.01); title('Sinal binário');
Rx = xcorr(x);
M = round(max(size(Rx))/2);
subplot(2,2,2); plot(Rx(M-199:M+199)); title('Autocorrelação');
Sx = abs(fft(x));
Sx = Sx.*Sx;
subplot(2,2,3); plot(Sx(1:round(M/2)));
SxR = abs(fft(Rx));
subplot(2,2,4); plot(SxR(1:M));
Exemplo de saída (sinal com ruído):
Nenhum comentário:
Postar um comentário