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.

Estimaciones de densidad espectral de potencia mediante FFT

Este ejemplo muestra cómo obtener estimaciones de densidad espectral de potencia no paramétrica (PSD) equivalentes al periodograma utilizando .fft Los ejemplos muestran cómo escalar correctamente la salida de entradas de longitud uniforme, para frecuencias normalizadas y hercios, y para estimaciones PSD de una y dos lados.fft

Entrada de longitud uniforme con frecuencia de muestreo

Obtenga el periodograma para una señal de longitud uniforme muestreada a 1 kHz utilizando ambos y .fftperiodograma Compare los resultados.

Cree una señal que consista en una onda sinusoidal de 100 Hz en (0,1) ruido aditivo.N La frecuencia de muestreo es de 1 kHz. La longitud de la señal es de 1000 muestras. Utilice la configuración predeterminada del generador de números aleatorios para obtener resultados reproducibles.

rng default Fs = 1000; t = 0:1/Fs:1-1/Fs; x = cos(2*pi*100*t) + randn(size(t));

Obtenga el periodograma utilizando .fft La señal es de valor real y tiene una longitud uniforme. Debido a que la señal es de valor real, solo necesita estimaciones de potencia para las frecuencias positivas o negativas. Para conservar la potencia total, multiplique todas las frecuencias que se producen en ambos conjuntos —las frecuencias positivas y negativas— por un factor de 2. La frecuencia cero (DC) y la frecuencia Nyquist no ocurren dos veces. Trazar el resultado.

N = length(x); xdft = fft(x); xdft = xdft(1:N/2+1); psdx = (1/(Fs*N)) * abs(xdft).^2; psdx(2:end-1) = 2*psdx(2:end-1); freq = 0:Fs/length(x):Fs/2;  plot(freq,10*log10(psdx)) grid on title('Periodogram Using FFT') xlabel('Frequency (Hz)') ylabel('Power/Frequency (dB/Hz)')

Calcular y trazar el periodograma utilizando .periodograma Mostrar que los dos resultados son idénticos.

periodogram(x,rectwin(length(x)),length(x),Fs)

 mxerr = max(psdx'-periodogram(x,rectwin(length(x)),length(x),Fs))
mxerr = 3.4694e-18 

Entrada con frecuencia normalizada

Se utiliza para producir un periodograma para una entrada utilizando la frecuencia normalizada.fft Cree una señal que consista en una onda sinusoidal en (0,1) ruido aditivo.N La onda sinusoidal tiene una frecuencia angular de

<math display="block">
<mrow>
<mi>π</mi>
<mo>/</mo>
<mn>4</mn>
</mrow>
</math>
rad/muestra. Utilice la configuración predeterminada del generador de números aleatorios para obtener resultados reproducibles.

rng default n = 0:999; x = cos(pi/4*n) + randn(size(n));

Obtenga el periodograma utilizando .fft La señal es de valor real y tiene una longitud uniforme. Debido a que la señal es de valor real, solo necesita estimaciones de potencia para las frecuencias positivas o negativas. Para conservar la potencia total, multiplique todas las frecuencias que se producen en ambos conjuntos —las frecuencias positivas y negativas— por un factor de 2. La frecuencia cero (DC) y la frecuencia Nyquist no ocurren dos veces. Trazar el resultado.

N = length(x); xdft = fft(x); xdft = xdft(1:N/2+1); psdx = (1/(2*pi*N)) * abs(xdft).^2; psdx(2:end-1) = 2*psdx(2:end-1); freq = 0:(2*pi)/N:pi;  plot(freq/pi,10*log10(psdx)) grid on title('Periodogram Using FFT') xlabel('Normalized Frequency (\times\pi rad/sample)')  ylabel('Power/Frequency (dB/rad/sample)')

Calcular y trazar el periodograma utilizando .periodograma Mostrar que los dos resultados son idénticos.

periodogram(x,rectwin(length(x)),length(x))

 mxerr = max(psdx'-periodogram(x,rectwin(length(x)),length(x)))
mxerr = 1.4211e-14 

Entrada de valor complejo con frecuencia normalizada

Se utiliza para producir un periodograma para una entrada de valor complejo con frecuencia normalizada.fft La señal es un exponencial complejo con una frecuencia angular de

<math display="block">
<mrow>
<mi>π</mi>
<mo>/</mo>
<mn>4</mn>
</mrow>
</math>
rad/muestra en ruido de valores complejos (0,1).N Establezca el generador de números aleatorios en la configuración predeterminada para obtener resultados reproducibles.

rng default n = 0:999; x = exp(1j*pi/4*n) + [1 1j]*randn(2,length(n))/sqrt(2);

Se utiliza para obtener el periodograma.fft Dado que la entrada tiene un valor complejo, obtenga el periodograma de

<math display="block">
<mrow>
<mo stretchy="false">[</mo>
<mn>0</mn>
<mo>,</mo>
<mn>2</mn>
<mi>π</mi>
<mo stretchy="false">)</mo>
</mrow>
</math>
rad/muestra. Trazar el resultado.

N = length(x); xdft = fft(x); psdx = (1/(2*pi*N)) * abs(xdft).^2; freq = 0:(2*pi)/N:2*pi-(2*pi)/N;  plot(freq/pi,10*log10(psdx)) grid on title('Periodogram Using FFT') xlabel('Normalized Frequency (\times\pi rad/sample)')  ylabel('Power/Frequency (dB/rad/sample)')

Se utiliza para obtener y trazar el periodograma.periodograma Compare las estimaciones de PSD.

periodogram(x,rectwin(length(x)),length(x),'twosided')

 mxerr = max(psdx'-periodogram(x,rectwin(length(x)),length(x),'twosided'))
mxerr = 2.8422e-14 

Consulte también

Apps

Funciones