Как количество точек меняет БПФ в MATLAB

При приеме fft(signal, nfft) сигнала, как nfft меняет результат и почему? Могу ли я иметь фиксированное значение для nfft, скажем, 2^18, или мне нужно перейти на 2^nextpow2(2*length(signal)-1)?

Я вычисляю спектральную плотность мощности (PSD) двух сигналов, используя БПФ автокорреляции, и я хочу сравнить результаты. Поскольку сигналы имеют разную длину, я беспокоюсь, что если я не исправлю nfft, это сильно затруднит сравнение!


person user1083320    schedule 05.06.2012    source источник


Ответы (2)


Нет внутренней причины использовать степень двойки (в некоторых случаях это может сделать обработку более эффективной).

Однако, чтобы сделать БПФ двух разных сигналов «соизмеримыми», вам действительно нужно будет дополнить нулями один или другой (или оба) сигнала до одинаковой длины, прежде чем выполнять их БПФ.


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

person Oliver Charlesworth    schedule 05.06.2012

Большинство современных реализаций БПФ (включая MATLAB, основанный на FFTW) теперь редко требуют дополнения временного ряда сигнала до длины, равной степени двойки. Однако почти все реализации будут предлагать лучшую, а иногда и намного лучшую производительность для БПФ векторов данных с длиной, равной степени 2. В частности, для MATLAB заполнение до степени 2 или до длины со многими низкими простыми множителями даст вам наилучшую производительность (N = 1000 = 2 ^ 3 * 5 ^ 3 было бы превосходно, N = 997 было бы ужасным выбором) .

Заполнение нулями не увеличит частотное разрешение в вашем PSD, однако уменьшит размер ячейки в частотной области. Таким образом, если вы добавите NZeros к сигнальному вектору длины N, БПФ теперь будет выводить вектор длины ( N + NZeros )/2 + 1. Это означает, что каждый бин частот теперь будет иметь ширину:

Ширина ячейки (Гц) = F_s / ( N + NZeros )

Где F_s — частота дискретизации сигнала.

Если вы обнаружите, что вам нужно разделить или идентифицировать два близких друг к другу пика в частотной области, вам нужно увеличить время выборки. Вы быстро обнаружите, что заполнение нулями ничего не дает вам с этой целью — и интуитивно это то, чего мы ожидаем. Как мы можем ожидать больше информации в нашем спектре мощности без добавления дополнительной информации (более длинных временных рядов) в наш ввод?

Лучший,

Павел

person Paul    schedule 06.06.2012