Как рассчитать FFT на 512 точек, используя аппаратный модуль FFT на 2048 точек - PullRequest
0 голосов
/ 10 февраля 2019

У меня 2048 точек FFT IP.Как я могу использовать это, чтобы вычислить 512 пунктов FFT?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Альтернативное решение из правильного решения, предоставленного Cris Luengo , которое не требует какого-либо масштабирования, - это заполнение данных нулями до необходимой длины 2048 выборок.Затем вы получите свой результат, прочитав все 2048/512 = 4 выходы (т. Е. output[0], output[3], ... в системе индексации на основе 0).

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

Обратите внимание, что это работает, потому что БПФ нулевогодополненный сигнал - это интерполяция в частотной области БПФ исходного сигнала.В этом случае вам не нужны интерполированные значения, поэтому вы можете просто игнорировать их.Вот пример вычисления 4-точечного БПФ с использованием 16-точечного модуля (я уменьшил размер БПФ для краткости, но сохранил то же соотношение 4 для двух):

x = [1,2,3,4]
fft(x)
ans> 10.+0.j,
     -2.+2.j,
     -2.+0.j,
     -2.-2.j

x = [1,2,3,4,0,0,0,0,0,0,0,0,0,0,0,0]
fft(x)
ans> 10.+0.j,  6.499-6.582j, -0.414-7.242j, -4.051-2.438j,
     -2.+2.j,  1.808+1.804j,  2.414-1.242j, -0.257-2.3395j,
     -2.+0.j, -0.257+2.339j,  2.414+1.2426j, 1.808-1.8042j,
     -2.-2.j, -4.051+2.438j, -0.414+7.2426j, 6.499+6.5822j

КакВы можете видеть во втором выводе, что первый столбец (который соответствует выводам 0, 3, 7 и 11) идентичен желаемому выводу из первого БПФ меньшего размера.

0 голосов
/ 10 февраля 2019

Есть разные способы сделать это, но самый простой - повторить входные данные 4 раза, чтобы получить сигнал из 2048 выборок.Обратите внимание, что ДПФ (то, что вычисляет БПФ) можно рассматривать как допущение бесконечной репликации входного сигнала.Таким образом, мы просто предоставляем более широкое «представление» этого бесконечно длинного периодического сигнала.

Результирующее БПФ будет иметь 512 ненулевых значений с нулями между ними.Каждое из ненулевых значений также будет в четыре раза больше, чем могло бы произвести FFT с 512 точками, потому что входных выборок в четыре раза больше (то есть, если нормализация применяется так же часто, без нормализации впрямое преобразование и 1 / N нормализация в обратном преобразовании).

Вот доказательство принципа в MATLAB:

data = randn(1,512);

ft = fft(data);         % 512-point FFT

data = repmat(data,1,4);
ft2 = fft(data);        % 2048-point FFT
ft2 = ft2(1:4:end) / 4; % 512-point FFT

assert(all(ft2==ft))

(Очень удивительно, что значения были точно равно, в этом случае никаких различий из-за числовой точности не было!)

...