Вы находитесь на странице: 1из 5

ESPECTRO DE SEALES

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:

Del resultado anterior se desprende que los cruces por cero de la funcin sinc(x) se
producen para T0f = n f = n/T0.

CODIFICACION EN MATLAB PARA DETERMINAR UNA APROXIMACION AL ESPECTRO DEL
PULSO RECTANGULAR:

>> % 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)
% Calcula la posicin del 4 nulo
pos=pos(1);
else
pos=floor(length(f)/2);
end
subplot(3,1,1)
plot(t,w);
grid
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)));
grid
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)')
>> dt=T/N;





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 fs10/T0, es decir, requeriramos
aproximadamente 10 muestras del pulso.


ESPECTRO DE UNA SENOIDE

Cuando una seal es peridica se tiene que su espectro viene dado por:

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


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:



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


y con n negativo se utiliza

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

La expresin anterior se puede representar mediante exponenciales complejas:




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


Y el resto de cn son iguales a cero.

CODIFICACION EN MATLAB PARA DETERMINAR UNA APROXIMACION AL
ESPECTRO DE LA SENOIDE

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);
grid
title('Forma de onda en el tiempo')
xlabel('Tiempo (s)')
ylabel('w(t)')
subplot(3,1,2)
stem(fn1,abs(cn));
grid
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)')

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