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 (PSD) no paramétricas equivalentes al periodograma que utiliza.fft Los ejemplos muestran cómo escalar correctamente la salida de las entradas de longitud, para la frecuencia normalizada y Hertz, y para las estimaciones de PSD de uno y dos lados.fft

Entrada de longitud incluso con frecuencia de muestreo

Obtener el periodograma para una señal de longitud incluso 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));

Obtener el periodograma usando.fft La señal es real-valorada y tiene una longitud incluso. Debido a que la señal es de valor real, solo necesita estimaciones de energía para las frecuencias positivas o negativas. Con el fin de conservar la potencia total, multiplique todas las frecuencias que ocurren en ambos sets-las frecuencias positivas y negativas-por un factor de 2. La frecuencia cero (DC) y la frecuencia Nyquist no ocurren dos veces. Graficar 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)')

Computa y traza el periodograma usando.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 una 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/sample. 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));

Obtener el periodograma usando.fft La señal es real-valorada y tiene una longitud incluso. Debido a que la señal es de valor real, solo necesita estimaciones de energía para las frecuencias positivas o negativas. Con el fin de conservar la potencia total, multiplique todas las frecuencias que ocurren en ambos sets — las frecuencias positivas y negativas — por un factor de 2. La frecuencia cero (DC) y la frecuencia Nyquist no ocurren dos veces. Graficar 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)')

Computa y traza el periodograma usando.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/sample en ruido de valor complejo (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 usa para obtener el periodograma.fft Debido a que la entrada es de valor complejo, obtener el periodograma de

<math display="block">
<mrow>
<mo stretchy="false">(</mo>
<mo>-</mo>
<mi>π</mi>
<mo>,</mo>
<mi>π</mi>
<mo stretchy="false">]</mo>
</mrow>
</math>
RAD/sample. Graficar 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

Aplicaciones

Funciones