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