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 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 en la transformación discreta de Fourier (DFT) se espaden 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 temporal de entrada. Intentar estimar la amplitud de un sinusoides con una frecuencia que no corresponde a un DFT puede resultar en una estimación inexacta.Bin El relleno cero de los datos antes de calcular el DFT a menudo ayuda a mejorar la precisión de las estimaciones de amplitud.

Crea una señal que consiste 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 contenedores DFT están espaciados a 1 Hz. En consecuencia, la onda sinusoidal de 100 Hz corresponde a un contenedor DFT, pero la onda sinusoidal de 202,5 Hz no.

Debido a que la señal es de valor real, 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.

Trazar 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 una bandeja DFT. Sin embargo, la estimación de amplitud en 202,5 Hz no es precisa porque esa frecuencia no corresponde a una bandeja DFT.

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

Acolche el DFT hasta el año 2000, o el doble de la longitud original de .x Con esta longitud, el espaciado entre los contenedores 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 contenedor DFT. Obtenga el DFT y trace las estimaciones de amplitud. Utilice cero relleno 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 las amplitudes de ambas frecuencias correctamente.

Consulte también