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.

Estimación de la amplitud y relleno de ceros

Este ejemplo muestra cómo utilizar el relleno de ceros para obtener una estimación precisa de la amplitud de una señal sinusoidal. Las frecuencias de la transformada discreta de Fourier (DFT) se espacian a intervalos de Fs/N, donde Fs es la tasa de muestreo y N, la longitud de la serie de tiempo de entrada. Tratar de estimar la amplitud de una sinusoide con una frecuencia que no se corresponde con un bin de la DFT puede resultar en una estimación imprecisa. Rellenar de ceros los datos antes de calcular la DFT suele ayudar a mejorar la precisión de las estimaciones de la amplitud.

Cree una señal compuesta por dos ondas sinusoidales. Las dos ondas sinusoidales tienen frecuencias de 100 y 202,5 Hz. La tasa de muestreo es 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 la DFT de la señal. Los bins de la DFT están espaciados a 1 Hz. De este modo, la onda sinusoidal de 100 Hz corresponde a un bin de la DFT, pero la onda sinusoidal de 202,5 Hz, no.

Puesto que la señal tiene valor real, utilice solo las frecuencias positivas de la DFT para estimar la amplitud. Escale la DFT por la longitud de la señal de entrada y multiplique todas las frecuencias excepto 0 y la de Nyquist por 2.

Represente el resultado con las amplitudes conocidas para comparar.

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

Figure contains an axes object. The axes object with xlabel Hz, ylabel Amplitude contains 2 objects of type line.

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

Puede interpolar la DFT mediante relleno de ceros. El relleno de ceros permite obtener estimaciones de amplitud más precisas de componentes de señal solucionables. Por otra parte, el relleno de ceros no mejora la resolución (de frecuencia) espectral de la DFT. La resolución se determina por el número de muestras y la tasa de muestreo.

Rellene la DFT hasta 2000 o dos veces la longitud original de x. Con esta longitud, el espaciamiento entre bins de la DFT es Fs/2000=0.5Hz. En este caso, la energía de la onda sinusoidal de 202,5 Hz corresponde directamente a un bin de la DFT. Obtenga la DFT y represente las estimaciones de la amplitud. Utilice el relleno de ceros hasta 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

Figure contains an axes object. The axes object with xlabel Hz, ylabel Amplitude contains 2 objects of type line.

Usar el relleno de ceros permite estimar las amplitudes de ambas frecuencias correctamente.

Consulte también