В большинстве примеров и кода FFT, которые я видел, выходные данные (амплитуды частот) операции прямого DFT масштабируются на N - т.е. вместо того, чтобы давать вам величину каждого частотного бина, он дает вам N кратную величину.
С практической точки зрения это просто потому, что ДПФ рассчитывается путем взятия внутреннего произведения сигнала с каждым базисным синусом (т.е. ненормализованной корреляцией). Однако это не отвечает философскому вопросу: почему бы нам просто не разделить на N, прежде чем возвращать результат?
Вместо этого большинство алгоритмов делят на N при повторном синтезе.
Это кажется мне нелогичным, и (если я что-то упускаю) делает все объяснения ДПФ очень запутанными.
В каждом сценарии, который я могу придумать, фактическая величина (не величина * N) - это значение, которое мне нужно от операции DFT, а нормализованная величина - это значение, которое я хочу ввести в операцию IDFT.
Почему DFT не определяется как DFT / N, а IDFT определяется как простая сумма синусоид нормализованной величины?
источник
Ответы:
Независимо от того, масштабируете ли вы выходные данные вашего ДПФ, прямое или обратное, не имеет ничего общего с соглашением или с тем, что математически удобно. Это имеет все отношение к входу в ДПФ. Позвольте мне показать несколько примеров, когда масштабирование либо требуется, либо не требуется как для прямого, так и для обратного преобразования.
Необходимо масштабировать прямое преобразование на 1 / N.
Прежде всего, должно быть ясно, что для анализа простой синусоидальной волны длина преобразования не должна иметь значения, если говорить математически. Предположим, N = 1024, Freq = 100 и ваш сигнал:
f (n) = cos (Freq * 2 * Pi * n / N)
Если вы возьмете 1024-точечное ДПФ f (n), вы обнаружите, что bin [100] = 512. Но это не имеет смысла, пока вы не масштабируете его до N. 512/1024 = 1/2 и, конечно, другая половина находится в отрицательном спектре в бине [924].
Если вы удвоите длину ДПФ, N = 2048, выходные значения будут вдвое больше, чем у ДПФ с 1024 точками, что опять же делает результаты бессмысленными, если мы не масштабируем на 1 / N. Длина ДПФ не должна быть фактором в этих видах анализа. Таким образом, в этом примере вы должны масштабировать DFT на 1 / N.
Не должен масштабировать прямое преобразование.
Теперь предположим, что у вас есть импульсная характеристика 32-контактного КИХ-фильтра и вы хотите знать его частотную характеристику. Для удобства мы примем фильтр нижних частот с коэффициентом усиления 1. Мы знаем, что для этого фильтра постоянная составляющая ДПФ должна быть равна 1. И должно быть ясно, что это будет иметь место независимо от размера ДПФ, потому что компонент постоянного тока - это просто сумма входных значений (то есть сумма коэффициентов КИХ).
Таким образом, для этого ввода ДПФ не масштабируется на 1 / N, чтобы получить значимый ответ. Вот почему вы можете обнулять импульсный отклик столько, сколько хотите, не влияя на результат преобразования.
В чем принципиальная разница между этими двумя примерами?
Ответ прост. В первом случае мы поставляли энергию для каждой входной выборки. Другими словами, синусоида присутствовала для всех 1024 отсчетов, поэтому нам нужно было увеличить выходной сигнал DFT на 1/1024.
Во втором примере, по определению, мы подавали энергию только на 1 образец (импульс при n = 0). Для прохождения импульса через фильтр 32 отводов потребовалось 32 выборки, но эта задержка не имеет значения. Поскольку мы поставляли энергию для 1 выборки, мы масштабируем выходной сигнал ДПФ на 1. Если импульс был определен с 2 единицами энергии вместо 1, мы бы масштабировали выходной сигнал на 1/2.
Не должен масштабировать обратное преобразование.
Теперь давайте рассмотрим обратный ДПФ. Как и в случае прямого DFT, мы должны учитывать количество образцов, на которые мы поставляем энергию. Конечно, здесь мы должны быть немного более осторожными, потому что мы должны заполнить поля положительных и отрицательных частот соответственно. Однако, если мы поместим импульс (т.е. 1) в два соответствующих бина, тогда результирующий выходной сигнал обратного ДПФ будет представлять собой косинусоидальную волну с амплитудой 2 независимо от того, сколько точек мы используем в обратном ДПФ.
Таким образом, как и в случае прямого DFT, мы не масштабируем выход обратного DFT, если вход является импульсом.
Необходимо масштабировать обратное преобразование.
Теперь рассмотрим случай, когда вы знаете частотную характеристику фильтра нижних частот и хотите выполнить обратное ДПФ, чтобы получить его импульсную характеристику. В этом случае, поскольку мы поставляем энергию во все точки, мы должны масштабировать выход DFT на 1 / N, чтобы получить значимый ответ. Это не так очевидно, потому что входные значения будут сложными, но если вы поработаете с примером, вы увидите, что это правда. Если вы не масштабируете на 1 / N, у вас будут пиковые значения импульсной характеристики порядка N, что не может быть в случае, если усиление равно 1.
Четыре ситуации, которые я только что описал, являются примерами конечной точки, где понятно, как масштабировать вывод DFT. Тем не менее, между конечными точками много серой области. Итак, давайте рассмотрим еще один простой пример.
Предположим, у нас есть следующий сигнал, с N = 1024, Freq = 100:
Обратите внимание на разницу амплитуды, частоты и длительности для трех компонентов. К сожалению, ДПФ этого сигнала покажет все три компонента с одинаковым уровнем мощности, даже несмотря на то, что 2-й компонент имеет 1/36 уровня мощности двух других.
Тот факт, что все три компонента поставляют одинаковое количество энергии, очевиден, что объясняет результаты DFT, но здесь необходимо сделать важный момент.
Если мы знаем длительность для различных частотных компонентов, то мы можем соответственно масштабировать различные частотные интервалы. В этом случае мы бы сделали это для точного масштабирования вывода DFT: bin [100] / = 128; корзина [200] / = 768; bin [400] / = 128;
Что подводит меня к моей последней точке; в общем, мы не имеем представления, как долго конкретный частотный компонент присутствует на входе в наш DFT, поэтому мы не можем выполнить такое масштабирование. В целом, однако, мы поставляем энергию для каждой точки выборки, поэтому мы должны масштабировать прямое ДПФ на 1 / N при анализе сигнала.
Чтобы усложнить ситуацию, мы почти наверняка применили бы окно к этому сигналу для улучшения спектрального разрешения ДПФ. Поскольку первый и третий частотные компоненты находятся в начале и конце сигнала, они ослабляются на 27 дБ, в то время как центральный компонент ослабляется только на 4 дБ (окно Ханнинга).
Чтобы было ясно, вывод DFT может быть довольно плохим представлением ввода, масштабированным или нет.
В случае обратного ДПФ, который обычно является чисто математической проблемой, в отличие от анализа неизвестного сигнала, вход в ДПФ четко определен, поэтому вы знаете, как масштабировать выход.
При анализе сигнала с помощью анализатора спектра, аналогового или БПФ проблемы аналогичны. Вы не знаете мощность отображаемого сигнала, если не знаете также его рабочий цикл. Но даже тогда, окна, диапазон, скорости развертки, фильтрация, тип детектора и другие факторы - все это влияет на результат.
В конечном счете, вы должны быть очень осторожны при перемещении между временной и частотной областями. Вопрос, который вы задали в отношении масштабирования, важен, поэтому я надеюсь, что дал понять, что вы должны понимать входные данные для DFT, чтобы знать, как масштабировать выходные данные. Если входные данные не определены четко, выходные данные DFT должны рассматриваться с большим скептицизмом, независимо от того, масштабируете ли вы его или нет.
источник
Я могу придумать несколько причин, связанных с проблемами точности вычислений, но это, вероятно, не оправдывает себя, потому что математически мы определяем это одинаково, несмотря ни на что, и математика не знает проблем точности.
Вот мой взгляд на это. Давайте концептуально подумаем о том, что означает ДПФ в смысле обработки сигналов, а не просто как преобразование. В этом случае мне кажется, что применение DFT к сигналу и к системе заставляет нас видеть разные результаты.
Например, давайте применим ДПФ к постоянному сигналу со значением 1. Предположим также, что этот сигнал имеет конечную длину и длину 16 отводов. Что мы хотим от DFT в этом случае? Очевидно, что мы хотим сказать нам, какую амплитуду имеет каждый частотный компонент сигнала. Ясно, что наш сигнал имеет один компонент частоты 0 и амплитуды 1. Но ДПФ дает нам один пик в ячейке 0 и высоте 16! В этом случае ваше разочарование по поводу определения ДПФ имеет смысл. Мы должны масштабировать коэффициенты анализа, а не коэффициенты синтеза.
Хорошо, теперь давайте проанализируем тот же массив чисел, а именно нашу строку из 16, но в данном случае как систему. Что мы концептуально хотим, чтобы частотный отклик системы означал? Большинство людей скажут, что это амплитуда выхода по сравнению с амплитудой входа, то есть передаточная функция. В этом случае предположим, что мы подаем сигнал постоянного тока с единичной амплитудой в нашу систему и посмотрим на амплитуду установившегося отклика. Что ж, сведите вместе два постоянных сигнала с 16 ответвлениями, и вы получите кратковременное линейное изменение, за которым следует устойчивый выходной сигнал, который является амплитудным сигналом постоянного тока (проверьте!) 16! В этом случае наше определение немасштабного аналитического преобразования имеет больше смысла, чем в противном случае.
В конце концов, все зависит от того, что вы пытаетесь изобразить. Есть много причин для рассмотрения этого системно-ориентированного определения ДПФ.
Если, однако, мы не смотрим на преобразование с чисто математической точки зрения, ни один из них сделать больше смысла, так как мы можем сделать это преобразование ортонормированного и унитарного масштабирования как анализ и синтез преобразований с помощью1( N)√ . Это также сохранит силу как временного, так и частотного представления, так что теорема Парсеваля всегда выполняется.
источник
На самом деле, в разных реализациях FFT / IFFT распространены 3 разных способа вычисления масштабных коэффициентов: 1,0 вперед и 1,0 / N назад, 1,0 / N вперед и 1,0 назад и 1,0 / sqrt (N) как вперед, так и назад.
Все эти 3 вариации масштабирования позволяют использовать IFFT (FFT (x)) в обоих направлениях, используя универсальные немасштабированные триггерные функции sin () и cos () для твидловых факторов, чтобы быть тождественным преобразованием.
Обратите внимание, что сохранение синусоидальной величины на прямом БПФ не сохраняет полную энергию (как в теореме Парсеваля). Выберите тот, который вы предпочитаете.
источник