Main Content

La traducción de esta página aún no se ha actualizado a la versión más reciente. Haga clic aquí para ver la última versión en inglés.

Análisis del espectro básico

La transformada de Fourier es una herramienta que permite llevar a cabo análisis del espectro de frecuencia y potencia de señales de dominio del tiempo.

Cantidades de análisis del espectro

El análisis del espectro estudia el espectro de frecuencia almacenado en datos discretos muestreados uniformemente. La transformada de Fourier es una herramienta que revela los componentes de frecuencia de una señal basada en el tiempo o en el espacio representándola en un espacio de frecuencia. La siguiente tabla enumera cantidades comunes utilizadas para caracterizar e interpretar las propiedades de las señales. Para obtener más información sobre la transformada de Fourier, consulte Transformadas de Fourier.

CantidadDescripción
x

Datos muestreados

n = length(x)

Número de muestras

fs

Frecuencia de muestra (muestras por unidad de tiempo o espacio)

dt = 1/fs

Incremento de tiempo o espacio por muestra

t = (0:n-1)/fs

Rango de tiempo o espacio para datos

y = fft(x)

Transformada discreta de Fourier de datos (DFT)

abs(y)

Amplitud de la DFT

(abs(y).^2)/n

Potencia de la DFT

fs/n

Incremento de frecuencia

f = (0:n-1)*(fs/n)

Rango de frecuencia

fs/2

Frecuencia de Nyquist (punto intermedio del rango de frecuencia)

Señal ruidosa

La transformada de Fourier puede calcular los componentes de frecuencia de una señal corrompida por ruido aleatorio.

Cree una señal con frecuencias componentes a 15 Hz y 40 Hz, e inyecte ruido gaussiano aleatorio.

rng('default')
fs = 100;                                % sample frequency (Hz)
t = 0:1/fs:10-1/fs;                      % 10 second span time vector
x = (1.3)*sin(2*pi*15*t) ...             % 15 Hz component
  + (1.7)*sin(2*pi*40*(t-2)) ...         % 40 Hz component
  + 2.5*randn(size(t));                  % Gaussian noise;

La transformada de Fourier de la señal identifica sus componentes de frecuencia. En MATLAB®, la función fft calcula la transformada discreta de Fourier utilizando un algoritmo de transformada rápida de Fourier. Utilice fft para calcular la transformada discreta de Fourier de la señal.

y = fft(x);

Represente el espectro de potencia como una función de frecuencia. Mientras que el ruido enmascara los componentes de frecuencia de una señal en un espacio basado en tiempo, la transformada de Fourier los revela como picos de potencia.

n = length(x);          % number of samples
f = (0:n-1)*(fs/n);     % frequency range
power = abs(y).^2/n;    % power of the DFT

plot(f,power)
xlabel('Frequency')
ylabel('Power')

Figure contains an axes object. The axes object with xlabel Frequency, ylabel Power contains an object of type line.

En muchas aplicaciones, resulta más práctico ver el espectro de potencia centrado en la frecuencia 0 porque representa mejor la periodicidad de la señal. Utilice la función fftshift para realizar un desplazamiento circular en y, y represente la potencia centrada en 0.

y0 = fftshift(y);         % shift y values
f0 = (-n/2:n/2-1)*(fs/n); % 0-centered frequency range
power0 = abs(y0).^2/n;    % 0-centered power

plot(f0,power0)
xlabel('Frequency')
ylabel('Power')

Figure contains an axes object. The axes object with xlabel Frequency, ylabel Power contains an object of type line.

Señal de audio

Puede utilizar la transformada de Fourier para analizar el espectro de frecuencia de datos de audio.

El archivo bluewhale.au contiene datos de audio de la vocalización de una ballena azul del Pacífico grabados por micrófonos submarinos en las costas de California. El archivo proviene de la biblioteca de vocalizaciones de animales del Programa de Investigación sobre Bioacústica de la Universidad Cornell.

Puesto que los sonidos de las ballenas azules son sonidos de tan baja frecuencia, son casi imperceptibles para los humanos. La escala de tiempo en los datos se comprime con un factor de 10 para aumentar el tono y hacer el sonido más perceptible. Lea y represente los datos de audio. Puede utilizar el comando sound(x,fs) para escuchar el audio.

whaleFile = 'bluewhale.au';
[x,fs] = audioread(whaleFile);

plot(x)
xlabel('Sample Number')
ylabel('Amplitude')

Figure contains an axes object. The axes object with xlabel Sample Number, ylabel Amplitude contains an object of type line.

El primer sonido es un "trino" seguido de tres "gemidos". Este ejemplo analiza un único gemido. Especifique nuevos datos que se componen aproximadamente del primer gemido y corrija los datos de tiempo para tener en cuenta la aceleración de factor de 10. Represente la señal truncada como una función del tiempo.

moan = x(2.45e4:3.10e4);
t = 10*(0:1/fs:(length(moan)-1)/fs);

plot(t,moan)
xlabel('Time (seconds)')
ylabel('Amplitude')
xlim([0 t(end)])

Figure contains an axes object. The axes object with xlabel Time (seconds), ylabel Amplitude contains an object of type line.

La transformada de Fourier de los datos identifica los componentes de frecuencia de la señal de audio. En algunas aplicaciones que procesan grandes cantidades de datos con fft, es habitual cambiar el tamaño de la entrada para que el número de muestras sea una potencia de 2. Esto puede agilizar de forma significativa el cálculo de la transformada, especialmente para tamaños de muestras con factores primos grandes. Especifique una nueva longitud de señal n que sea una potencia de 2, y utilice la función fft para calcular la transformada discreta de Fourier de la señal. fft rellena automáticamente los datos originales con ceros para aumentar el tamaño de la muestra.

m = length(moan);       % original sample length
n = pow2(nextpow2(m));  % transform length
y = fft(moan,n);        % DFT of signal

Ajuste el rango de frecuencia debido al factor de aceleración, y calcule y represente el espectro de potencia de la señal. La gráfica indica que el gemido se compone de una frecuencia fundamental de aproximadamente 17 Hz y una secuencia de armónicos, donde se enfatiza el segundo armónico.

f = (0:n-1)*(fs/n)/10;
power = abs(y).^2/n;      

plot(f(1:floor(n/2)),power(1:floor(n/2)))
xlabel('Frequency')
ylabel('Power')

Figure contains an axes object. The axes object with xlabel Frequency, ylabel Power contains an object of type line.

Consulte también

| | | | |

Temas relacionados