Почему у меня возникает утечка частоты в DFT после заполнения нулями, если разрешение по частоте в порядке?

12

Давайте рассмотрим этот пример:

Fs=1000; 
Ns=500;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);
X=fft(x);

В этом сценарии разрешение по частоте равно 2, и все частотные компоненты фиксируются правильно. Однако, если я сделаю это:

  X=fft(x,1000);

разрешение по частоте составляет 1, но наблюдается спектральная утечка. Подобный эффект виден здесь . Мне кажется, что преобразования Фурье обоих окон (одно с длиной 500 и одно с длиной 1000) имеют нули на частотах, которые представлены в сигнале, поэтому я не понимаю, почему произойдет утечка?

user3616359
источник
заполнение нулями не уменьшит видимую спектральную утечку, а только сделает неровности спектральной утечки более гладкими.
Роберт Бристоу-Джонсон

Ответы:

18

Это явление не имеет ничего общего со спектральной утечкой. То, что вы наблюдаете - это эффект заполнения нулями. Учитывая количество выборок N , существует максимально возможное разрешение по частоте Δе которое может быть достигнуто:

Δезнак равноеsN

В вашем случае Δе точно 2ЧАСZ . Если вы добавляете сигнал к нулю, никакой дополнительной информации для извлечения нет - вы только уменьшитечастотный интервал.

В приведенном выше примере, когда вы увеличиваете N до 1000 , вы получаете разнос частот 1ЧАСZ . Все дополнительные наблюдали образцы просто интерполяция, сделанная с помощью оконной функции ( sяNс в вашем случае). Вы начнете наблюдать боковые лепестки окна спектра. Так как вы неявно умножили свой сигнал на прямоугольное окно, это приведет к свертке спектра вашего сигнала (два Дирака + DC) с функцией sяNс .


Другой способ взглянуть на это - представить, что DFT - это, по сути, банк фильтров, состоящий из сдвинутых sяNсsяNс

введите описание изображения здесь

Давайте представим, что частота, соответствующая синему фильтру, присутствует. Это даст амплитуду в соответствующем бине. Все остальные частоты нет (оранжевый и желтый), таким образом , вы умножьте те sяNс0sяNс


Nзнак равно1000Nзнак равно10000

введите описание изображения здесь

И увеличенная часть:

введите описание изображения здесь

На что обратить внимание:

  • Nзнак равно500

  • Мы также можем наблюдать шум БПФ в самом низу.

  • Для Nзнак равно10000sяNс


И, очевидно, код для воспроизведения результатов:

Fs=1000; 
Ns=500;
Ns2=1000;
Ns3=10000;
t=0:1/Fs:(Ns-1)*1/Fs;
f1=10;
f2=400;
x=5+5*sin(2*pi*f1*t)+2*sin(2*pi*f2*t);

X1 = abs(fft(x))/length(x);
X2 = abs(fft(x, Ns2))/Ns;
X3 = abs(fft(x, Ns3))/Ns;

F1 = 0:Fs/Ns:Fs-Fs/Ns;
F2 = 0:Fs/Ns2:Fs-Fs/Ns2;
F3 = 0:Fs/Ns3:Fs-Fs/Ns3;

plot(F1, 20*log10(X1))
hold on
plot(F2, 20*log10(X2))
plot(F3, 20*log10(X3))
xlim([0, Fs/2])
grid on
legend({'N=500', 'N=1000', 'N=10000'})
Jojek
источник
1
Очень полный ответ +1. «[...] вы только увеличите частотный интервал». Это должно быть уменьшение, я полагаю.
Мэтт Л.
2

Спектральная утечка обычно является другим названием для эффекта свертки Синка или артефакта прямоугольного оконного окна в другой области (t или время в вашем случае). И заполнение нулями выполняется путем добавления прямоугольного окна (которое является вашими исходными данными, отличными от нуля) в более длинное БПФ.

Ваша гипотеза о том, что FT должен быть нулевым, кроме одной частоты, в целом неверна. Любой сигнал конечной длины (и ненулевой) будет иметь бесконечную степень ненулевого спектра. Эта бесконечная протяженность спектра (в форме Sinc или преобразование других окон) окажется невидимой в результате DFT / FFT только для чистых синусоид, которые охватывают всю ширину FFT с точной целочисленной периодичностью в этой ширине. Нулевое заполнение не позволяет этого.

hotpaw2
источник
1

Утечка возникает, в частности, из окон конечной длины, которые вы всегда имеете на практике. Однако, если у вас есть ровно целое число периодов ваших синусоидальных компонентов, периодизация, присущая БПФ, действует так, как если бы синусы были «бесконечными», а его частоты точно падали на дискретизированные бины. И, таким образом, утечка каким-то образом устраняется из чистой удачи: если бы вы заранее знали период своего сигнала, вам не нужно было бы анализировать его с помощью инструментов Фурье.

С нулевым заполнением у вас больше нет чистого синуса. Ни с не целым периодом многократное окно. Вы объединяете куски синусов, которые имеют резкие изменения на границах окна. Таким образом, весь периодизированный сигнал больше не является «бесконечным синусом». Следовательно, вы можете получить то, что ассимилируете с утечкой, но это эффект заполнения нулями, как прекрасно объяснил @jojek.

Лоран Дюваль
источник