Неправильное масштабирование в рекурсивной реализации ОБПФC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Гость
 Неправильное масштабирование в рекурсивной реализации ОБПФ

Сообщение Гость »


Я работаю над простой реализацией рекурсивного БПФ/ОБПФ на C++. Код следующий:

#include #include #include #include #include #include "assert.hpp" шаблон std::valarray fft(std::valarray const& data) { const auto N = data.size(); ASSERT(!(N & (N - 1)), "Длина БПФ должна быть степенью двойки"); если (N == 1) возврат данных; auto даже = fft(data[std::slice(0, N / 2, 2)]); auto нечетный = fft(data[std::slice(1, N / 2, 2)]); автоматический результат = std::valarray(N); для (size_t k = 0; k < N/2; ++k) { auto t = std::exp(std::complex(0, -2 * std::numbers::pi * T(k) / N)); результат[k] = четный[k] + нечетный[k] * t; результат[k + N/2] = четный[к] - нечетный[к] * т; } вернуть результат; } шаблон std::valarray ifft(std::valarray const& data) { const auto N = data.size(); ASSERT(!(N & (N - 1)), "Длина БПФ должна быть степенью двойки"); если (N == 1) возврат данных; auto Even = ifft(data[std::slice(0, N / 2, 2)]); auto нечетное = ifft(data[std::slice(1, N / 2, 2)]); автоматический результат = std::valarray(N); для (size_t k = 0; k < N/2; ++k) { auto t = std::exp(std::complex(0, 2 * std::numbers::pi * T(k) / N)); результат[k] = (чётный[k] + нечетный[k] * t) / T(N); результат[k + N / 2] = (четный[k] - нечетный[k] * t)/T(N); } вернуть результат; } Хотя прямое БПФ работает нормально, обратное БПФ неправильно масштабирует выходные данные (на 1/8 для БПФ размера 8). Я использую этот код для проверки своей реализации:

std::valarray data = { 3, 5, 8, 9, 1, 4, 7, 2 }; std::cout
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ, комментарий, отзыв

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • XGBoostError: неправильное распределение
    Гость » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Гость
  • Плавное масштабирование и панорамирование всех элементов в RecyclerView
    Гость » » в форуме Android
    0 Ответы
    1 Просмотры
    Последнее сообщение Гость
  • Объявить параметры метода подкласса более конкретными (без реализации) в машинописном тексте?
    Гость » » в форуме Javascript
    0 Ответы
    1 Просмотры
    Последнее сообщение Гость

Вернуться в «C++»