Вы находитесь на странице: 1из 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):

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

N 1

(1)

donde n = 0, 1, , N 1. De igual forma, se define la transformada discreta de Fourier inversa (IDFT) como:

x(k ) =

1 N

X ( n)e
n =0

N 1

j ( 2 / N ) nk

(2)

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: W( f ) =

n =

c ( f nf
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

w(kt )e
k =0

N 1

j ( 2 / N ) nk

t =

1 N

w(k )e
k =0

N 1

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

POP Tecn. Electrnicas y Comun. SISTEMAS DE COMUNICACIONES DIGITALES

cn =

1 W (n + N ), N

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 j ( 20 ) j0t w(t ) = 3sen (0t + 20 ) = e 2j e e + 2je


Por tanto, se tiene que sus coeficientes de Fourier vienen dados por:
3 j 20 c1 = 2je = 1,5 70 3 j ( 20 ) c1 = 2j e = 1,5 + 70

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 ) =

n =

a f (t nT )
n s

(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 Ps ( f ) =

F( f ) Ts

k =

R ( k )e

j 2kfTs

(10)

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

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

(11)

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

(12)

6/8

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

Pw(i ) ( f )
i =0

K 1

1 K

1 t 2 2 tX ( n ) = i KT i =0 T
K 1

X
i =0

K 1

( n)

(14)

donde

X i ( n) =

( i +1) N 1
k =iN

x ( k )e

j ( 2 / N ) nk

(15)

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

Вам также может понравиться