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