Как масштабировать выходной сигнал DFT с 0,0 до 1,0 - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь создать простое приложение для визуализации музыки, я понимаю, что мне нужно взять мои аудиосэмплы и выполнить быстрое преобразование Фурье. Я пытаюсь выяснить, как определить масштаб этой величины, чтобы я мог нормализовать его в диапазоне от 0,0 до 1,0 для построения графиков.

Мое приложение настроено на чтение аудио в 16-битном и 24-битном формате, поэтому я масштабирую все входящие аудиосэмплы до [-1.0,1.0), а затем использую 1-мерное преобразование из реального в сложное для N образцов.

Оттуда, я думаю, мне нужно взять абсолютное значение каждого бина (используя функцию cabs) между 0 и N / 2, но я не уверен, что эти цифры действительно представляют или что я должен делать с ними.

Я понял, как рассчитать частоту каждого бина, мне не интересно находить фактическую величину или амплитуду в децибелах, я просто хочу получить значение от 0,0 до 1,0.

В большинстве объяснений fftw много математики, честно говоря, над моей головой.

1 Ответ

0 голосов
/ 17 мая 2019

[В комментариях OP стремится узнать максимально возможную величину любого выходного бина с учетом входных данных в [-1, 1]. Этот ответ дает возможность определить это.]

Процедуры DFT различаются по тому, как они обрабатывают масштабирование. Некоторые нормализуют свой вывод, чтобы сохранить масштаб неизменным, а некоторые позволяют арифметическим операциям увеличивать масштаб для повышения производительности или удобства реализации. Таким образом, возможный масштаб вывода определяется не только математикой; это зависит от используемой рутины. В документации рутины должно быть указано, какое масштабирование она использует.

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

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

...