Вот синусоида частоты f = 236.4 Hz
(ее длина составляет 10 миллисекунд; она имеет N=441
точки с частотой дискретизации fs=44100Hz
) и ее ДПФ без заполнения нулями :
Единственный вывод, который мы можем сделать, взглянув на ДПФ: «Частота приблизительно равна 200 Гц».
Вот сигнал и его ДПФ, с большим заполнением нулями :
Теперь мы можем сделать гораздо более точный вывод : «Внимательно посмотрев на максимум спектра, я могу оценить частоту 236 Гц» (я увеличил масштаб и обнаружил, что максимум около 236).
Мой вопрос: почему мы говорим, что «нулевое заполнение не увеличивает разрешение» ? (Я видел это предложение очень часто, затем они говорят, что «это только добавляет интерполяцию»)
=> В моем примере заполнение нулями помогло мне найти правильную частоту с более точным разрешением!
Ответы:
Резолюция имеет очень конкретное определение в этом контексте. Это относится к вашей способности разрешать два отдельных тона на близких частотах. Вы увеличили частоту дискретизации своей оценки спектра, но у вас нет возможности различать два тона, которые могут быть, например, с 236 Гц и 237 Гц. Вместо этого они «сливаются» в один шарик, независимо от того, сколько вы добавляете к нулю.
Решение для увеличения разрешения состоит в том, чтобы наблюдать сигнал в течение более длительного периода времени, а затем использовать большее ДПФ. Это приведет к основным лепесткам, ширина которых обратно пропорциональна размеру DFT, поэтому, если вы наблюдаете достаточно долго, вы можете фактически разрешить частоты нескольких тонов, которые находятся рядом друг с другом.
-
Чтобы увидеть, как это работает, вот график увеличенного БПФ сложения двух сигналов: вашей исходной синусоиды и той, которая отличается по частоте от нее на 0-100 Гц.
Только в сторону разницы 100 Гц графика (здесь слева) вы можете различить (разрешить) оба.
Код Scilab для генерации сюжета ниже.
источник
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 Гц, ..... => Это то же самое, что заполнение нулями: никакого реального дополнительного разрешения, а только интерполяция?DFT2(k) = \sum x(n) exp(-2*i*pi*n*k/(10*N))
дляk=0,1,...,10*N-1
и сохранение одинаковойx(n)
длины,N
дает ли тот же результат, что и заполнение нулями: на самом деле не большее разрешение, а только интерполяция?Термин «разрешение» имеет несколько значений, которые могут запутать людей, пытающихся общаться при использовании двух разных значений.
В оптическом смысле, из-за возможности разрешения двух соседних четко разделенных точек (или двух смежных пиков в спектре) вместо одного размытого сгустка заполнение нулями не поможет. Это значение, скорее всего, используется, когда утверждается, что заполнение нулями не увеличивает разрешение.
Если для разрешения требуется провал (например, минимальное снижение на 3 дБ) между спектральными пиками, тогда разрешение будет даже ниже, чем расстояние между бинами FFT, например, даже не Fs / N, а от 2X до 3X или больше, в зависимости от используемого окна. Более слабым требованием к разрешению может быть только разнос частот ортогональных базисных векторов ДПФ, например, Fs / N.
С точки зрения точек на графике, да, заполнение нулями даст вам больше точек на графике, как в разрешении DPI (точек на дюйм). Это может облегчить выделение экстремумов глазным яблоком. Однако это те же точки, которые вы получили бы, выполнив очень высококачественную интерполяцию графика (Sinc-интерполяцию) без какого-либо дополнения нулями, поэтому они действительно не добавляют никакой информации, которую нельзя было бы рассчитать иначе без дополнения нулями.
С точки зрения отслеживания основного тона, параболическая или Sinc-интерполяция (интерполяция между результирующими бинами FFT) результата FFT с окном, не дополненного нулями, может дать вам такой же хороший результат, как и при использовании более длинного графика FFT с более интенсивными вычислениями. Таким образом, заполнение нулями дает «лучший» результат отслеживания основного тона, чем выборка пиков без дополнения нулями и без интерполяции, но часто намного менее эффективно, чем просто с использованием интерполяции.
Если вы добавите шум к своему примеру, но немного меньше, чем сигнал, вы обнаружите, что пик с нулевым дополнением может быть столь же неточным, как пик с нулевым дополнением. Таким образом, в более общем случае вы, возможно, не нашли «правильную» частоту с большей точностью, чем раньше. Нулевое заполнение интерполирует только неточный результат из-за шума, что является еще одной причиной, по которой говорят, что оно не увеличивает разрешение.
источник
f=236.4 hz
течение того же самого,10ms
но с fs = 192 кГц вместо 44,1 кГц: будет ли тогда истинное разрешение по частоте выше?sinc
сужению кривой в DFT или нет? Если нет, это означает, что увеличение частоты дискретизации не добавит разрешение (в смысле способности разрешать частоты)