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.

Estimación de amplitud y relleno de cero

Este ejemplo muestra cómo utilizar el relleno cero para obtener una estimación precisa de la amplitud de una señal sinusoidal. Las frecuencias de la transformada de Fourier discreta (DFT) se espacian a intervalos de

<math display="block">
<mrow>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mi>s</mi>
</mrow>
</msub>
<mo>/</mo>
<mi>N</mi>
</mrow>
</math>
Dónde
<math display="block">
<mrow>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mi>s</mi>
</mrow>
</msub>
</mrow>
</math>
es la frecuencia de muestreo y
<math display="block">
<mrow>
<mi>N</mi>
</mrow>
</math>
es la longitud de la serie de tiempo de entrada. El intento de estimar la amplitud de una sinusoide con una frecuencia que no corresponde a un DFT puede dar lugar a una estimación inexacta.bin Cero el relleno de los datos antes de calcular el DFT a menudo ayuda a mejorar la precisión de las estimaciones de amplitud.

Cree una señal que consista en dos ondas sinusoidales. Las dos ondas sinusoidales tienen frecuencias de 100 y 202,5 Hz. La frecuencia de muestreo es de 1000 Hz y la señal es de 1000 muestras de longitud.

Fs = 1e3; t = 0:0.001:1-0.001; x = cos(2*pi*100*t)+sin(2*pi*202.5*t);

Obtenga el DFT de la señal. Los bins DFT están espaciados a 1 Hz. En consecuencia, la onda sinusoidal de 100 Hz corresponde a un bin DFT, pero la onda sinusoidal de 202,5 Hz no lo hace.

Porque la señal es real-valorada, utilice solamente las frecuencias positivas del DFT para estimar la amplitud. Escale el DFT por la longitud de la señal de entrada y multiplique todas las frecuencias excepto 0 y el Nyquist por 2.

Trace el resultado con las amplitudes conocidas para la comparación.

xdft = fft(x); xdft = xdft(1:length(x)/2+1); xdft = xdft/length(x); xdft(2:end-1) = 2*xdft(2:end-1); freq = 0:Fs/length(x):Fs/2;  plot(freq,abs(xdft)) hold on plot(freq,ones(length(x)/2+1,1),'LineWidth',2) xlabel('Hz') ylabel('Amplitude') hold off

La estimación de amplitud a 100 Hz es precisa porque esa frecuencia corresponde a un bin DFT. Sin embargo, la estimación de amplitud a 202,5 Hz no es precisa porque esa frecuencia no corresponde a un bin DFT.

Puede interpolar el DFT con relleno cero. El relleno cero le permite obtener estimaciones de amplitud más precisas de los componentes de señal resolvable. Por otro lado, el relleno cero no mejora la resolución espectral (frecuencia) del DFT. La resolución está determinada por el número de muestras y la frecuencia de muestreo.

Pad el DFT a 2000, o el doble de la longitud original de.x Con esta longitud, el espaciado entre bins DFT es

<math display="block">
<mrow>
<msub>
<mrow>
<mi>F</mi>
</mrow>
<mrow>
<mi>s</mi>
</mrow>
</msub>
<mo>/</mo>
<mn>2</mn>
<mn>0</mn>
<mn>0</mn>
<mn>0</mn>
<mo>=</mo>
<mn>0</mn>
<mo>.</mo>
<mn>5</mn>
<mspace width="0.2777777777777778em"></mspace>
<mstyle mathvariant="normal">
<mrow>
<mi>H</mi>
<mi>z</mi>
</mrow>
</mstyle>
</mrow>
</math>
. En este caso, la energía de la onda sinusoidal de 202,5 Hz cae directamente en un bin DFT. Obtener el DFT y trazar las estimaciones de amplitud. Utilice el relleno cero a 2000 muestras.

lpad = 2*length(x); xdft = fft(x,lpad); xdft = xdft(1:lpad/2+1); xdft = xdft/length(x); xdft(2:end-1) = 2*xdft(2:end-1); freq = 0:Fs/lpad:Fs/2;  plot(freq,abs(xdft)) hold on plot(freq,ones(2*length(x)/2+1,1),'LineWidth',2) xlabel('Hz') ylabel('Amplitude') hold off

El uso de relleno cero le permite estimar correctamente las amplitudes de ambas frecuencias.

Consulte también