Перераспределить распределение частотного интервала FFT в C # - PullRequest
0 голосов
/ 07 марта 2011

Я закодировал FFT для набора данных, с которым я работаю.Мое намерение состоит в том, чтобы создать каскадный результат результата, но проблема, с которой я сталкиваюсь, состоит в том, что, если я изменю свой размер входных данных, тогда я получу другое количество частотных бинов.В настоящее время я просто делаю свой входной набор данных в два раза больше количества пикселей, которое мне нужно отобразить.Я пытаюсь найти способ сопоставления частотных бинов любого размера набора данных с определенным количеством пикселей.Например, отображение массива из 500 значений в массив длиной 1250 элементов.Было бы неплохо иметь возможность выполнять линейную и нелинейную интерполяцию при отображении данных.Мне также может понадобиться пойти другим путем, скажем, для сопоставления значений с массивом длиной 300 элементов.Я не специалист по математике, и на этом я остановлюсь.

Ответы [ 2 ]

2 голосов
/ 08 марта 2011

Все, что вам нужно сделать, это добавить ноль к количеству пикселей, которое вы хотите отобразить. Это можно сделать, просто добавив нули к входным данным, чтобы получить необходимую длину в пикселях. Когда БПФ выполнено, оно будет выполнено по длине после заполнения нулями и даст вам то же количество выходных выборок, что и у вас пикселей.

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

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

1 голос
/ 07 марта 2011

Дискретное преобразование Фурье (быстрое или нет) всегда даст вам выходной массив того же размера, что и входной массив. Если вы хотите увеличить его, вам нужно взглянуть на использование функций sinc с подходящим окном. Смотрите, например http://en.wikipedia.org/wiki/Lanczos_resampling

...