Почему мы говорим, что «нулевое заполнение не увеличивает разрешение по частоте»


12

Вот синусоида частоты f = 236.4 Hz(ее длина составляет 10 миллисекунд; она имеет N=441точки с частотой дискретизации fs=44100Hz) и ее ДПФ без заполнения нулями :

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

Единственный вывод, который мы можем сделать, взглянув на ДПФ: «Частота приблизительно равна 200 Гц».

Вот сигнал и его ДПФ, с большим заполнением нулями :

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

Теперь мы можем сделать гораздо более точный вывод : «Внимательно посмотрев на максимум спектра, я могу оценить частоту 236 Гц» (я увеличил масштаб и обнаружил, что максимум около 236).

Мой вопрос: почему мы говорим, что «нулевое заполнение не увеличивает разрешение» ? (Я видел это предложение очень часто, затем они говорят, что «это только добавляет интерполяцию»)

=> В моем примере заполнение нулями помогло мне найти правильную частоту с более точным разрешением!


1
Еще один способ подумать об этом очень старом вопросе: если у вас вообще не было графика временных рядов, а только fft с низким разрешением, вы можете преобразовать его во временные ряды, нулевую площадку и - чтобы вывести 236 Гц. Таким образом, fft с низким разрешением должен содержать всю ту же информацию, что и гладкая.
Джошуа Р.

Ответы:


19

Резолюция имеет очень конкретное определение в этом контексте. Это относится к вашей способности разрешать два отдельных тона на близких частотах. Вы увеличили частоту дискретизации своей оценки спектра, но у вас нет возможности различать два тона, которые могут быть, например, с 236 Гц и 237 Гц. Вместо этого они «сливаются» в один шарик, независимо от того, сколько вы добавляете к нулю.

Решение для увеличения разрешения состоит в том, чтобы наблюдать сигнал в течение более длительного периода времени, а затем использовать большее ДПФ. Это приведет к основным лепесткам, ширина которых обратно пропорциональна размеру DFT, поэтому, если вы наблюдаете достаточно долго, вы можете фактически разрешить частоты нескольких тонов, которые находятся рядом друг с другом.

-

Чтобы увидеть, как это работает, вот график увеличенного БПФ сложения двух сигналов: вашей исходной синусоиды и той, которая отличается по частоте от нее на 0-100 Гц.

Только в сторону разницы 100 Гц графика (здесь слева) вы можете различить (разрешить) оба.

Код Scilab для генерации сюжета ниже.

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

f = 236.4;
d = 10;
N=441;
fs=44100;
extra_padding = 10000; 

t=[0:1/fs:(d/1000-1/fs)]
ff = [0:(N+extra_padding-1)]*fs/(N+extra_padding);

x = sin(2*%pi*f*t);

XX = [];

for delta_f = [0:100];
    y = sin(2*%pi*(f+delta_f)*t);
    FFTX = abs(fft([x+y zeros(1,extra_padding)]));
    XX = [XX; FFTX];
end

mtlb_axis([0 1300 0 500])

figure(1);
clf
[XXX,YYY] = meshgrid(ff,0:100);
mesh(XXX(1:100,[50:90]),YYY(1:100,[50:90]),XX(1:100,[50:90]))

Спасибо ! ОК, поэтому добавление нуля не поможет разрешить два отдельных тона на соседних частотах; однако в моем примере это может быть полезно для нахождения пика спектра и, таким образом, для нахождения основной частоты тона (например, для точного отслеживания высоты тона)
Basj

я думал, что «заполнение нулями не увеличивает разрешение» будет означать, что «вы не можете выполнять точное отслеживание высоты тона с помощью заполнения нулями» (здесь это не так, пример показывает, что можно точно определить некоторую высоту звука)
Basj

Я думаю, вы правильно поняли. Нулевое заполнение имеет свои применения, например, для точной оценки местоположения пика по грубому спектру. Это просто не серебряная пуля.
Джейсон Р

1
Я просто попробовал что-то еще, кроме заполнения нулями, но связанное. Вместо того, чтобы делать x(n)длиннее (с 0в конце), я сохраняю x(n)длину N, НО изменение здесь: вместо DFT(k) = \sum x(n) exp(-2*i*pi*n*k/N)для k=0,1,...,N-1, я делаю DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))для k=0,1,...,10*N-1... Это похоже на добавление большего количества бинов ( 10 Nбинов вместо Nчастотных бинов), но с сохранением того же x(n)длины N. Теперь бины будут 10 Гц, 20 Гц, ..., 100 Гц, 110 Гц, 120 Гц, ..... => Это то же самое, что заполнение нулями: никакого реального дополнительного разрешения, а только интерполяция?
Basj

Дает ли добавление большего количества бинов (10N вместо N): DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))для k=0,1,...,10*N-1и сохранение одинаковой x(n)длины, Nдает ли тот же результат, что и заполнение нулями: на самом деле не большее разрешение, а только интерполяция?
Бась

13

Термин «разрешение» имеет несколько значений, которые могут запутать людей, пытающихся общаться при использовании двух разных значений.

В оптическом смысле, из-за возможности разрешения двух соседних четко разделенных точек (или двух смежных пиков в спектре) вместо одного размытого сгустка заполнение нулями не поможет. Это значение, скорее всего, используется, когда утверждается, что заполнение нулями не увеличивает разрешение.

Если для разрешения требуется провал (например, минимальное снижение на 3 дБ) между спектральными пиками, тогда разрешение будет даже ниже, чем расстояние между бинами FFT, например, даже не Fs / N, а от 2X до 3X или больше, в зависимости от используемого окна. Более слабым требованием к разрешению может быть только разнос частот ортогональных базисных векторов ДПФ, например, Fs / N.

С точки зрения точек на графике, да, заполнение нулями даст вам больше точек на графике, как в разрешении DPI (точек на дюйм). Это может облегчить выделение экстремумов глазным яблоком. Однако это те же точки, которые вы получили бы, выполнив очень высококачественную интерполяцию графика (Sinc-интерполяцию) без какого-либо дополнения нулями, поэтому они действительно не добавляют никакой информации, которую нельзя было бы рассчитать иначе без дополнения нулями.

С точки зрения отслеживания основного тона, параболическая или Sinc-интерполяция (интерполяция между результирующими бинами FFT) результата FFT с окном, не дополненного нулями, может дать вам такой же хороший результат, как и при использовании более длинного графика FFT с более интенсивными вычислениями. Таким образом, заполнение нулями дает «лучший» результат отслеживания основного тона, чем выборка пиков без дополнения нулями и без интерполяции, но часто намного менее эффективно, чем просто с использованием интерполяции.

Если вы добавите шум к своему примеру, но немного меньше, чем сигнал, вы обнаружите, что пик с нулевым дополнением может быть столь же неточным, как пик с нулевым дополнением. Таким образом, в более общем случае вы, возможно, не нашли «правильную» частоту с большей точностью, чем раньше. Нулевое заполнение интерполирует только неточный результат из-за шума, что является еще одной причиной, по которой говорят, что оно не увеличивает разрешение.


Просто чтобы запомнить: что произойдет, если у меня будет та же самая синусоида в f=236.4 hzтечение того же самого, 10msно с fs = 192 кГц вместо 44,1 кГц: будет ли тогда истинное разрешение по частоте выше?
Basj

Увеличение частоты дискретизации даст вам больше высокочастотных бинов, но тот же интервал между
блоками

1
Приведет ли увеличение частоты дискретизации к sincсужению кривой в DFT или нет? Если нет, это означает, что увеличение частоты дискретизации не добавит разрешение (в смысле способности разрешать частоты)
Basj

@Basj Определение конкретной частоты сигнала обычно называется оценкой параметра, т.е. вы пытаетесь оценить частотный параметр. Для разрешения (разделение 2 тонов) разрешение задается как где - длина сигнала. Поэтому простое изменение частоты дискретизации (а не длительности) не повлияет на разрешение, а повлияет на точность оценки. T1/TT
Дэвид

Ширина Sinc по частоте связана с шириной окна данных во времени, заполнение нулями или изменение частоты дискретизации на самом деле не влияет (кроме проблем с дискретизацией или квантованием).
hotpaw2
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.