Преобразование std::вектор<комплексный> в комплексный>[N] для FFT

#c #vector #fft

Вопрос:

Я работаю над обработкой wav-файлов на основе FFT. Я разработал/скопировал функции для чтения wav и обработки fft. Проблема в том , что моя функция чтения wav возвращает a vector , и мне нужен FFT complexlt;doublegt;[N] , и я не могу понять, как подключиться vectorlt;doublegt; или vectorlt;complexlt;doublegt;gt; к complexlt;doublegt;[N] чему . Как я могу преобразовать свои данные? Прошу прощения за мою тупость, это мой первый вопрос по SO.

 void FFT(Complex f[], Complex ftilde[], int log2N);  vectorlt;doublegt; amplitudes; WavReader("../Projects/Project4/input.wav", amplitudes);  size_t size = amplitudes.size();  const int new_size = resize(size); // Finding nearest number power of 2 int log2N = log2(new_size);  using Complex = complexlt;doublegt;; amplitudes.resize(new_size); std::vectorlt;doublegt; imag{ 0.0 }; imag.resize(new_size); vectorlt;complexlt;doublegt;gt; cvec(amplitudes.size());  transform(amplitudes.begin(), amplitudes.end(), imag.begin(), cvec.begin(), [](double da, double db)  {  return complexlt;doublegt;(da, db); });   Complex f[N]; // The input of FFT   

Комментарии:

1. каков прототип функций, которые вам нужно вызвать, которые требуют complexlt;doublegt;[N] ?

2. void FFT(Комплекс f[], Комплекс ftilde[], int log2N);

Ответ №1:

Воспользуйся FFT(cvec.data(), ???, log2N) . data() Функция вернет указатель на начало (смежных) данных вектора. Просто будь в этом уверен log2N lt;= cvec.size() .