Этот пример показывает, как использовать заполнение нуля для получения точной оценки амплитуды синусоидального сигнала. Частоты в дискретном преобразовании Фурье (DFT) разнесены с интервалами , где - частота дискретизации, а - длина входного временного ряда. Попытка оценить амплитуду синусоиды с частотой, которая не соответствует бункеру ДПФ, может привести к неточной оценке. Заполнение данных нулем перед вычислением ДПФ часто помогает повысить точность оценок амплитуды.
Создайте сигнал, состоящий из двух синусоидальных волн. Две синусоидальные волны имеют частоты 100 и 202,5 Гц. Частота дискретизации составляет 1000 Гц, а длина сигнала - 1000 выборок.
Fs = 1e3; t = 0:0.001:1-0.001; x = cos(2*pi*100*t)+sin(2*pi*202.5*t);
Получите DFT сигнала. Ячейки DFT расположены на расстоянии 1 Гц. Соответственно, синусоидальная волна 100 Гц соответствует бункеру ДПФ, но синусоидальная волна 202,5 Гц не соответствует.
Поскольку сигнал является действительным, используйте только положительные частоты из ДПФ для оценки амплитуды. Масштабируйте DFT на длину входного сигнала и умножайте все частоты, кроме 0 и Nyquist на 2.
Постройте график результата с известными амплитудами для сравнения.
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

Оценка амплитуды на частоте 100 Гц является точной, поскольку эта частота соответствует бункеру ДПФ. Однако оценка амплитуды на частоте 202,5 Гц не является точной, поскольку эта частота не соответствует бункеру ДПФ.
Можно интерполировать DFT путем заполнения нулем. Заполнение нулем позволяет получить более точные оценки амплитуды разрешимых составляющих сигнала. С другой стороны, заполнение нулем не улучшает спектральное (частотное) разрешение ДПФ. Разрешение определяется количеством выборок и частотой выборок.
Поместите DFT до 2000 или вдвое больше первоначальной длины x. При такой длине расстояние между ячейками DFT равно 0,5 Гц. В этом случае энергия синусоидальной волны 202,5 Гц падает непосредственно в бункере ДПФ. Получите DFT и постройте график оценок амплитуды. Используйте нулевое заполнение до 2000 образцов.
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

Использование заполнения нулем позволяет правильно оценить амплитуды обеих частот.