Siguiente: Más gráficas Superior: Comenzando con PDL: un Anterior: Operaciones con matrices |
Como ejemplo ilustrativo adicional vamos a realizar un análisis de Fourier de una señal y filtrarla.
Primero crearemos la señal a procesar y la dibujaremos tal como aparece en la Fig. 4.
perldl> $x=zeroes(1000)->xlinvals(-20,20) perldl> $y=sin($x/0.1)+cos($x/0.5) perldl> line($x,$y)
El comando para realizar transformadas de Fourier
es el fft
, pero antes de utilizarlo hay que cargar
el módulo PDL::FFT
.
Por otro lado el comando fft
acepta como argumentos
la parte real de la señal y su imaginaria y las modifica
en el sitio, es decir, los ``piddles'' de salida son los mismos
que los de entrada pero modificados.
Para conservar la señal original haremos primero una copia
de ella como parte real y parte imaginaria.
perldl> $ry=$y->copy perldl> $iy=zeroes(1000)
Ahora realizamos la transformada de Fourier
perldl> use PDL::FFT perldl> fft($ry,$iy)
Podemos ahora dibujar el espectro de potencias de dicha transformada
perldl> line($ry**2+$iy**2)
y obtenemos la Fig. 5
Creemos un filtro de forma que anulemos las frecuencias de una de las sinusoides tal y como aparece en la Fig. 5.
perldl> $filtro=sequence(1000) perldl> $filtro=($filtro<40)+($filtro>960)
Multiplicando el filtro por las dos componentes de la transformada obtenemos la señal filtrada
perldl> $ry=$ry*$filtro perldl> $iy=$iy*$filtro perldl> line($ry**2+$iy**2)
Deshaciendo ahora la transformada y dibujando el resultado obtenemos la señal filtrada de la Fig. 6.
perldl> ifft($ry,$iy) perldl> line($x,$ry)