You are on page 1of 5

ESPECTRO DE SEÑALES

ESPECTRO DE UN PULSO RECTANGULAR

El espectro de un pulso rectangular de T0 segundos de duración, w(t) = Π(t/T0),
puede determinarse analíticamente de la siguiente manera:

Del resultado anterior se desprende que los cruces por cero de la función 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 tamaño de la FFT
N=2^M; % Número 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 posición 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 código 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 duración,
sobre una duración total de 10 segundos tomando muestras. El espectro de magnitud
de un pulso rectangular es teóricamente infinito, aunque a partir del 5º nulo se puede
considerar que sus valores son prácticamente despreciables.

Teniendo en cuenta esto, y dado que el 5º nulo se da para f = 5/T0, habría que
muestrear la señal a un ritmo suficientemente rápido de tal forma que fs ≥ 2B, donde
B es el ancho de banda de la señal que se desea muestrear. Si tomamos B ≈ 5/T0, la
frecuencia de muestreo debería ser fs≥10/T0, es decir, requeriríamos
aproximadamente 10 muestras del pulso.


ESPECTRO DE UNA SENOIDE

Cuando una señal es periódica 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 período de la señal y f0 = 1/T0. La expresión anterior puede
reproducirse aproximadamente por una serie finita donde t = kΔt, 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 ecuación
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 señal senoidal
dada por:

La expresión 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 periódica
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)')