Альтернативное решение из правильного решения, предоставленного 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) идентичен желаемому выводу из первого БПФ меньшего размера.