Está en la página 1de 8

PRCTICA 1:

ESPECTROS DE SEALES

POP Tecn. Electrnicas y Comun.


SISTEMAS DE COMUNICACIONES
DIGITALES

Prctica 1. Espectros de seales


1.1. Objetivos
Aprender a utilizar el MATLAB para determinar el espectro de cualquier tipo
de forma de onda.
1.2. La transformada discreta de Fourier (DFT)
Teniendo en cuenta las posibilidades ofrecidas por las computadoras
personales actuales o la disponibilidad de circuitos integrados para el
procesamiento digital de seales, el espectro de una seal puede aproximarse
fcilmente mediante la denominada transformada discreta de Fourier (DFT):
N 1

X (n) = x(k )e j ( 2 / N ) nk

(1)

k =0

donde n = 0, 1, , N 1. De igual forma, se define la transformada discreta de


Fourier inversa (IDFT) como:

x(k ) =

1
N

N 1

X ( n)e

j ( 2 / N ) nk

(2)

n =0

donde k = 0, 1, , N 1. Obsrvese que ni el tiempo ni la frecuencia aparecen


explcitamente en las expresiones anteriores y ambas se limitan a una serie de
operaciones ejecutables por una computadora.
El programa MALTAB tiene implementadas dos funciones que permiten
determinar tanto la DFT como la IDFT mediante el uso de algoritmos FFT
(transformada rpida de Fourier). Las funciones en MATLAB encargadas de
ello, respectivamente, son las siguientes:
X = fft(x)
y
x = ifft(X)
En las funciones anteriores x y X son vectores de N elementos cada uno, el
primero con las muestras temporales y el segundo con los resultados de la DFT.
La DFT puede utilizarse para aproximar el espectro de una forma de onda w(t),
teniendo en cuenta que:

WT ( f )

f =n / T

tX (n)

(3)

donde WT(t) es el espectro de la versin aventanada entre 0 y T segundos de w(t).

1/8

PRCTICA 1:
ESPECTROS DE SEALES

POP Tecn. Electrnicas y Comun.


SISTEMAS DE COMUNICACIONES
DIGITALES

1.3. Realizacin prctica


1.3.1. Espectro de un pulso rectangular
El espectro de un pulso rectangular de T0 segundos de duracin, w(t) = (t/T0),
puede determinarse analticamente de la siguiente manera:
sen (T0 / 2)
e jT0 / 2 e jT0 / 2
= T0
= T0 sinc(T0 f )
T0 / 2
j
T0 / 2
Del resultado anterior se desprende que los cruces por cero de la funcin sinc(x)
se producen para T0f = n f = n/T0.
W( f ) =

T0 / 2

e jt dt =

1. Utilizar el MATLAB para determinar una aproximacin al espectro del


pulso rectangular. A continuacin mostramos un posible cdigo de
ejemplo:
% Espectro de un pulso rectangular
M=7;
% Definimos el tamao de la FFT
N=2^M; % Nmero de puntos de la FFT
n=0:1:N-1;
T0=1; % Tiempo en alta
T=10;
% Tiempo total
dt=T/N;
t=n*dt;
% Crea la forma de onda con pulso hasta tiempo=T0
w=zeros(1,length(t));
for i=1:length(w)
if t(i)<T0
w(i)=1;
end
end
% Calcula la DFT
W=dt*fft(w);
f=n/T;
pos=find(f>=4/T0);
if ~isempty(pos) & (pos(1) <= N/2)
pos=pos(1); % Calcula la posicin del 4 nulo
else
pos=floor(length(f)/2);
end
subplot(3,1,1)
plot(t,w);
title('Forma de onda en el tiempo')
xlabel('Tiempo (s)')
ylabel('w(t)')
subplot(3,1,2)
plot(f(1:pos),abs(W(1:pos)));
title('ESPECTRO DE MAGNITUD HASTA 4o NULO')
xlabel('Frecuencia (Hz)')
ylabel('|W(f)|')
subplot(3,1,3)
plot(f(1:pos),(180/pi)*angle(W(1:pos)));
grid
title('ESPECTRO DE FASE HASTA 4o NULO')
xlabel('Frecuencia (Hz)')
ylabel('\theta(f) (grados)')

2/8

PRCTICA 1:
ESPECTROS DE SEALES

POP Tecn. Electrnicas y Comun.


SISTEMAS DE COMUNICACIONES
DIGITALES

2. En el cdigo de ejemplo anterior se tom M = 7, lo que da lugar a una


FFT de 128 puntos. Igualmente, se calcul el espectro para un pulso de
un segundo de duracin, sobre una duracin total de 10 segundos
tomando muestras. El espectro de magnitud de un pulso rectangular es
tericamente infinito, aunque a partir del 5 nulo se puede considerar
que sus valores son prcticamente despreciables. Teniendo en cuenta
esto, y dado que el 5 nulo se da para f = 5/T0, habra que muestrear la
seal a un ritmo suficientemente rpido de tal forma que fs 2B, donde B
es el ancho de banda de la seal que se desea muestrear. Si tomamos
B 5/T0, la frecuencia de muestreo debera ser fs 10/T0, es decir,
requeriramos aproximadamente 10 muestras del pulso.
Comprobar qu ocurre si tomamos M = 6 o 5. A qu se debe el resultado
observado?
3. Asignar nuevamente a M un valor igual a 7. Qu ocurre si ahora
hacemos T0 = 2 3, o mayor incluso? Por qu? Qu pasa para T0 = 10?
4. Comprobar qu ocurre si tomamos T0 = 2, y aumentamos M a 9 o 10. A
qu se debe esto? Y si modificamos el valor de T a 40 segundos?
1.3.2. Espectro de una senoide
Cuando una seal es peridica se tiene que su espectro viene dado por:

c ( f nf

W( f ) =

n =

(4)

donde cn son los coeficientes de la serie de Fourier compleja dados por:


cn =

1
T0

T0

w(t )e j 2nf0t dt

(5)

donde T0 es el perodo de la seal y f0 = 1/T0. La expresin anterior puede


reproducirse aproximadamente por una serie finita donde t = kt, dt = t y
t = T0/N. En ese caso, se tiene que:
cn

1
T0

N 1

w(kt )e

j ( 2 / N ) nk

t =

k =0

1
N

N 1

w(k )e
k =0

j ( 2 / N ) nk

1
W (n)
N

(6)

donde W(n) es la DFT para n = 0, 1, ... , N 1. Por tanto, hay que modificar la
ecuacin anterior para que d valores de cn con n negativo. Para n positivo se
utiliza

cn =

1
W (n),
N

0 n < N /2

(7)

y con n negativo se utiliza

3/8

PRCTICA 1:
ESPECTROS DE SEALES

cn =

1
W (n + N ),
N

POP Tecn. Electrnicas y Comun.


SISTEMAS DE COMUNICACIONES
DIGITALES

N /2n<0

(8)

Supongamos, por ejemplo, que deseamos determinar el espectro de la seal


senoidal dada por:

w(t ) = 3sen ( 0 t + 20 )
La expresin anterior se puede representar mediante exponenciales complejas:

3 j ( 20 ) j0t

3
e
w(t ) = 3sen (0t + 20 ) = e j 20 e j0t +
e

2j

2j
Por tanto, se tiene que sus coeficientes de Fourier vienen dados por:
3

c1 = e j 20 = 1,5 70
2j

3 j ( 20 )
= 1,5 + 70
c1 =
e
2j

Y el resto de cn son iguales a cero.


1. Utilizar el MATLAB para determinar una aproximacin al espectro de la
senoide anterior. A continuacin mostramos un posible cdigo de
ejemplo:
M=4;
N=2^M;
fo=10;
wo=2*pi*fo;
n=0:1:N-1;
To=1/fo;
dt=To/N;
t=n*dt;
% Crea la forma de onda de tiempo
w=3*sin(wo*t+(20*pi/180));
% Calcula los puntos de datos FFT
W=fft(w);
% Calcula el espectro de la forma de onda peridica
n1=-N/2:1:N/2-1;
fn1=n1/To;
fs=1/dt;
cn=1/N*W;
% Convierte muestras 0,1,2,3,...,N-1 en positivos y negativos
cn=fftshift(cn);
subplot(3,1,1)
plot(t,w);
title('Forma de onda en el tiempo')
xlabel('Tiempo (s)')
ylabel('w(t)')
subplot(3,1,2)

4/8

PRCTICA 1:
ESPECTROS DE SEALES

POP Tecn. Electrnicas y Comun.


SISTEMAS DE COMUNICACIONES
DIGITALES

stem(fn1,abs(cn));
title('ESPECTRO DE MAGNITUD')
xlabel('Frecuencia (Hz)')
ylabel('|W(f)|')
subplot(3,1,3)
stem(fn1,180/pi*angle(cn).*(abs(cn)>1e-5));
grid
title('ESPECTRO DE FASE')
xlabel('Frecuencia (Hz)')
ylabel('\theta(f) (grados)')

Obsrvese que la fase se ha hecho igual a cero para aquellos valores de


|W(f)| iguales a cero, facilitando con ello la visualizacin de la misma.
2. Qu ocurre si hacemos To = 2/fo? Y si hacemos To = 1/(2fo)? Aumentar
To unidad a unidad, comprobando qu ocurre. Qu ocurre para To
mayor que 8?
3. Qu ocurre si aumentamos M para To fijo e igual a 1/fo? Y si tomamos
M = 7 y To = 5/fo, por ejemplo?
1.3.3. Densidad espectral de potencia de cdigos de lnea
Sea una seal digital (o cdigo de lnea) dada por

s (t ) =

a f (t nT )

n =

(9)

donde f(t) es la forma de onda del pulso del smbolo, y Ts es la duracin del
smbolo. La densidad espectral de potencia de una seal digital es

F( f )

Ps ( f ) =

Ts

R ( k )e

j 2kfTs

(10)

k =

donde F(f) es la transformada de Fourier de la forma del pulso, f(t), y R(k) es la


autocorrelacin de los datos
I

R (k ) = (a n a n + k ) i Pi

(11)

i =1

donde an y an+k son los niveles de voltaje de los pulsos de los datos en las
posiciones del smbolo n-simo y (n+k)-simo, respectivamente, y Pi es la
probabilidad de tener el producto i-simo anan+k.
1. Haciendo uso de las ecuaciones anteriores determinar la PSD de una
seal digital polar. Un posible cdigo MATLAB de ejemplo sera el que
se muestra a continuacin:
M=7;

% Definimos el tamao de la FFT

5/8

PRCTICA 1:
ESPECTROS DE SEALES

POP Tecn. Electrnicas y Comun.


SISTEMAS DE COMUNICACIONES
DIGITALES

N=2^M; % Nmero de puntos de la FFT


n=0:1:N-1;
Ts=1; % Tiempo de duracin del pulso
T=10;
% Tiempo total
dt=T/N;
t=n*dt;
% Crea la forma de onda con pulso hasta tiempo=Ts
w=zeros(1,length(t));
for i=1:length(w)
if t(i)<Ts
w(i)=1;
end
end
% Calcula la DFT del pulso
W=dt*fft(w);
f=n/T;
% Obtiene una posible seal de datos
datos=sign(rand(1,ceil(T/Ts))-0.5);
s=zeros(1,length(t));
for i=1:length(s)
s(i)=datos(floor(t(i)/Ts)+1);
end
subplot(2,1,1)
plot(t,s);
title('Forma de onda en el tiempo')
xlabel('Tiempo (s)')
ylabel('s(t)')
A=2;
axis([0 T -2*A 2*A]);
% Calcula R(k)
R=0.5*A*A+0.5*(-A)*(-A);
% Calcula la PSD
P=(abs(W).^2)*R/Ts;
pos=find(f>=4/Ts);
if ~isempty(pos)
pos=pos(1); % Calcula la posicin del 4 nulo
else
pos=floor(length(f)/2);
end
subplot(2,1,2)
plot(f(1:pos),P(1:pos));
title('PSD de una seal digital polar')
xlabel('Frecuencia (Hz)')
ylabel('P_{polar}(f)')

El mtodo anterior permite determinar de manera exacta la PSD de la seal


aleatoria, pero requiere una serie de clculos tericos para llevarlo a cabo. Una
forma alternativa consiste en promediar las PSD intermedias obtenidas
mediante clculos de la DFT de distintos tramos consecutivos de la seal
aleatoria. Supongamos que disponemos de M muestras de la seal aleatoria
cuya PSD deseamos determinar. Si subdividimos la secuencia de M muestras en
K segmentos de N muestras cada uno (cuya duracin temporal es T segundos),
para cada segmento podemos estimar su PSD como:
Pw( i ) ( f )

1 (i )
WT ( f )
T

2
f =n / T

1
2
tX i (n)
T

6/8

(12)

PRCTICA 1:
ESPECTROS DE SEALES

POP Tecn. Electrnicas y Comun.


SISTEMAS DE COMUNICACIONES
DIGITALES

dado que, por definicin:

Pw ( f ) lim

1
2
WT ( f )
T

(13)

El superndice i en la PSD dada por (12) se utiliza para indicar que se trata del
clculo obtenido a partir del segmento i-simo, para 0 i K 1. As,
promediando entre las K PSD obtenidas, se llega a una estimacin de la PSD:
Pw ( f )

1
K

K 1

Pw(i ) ( f )
i =0

1
K

1
t 2
2
tX
(
n
)

i
KT
i =0 T
K 1

K 1

X
i =0

( n)

(14)

donde

X i ( n) =

( i +1) N 1

x ( k )e

j ( 2 / N ) nk

(15)

k =iN

2. Haciendo uso del MATLAB, estimar la densidad espectral de potencia de


una seal polar mediante la ecuacin (14). Comparar el resultado con el
obtenido tericamente aplicando (10). Un posible cdigo sera el
siguiente:
M=8;
% Definimos el tamao de la FFT
N=2^M; % Nmero de puntos de la FFT
n=0:1:N-1;
Ts=1; % Tiempo de duracin del pulso
T=10; % Tiempo total
K=10000;
k=0:1:N*K-1;
dt=T/N;
t=n*dt;
t1=k*dt;
% Crea la forma de onda con pulso hasta tiempo=Ts
w=zeros(1,length(t));
for i=1:length(w)
if t(i)<Ts
w(i)=1;
end
end
% Calcula la DFT del pulso
W=dt*fft(w);
f=n/T;
% Obtiene una posible seal de datos
datos=sign(rand(1,ceil(K*T/Ts))-0.5);
s=zeros(1,length(t1));
for i=1:length(s)
s(i)=datos(floor(t1(i)/Ts)+1);
end
A=2;
s=A*s;
S=zeros(1,N);
for j=1:K
S=S+abs(fft(s((j-1)*N+1:j*N))).^2;
end
S=S*dt^2/(K*T);
subplot(3,1,1)
plot(t1,s);

7/8

PRCTICA 1:
ESPECTROS DE SEALES

POP Tecn. Electrnicas y Comun.


SISTEMAS DE COMUNICACIONES
DIGITALES

title('Forma de onda en el tiempo')


xlabel('Tiempo (s)')
ylabel('s(t)')
axis([0 5*T -2*A 2*A]);
% Calcula R(k)
R=0.5*A*A+0.5*(-A)*(-A);
% Calcula la PSD
P=(abs(W).^2)*R/Ts;
pos=find(f>=4/Ts);
if ~isempty(pos)
pos=pos(1); % Calcula la posicin del 4 nulo
else
pos=floor(length(f)/2);
end
subplot(3,1,2)
plot(f(1:pos),P(1:pos));
title('PSD de una seal digital polar (terica)')
xlabel('Frecuencia (Hz)')
ylabel('P_{polar}(f)')
subplot(3,1,3)
plot(f(1:pos),S(1:pos));
title('PSD de una seal digital polar (estimada)')
xlabel('Frecuencia (Hz)')
ylabel('P_{polar}(f)')

3. Con el procedimiento anterior dado por (14), intentar estimar el espectro


de una seal Manchester. Obsrvese que esto se limita a redefinir la seal
s(t) tal que:
s=zeros(1,length(t1));
for i=1:length(s)
dato= datos(floor(t1(i)/Ts)+1);
ind=mod(t1(i),Ts);
if ind<0.5
s(i)=dato;
else
s(i)=-dato;
end
end

Nota: Para la sealizacin Manchester NRZ, R(k) coincide con el


obtenido para la sealizacin polar NRZ, es decir:
A2 , k = 0
R (k ) =
k0
0,

8/8

También podría gustarte