Saltar al contenido principal
LibreTexts Español

32.10.1: Análisis de Fourier en Matlab

  • Page ID
    79698
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    El análisis de Fourier abarca un amplio espectro de matemáticas con partes que, a primera vista, pueden parecer bastante diferentes. En las ciencias y la ingeniería el proceso de descomponer una función en piezas más simples se suele llamar análisis. La operación correspondiente de reconstrucción de la función a partir de estas piezas se conoce como síntesis. En este contexto el término síntesis de Fourier describe el acto de reconstrucción y el término análisis de Fourier describe el proceso de romper la función en una suma de piezas más simples. En matemáticas, el término análisis de Fourier a menudo se refiere al estudio de ambas operaciones.

    Introducción

    En el análisis de Fourier, el término transformada de Fourier a menudo se refiere al proceso que descompone una función dada en las piezas básicas. Este proceso da como resultado otra función que describe cuánto de cada pieza básica hay en la función original. Es práctica común usar también el término transformada de Fourier para referirse a esta función. Sin embargo, a la transformación se le suele dar un nombre más específico dependiendo del dominio y otras propiedades de la función que se está transformando, como se detalla a continuación. Además, el concepto original del análisis de Fourier se ha extendido a lo largo del tiempo para aplicarlo a situaciones cada vez más abstractas y generales y el campo general a menudo se conoce como análisis armónico.

    Transformada de Fourier (continua)

    Muy a menudo, el término no calificado transformada de Fourier se refiere a la transformación de funciones de un argumento real continuo, como el tiempo (t). En este caso la transformada de Fourier describe una función ¡(t) en términos de exponenciales complejos básicos de diversas frecuencias. En términos de frecuencia ordinaria ν, la transformada de Fourier viene dada por el número complejo.

    Evaluar esta cantidad para todos los valores de ν produce la función de dominio de frecuencia.

    Matlab y FFT

    La función FFT de Matlab es una herramienta efectiva para calcular la transformada discreta de Fourier de una señal.Los siguientes ejemplos de código le ayudarán a comprender los detalles del uso de la función FFT.

    Ejemplo 1

    La sintaxis típica para calcular la FFT de una señal es FFT (x, N) donde x es la señal, x [n], se desea transformar y N es el número de puntos en la FFT. N debe ser al menos

    tan grande como el número de muestras en x [n]. Para demostrar el efecto de cambiar el valor de N,

    sintetizar un coseno con 30 muestras a 10 muestras por periodo.

    • n = [0:29];
    • x = cos (2*pi*n/10);

    Define 3 valores diferentes para N. Luego tome la transformación de x [n] para cada uno de los 3 valores que fueron

    definido. La función abs encuentra la magnitud de la transformación, ya que no nos preocupa distinguir entre componentes reales e imaginarios.

    • N1 = 64;
    • N2 = 128;
    • N3 = 256;
    • X1 = abs (fft (x, N1));
    • X2 = abs (fft (x, N2));
    • X3 = abs (fft (x, N3));

    La escala de frecuencia comienza en 0 y se extiende a N - 1 para una FFT de N puntos. Luego normalizamos la escala para que se extienda de 0 a 1 - 1/N

    • F1 = [0: N1 - 1] /N1;
    • F2 = [0: N2 - 1] /N2;
    • F3 = [0: N3 - 1] /N3;

    Trazar cada una de las transformaciones una encima de la otra

    • subparcela (3,1,1)
    • trazado (F1, X1, '-x'), título ('N = 64'), eje ([0 1 0 20])
    • subparcela (3,1,2)
    • trazado (F2, X2, '-x'), título ('N = 128'), eje ([0 1 0 20])
    • subparcela (3,1,3)
    • parcela (F3, X3, '-x'), título ('N = 256'), eje ([0 1 0 20])

    Al examinar la trama se puede observar que cada una de las transformaciones se adhiere a la misma forma, difiriendo solo en el número de muestras utilizadas para aproximarse a esa forma. ¿Qué sucede si N es el mismo que el número de muestras en x [n]? Para averiguarlo, establezca N1 = 30. ¿Qué aspecto tiene la trama resultante? ¿Por qué se ve así?

    Ejemplo 2

    En el último ejemplo la longitud de x [n] se limitó a 3 periodos de longitud. Ahora, escojamos un valor grande para N (para una transformación con muchos puntos), y variemos el número de repeticiones del periodo fundamental.

    • n = [0:29];
    • x1 = cos (2*pi*n/10);% 3 periodos
    • x2 = [x1 x1];% 6 periodos
    • x3 = [x1 x1 x1];% 9 periodos
    • N = 2048;
    • X1 = abs (fft (x1, N));
    • X2 = abs (fft (x2, N));
    • X3 = abs (fft (x3, N));
    • F = [0:N-1] /N;
    • subparcela (3,1,1)
    • parcela (F, X1), título ('3 períodos'), eje ([0 1 0 50])
    • subparcela (3,1,2)
    • parcela (F, X2), título ('6 períodos'), eje ([0 1 0 50])
    • subparcela (3,1,3)
    • parcela (F, X3), título ('9 períodos'), eje ([0 1 0 50])

    El código anterior producirá tres parcelas. La primera parcela, la transformación de 3 periodos de un coseno, parece la magnitud de 2 sincs con el centro del primer sinc a 0.1fs y el segundo a 0.9fs.

    La segunda gráfica también tiene una apariencia similar a sinc. pero su frecuencia es mayor y tiene una magnitud mayor a 0:1 fs y 0:9 fs. De igual manera, la tercera parcela tiene una mayor frecuencia y magnitud sinc.

    A medida que x [n] se extiende a un gran número de periodos, los sincs comenzarán a parecerse cada vez más a impulsos.

    Pero pensé que una sinusoide se transformaba en un impulso, ¿por qué tenemos sincs en el dominio de la frecuencia? Cuando la FFT se calcula con un N mayor que el número de muestras en x [n], rellena las muestras después de x [n] con ceros. El ejemplo 2 tenía una x [n] que tenía 30 muestras de largo, pero la FFT tuvo un N = 2048. Cuando Matlab calcula la FFT, rellena automáticamente los espacios de n = 30 a n = 2047 con ceros. Esto es como tomar una sinusoide y multiplicarla por una caja rectangular de longitud 30. Una multiplicación de una caja y una sinusoide en el dominio del tiempo debe resultar en la convolución de un sinc con impulsos en el dominio de la frecuencia. Además, aumentar el ancho de la caja en el dominio del tiempo debería aumentar la frecuencia del sinc en el dominio de la frecuencia. El experimento anterior de Matlab respalda esta conclusión.

    Identificación de señales en ruido con FFT

    Un uso común de las transformadas de Fourier es encontrar los componentes de frecuencia de una señal enterrada en una señal ruidosa en el dominio del tiempo. Considere los datos muestreados a 1000 Hz. Formar una señal que contenga una sinusoide de 50 Hz de amplitud 0.7 y una sinusoide de 120 Hz de amplitud 1 y la corrompan con algún ruido aleatorio de media cero:

    • Fs = 1000;% Frecuencia de muestreo
    • T = 1/Fs;% Tiempo de muestreo
    • L = 1000;% de longitud de la señal
    • t = (0:L-1) *T;% Vector de tiempo
    • x = 0.7*sin (2*pi*50*t) + sin (2*pi*120*t);
      % Suma de una sinusoide de 50 Hz y una sinusoide de 120 Hz
    • y = x + 2*randn (tamaño (t));% de sinusoides más ruido
    • parcela (FS*t (1:50), y (1:50))
    • title ('Señal corrompida con ruido aleatorio de media cero')
    • xlabel ('tiempo (milisegundos) ')

    Es difícil identificar los componentes de frecuencia observando la señal original. Al convertir al dominio de frecuencia, la transformada discreta de Fourier de la señal ruidosa y se encuentra tomando la transformada rápida de Fourier (FFT):

    • NFFT = 2^nextpow2 (L);% Potencia siguiente de 2 desde la longitud de y
    • Y = fft (y, NFFT) /L;
    • f = FS/2*LinSpace (0,1, NFFT/2+1);% Trazar espectro de amplitud de un solo lado.
    • parcela (f,2*abs (Y (1:NFFT/2+1)))
    • title ('Espectro de amplitud de un solo lado de y (t) ')
    • xlabel ('Frecuencia (Hz) ')
    • ylabel ('|Y (f) |')

    La razón principal por la que las amplitudes no están exactamente en 0.7 y 1 es por el ruido. Varias ejecuciones de este código (incluyendo el recálculo de y) producirán diferentes aproximaciones a 0.7 y 1. La otra razón es que tienes una señal de longitud finita. Aumentar L de 1000 a 10000 en el ejemplo anterior producirá aproximaciones mucho mejores en promedio.

    Colaboradores y Atribuciones


    32.10.1: Análisis de Fourier en Matlab is shared under a not declared license and was authored, remixed, and/or curated by LibreTexts.