Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Las transformaciones de Fourier

La transformada de Fourier es una fórmula matemática que relaciona una señal muestreada en el tiempo o el espacio a la misma señal muestreada en frecuencia. En el procesamiento de señales, la transformada de Fourier puede revelar características importantes de una señal, es decir, sus componentes de frecuencia.

La transformada de Fourier se define para un vector

<math display="block">
<mrow>
<mi>x</mi>
</mrow>
</math>
Con
<math display="block">
<mrow>
<mi>n</mi>
</mrow>
</math>
puntos muestreados uniformemente por

<math display="block">
<mrow>
<msub>
<mrow>
<mi>y</mi>
</mrow>
<mrow>
<mi>k</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msub>
<mo>=</mo>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>j</mi>
<mo>=</mo>
<mn>0</mn>
</mrow>
<mrow>
<mi>n</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</munderover>
<msup>
<mrow>
<mi>ω</mi>
</mrow>
<mrow>
<mi>j</mi>
<mi>k</mi>
</mrow>
</msup>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mi>j</mi>
<mo>+</mo>
<mn>1</mn>
</mrow>
</msub>
<mo>.</mo>
</mrow>
</math>

<math display="block">
<mrow>
<mi>ω</mi>
<mo>=</mo>
<msup>
<mrow>
<mi>e</mi>
</mrow>
<mrow>
<mo>-</mo>
<mn>2</mn>
<mi>π</mi>
<mi>i</mi>
<mo>/</mo>
<mi>n</mi>
</mrow>
</msup>
</mrow>
</math>
es una de
<math display="block">
<mrow>
<mi>n</mi>
</mrow>
</math>
raíces complejas de la unidad donde
<math display="block">
<mrow>
<mi>i</mi>
</mrow>
</math>
es la unidad imaginaria. Para
<math display="block">
<mrow>
<mi>x</mi>
</mrow>
</math>
Y
<math display="block">
<mrow>
<mi>y</mi>
</mrow>
</math>
, los índices
<math display="block">
<mrow>
<mi>j</mi>
</mrow>
</math>
Y
<math display="block">
<mrow>
<mi>k</mi>
</mrow>
</math>
van desde
<math display="block">
<mrow>
<mn>0</mn>
</mrow>
</math>
Para
<math display="block">
<mrow>
<mi>n</mi>
<mo>-</mo>
<mn>1</mn>
</mrow>
</math>
.

La función de MATLAB® utiliza un algoritmo de transformación Fourier rápido para calcular la transformada de datos de Fourier.fft Considere una señal sinusoidal que es una función del tiempo con componentes de frecuencia de 15 Hz y 20 Hz.xt Utilice un vector de tiempo muestreado en incrementos de

<math display="inline">
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>50</mn>
</mrow>
</mfrac>
</mrow>
</math>
de un segundo durante un período de 10 segundos.

t = 0:1/50:10-1/50;                      x = sin(2*pi*15*t) + sin(2*pi*20*t); plot(t,x)

Computa la transformada de Fourier de la señal, y crea el vector que corresponde al muestreo de la señal en el espacio de frecuencias.f

y = fft(x);      f = (0:length(y)-1)*50/length(y);

Cuando se traza la magnitud de la señal en función de la frecuencia, los picos de magnitud corresponden a los componentes de frecuencia de la señal de 15 Hz y 20 Hz.

plot(f,abs(y)) title('Magnitude')

La transformación también produce una copia reflejada de los picos, que corresponden a las frecuencias negativas de la señal. Para visualizar mejor esta periodicidad, puede utilizar la función, que realiza un desplazamiento circular centrado en cero en la transformación.fftshift

n = length(x);                          fshift = (-n/2:n/2-1)*(50/n); yshift = fftshift(y); plot(fshift,abs(yshift))

Señales ruidosas

En las aplicaciones científicas, las señales a menudo se corrompen con ruido aleatorio, disfrazado de sus componentes de frecuencia. La transformada de Fourier puede procesar el ruido aleatorio y revelar las frecuencias. Por ejemplo, cree una nueva señal, inyectando ruido Gaussiano en la señal original,.xnoisex

xnoise = x + 2.5*gallery('normaldata',size(t),4);

La potencia de la señal en función de la frecuencia es una métrica común utilizada en el procesamiento de señales. La potencia es la magnitud cuadrada de la transformada de Fourier de una señal, normalizada por el número de muestras de frecuencia. Computa y traza el espectro de potencia de la señal ruidosa centrada en la frecuencia cero. A pesar del ruido, todavía se pueden hacer las frecuencias de la señal debido a los picos de potencia.

ynoise = fft(xnoise); ynoiseshift = fftshift(ynoise);     power = abs(ynoiseshift).^2/n;  plot(fshift,power) title('Power')

Eficiencia computacional

Utilizando la fórmula de transformación de Fourier directamente para calcular cada uno de los

<math display="block">
<mrow>
<mi>n</mi>
</mrow>
</math>
elementos de
<math display="block">
<mrow>
<mi>y</mi>
</mrow>
</math>
requiere en el orden de
<math display="block">
<mrow>
<msup>
<mrow>
<mi>n</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</math>
operaciones de punto flotante. El algoritmo de transformación rápida de Fourier solo requiere el orden de
<math display="block">
<mrow>
<mi>n</mi>
<mi mathvariant="normal">log</mi>
<mrow>
<mi>n</mi>
</mrow>
</mrow>
</math>
operaciones para calcular. Esta eficiencia computacional es una gran ventaja cuando se procesan datos que tienen millones de puntos de datos. Muchas implementaciones especializadas del algoritmo de transformación rápida de Fourier son aún más eficientes cuando
<math display="block">
<mrow>
<mi>n</mi>
</mrow>
</math>
es una potencia de 2.

Considere los datos de audio recogidos de los micrófonos submarinos en la costa de California. Estos datos se pueden encontrar en una biblioteca mantenida por el.Cornell University Bioacoustics Research Program Cargue y formatee un subconjunto de los datos en, que contiene una vocalización de ballenas azules del Pacífico.bluewhale.au Puede utilizar el comando para escuchar todo el archivo de audio.sound(x,fs)

whaleFile = 'bluewhale.au'; [x,fs] = audioread(whaleFile); whaleMoan = x(2.45e4:3.10e4); t = 10*(0:1/fs:(length(whaleMoan)-1)/fs);  plot(t,whaleMoan) xlabel('Time (seconds)') ylabel('Amplitude') xlim([0 t(end)])

Especifique una nueva longitud de señal que sea la siguiente potencia de 2 mayor que la longitud original. A continuación, se utiliza para calcular la transformada de Fourier utilizando la nueva longitud de la señal. rellena automáticamente los datos con ceros para aumentar el tamaño de la muestra.fftfft Este relleno puede hacer que el cálculo de la transformación sea significativamente más rápido, especialmente para tamaños de muestra con factores primos grandes.

m = length(whaleMoan);  n = pow2(nextpow2(m)); y = fft(whaleMoan,n);        

Trace el espectro de potencia de la señal. La trama indica que el gemán consiste en una frecuencia fundamental alrededor de 17 Hz y una secuencia de armónicos, donde se enfatiza el segundo armónico.

 f = (0:n-1)*(fs/n)/10; % frequency vector power = abs(y).^2/n;   % power spectrum       plot(f(1:floor(n/2)),power(1:floor(n/2))) xlabel('Frequency') ylabel('Power')

Consulte también

| | | | | |

Temas relacionados