es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir std::vector> en complex[N] para la FFT.

Estoy trabajando en un procesamiento de archivos de audio tipo WAV basado en FFT. He desarrollado/copiado funciones para leer WAV y procesar FFT.

El problema es que mi función para leer WAV devuelve un vector, y mi FFT necesita complex<double>[N], y no puedo averiguar cómo conectar vector<double> o vector<complex<double>> a complex<double>[N]. ¿Cómo puedo transformar mis datos?

Lo siento por mi inexperiencia, es mi primera pregunta en SO.

“`
void FFT(Complex f[], Complex ftilde[], int log2N);
vector amplitudes;
WavReader(“../Projects/Project4/input.wav”, amplitudes);

size_t size = amplitudes.size();
const int new_size = resize(size); // Encontrar el número más cercano de potencia de 2
int log2N = log2(new_size);

using Complex = complex;
amplitudes.resize(new_size);
std::vector imag{ 0.0 };
imag.resize(new_size);
vector<>> cvec(amplitudes.size());

transform(amplitudes.begin(), amplitudes.end(), imag.begin(), cvec.begin(), [](double da, double db)
{
return complex(da, db);
});

Complex f[N]; // La entrada de FFT

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para conectar vector<double> o vector<><double>> a complex<double>[N] para el procesamiento FFT, puedes utilizar la función std::copy() o bucles for para copiar los elementos al array. Aquí te mostramos un ejemplo de vector<><double>>:

    vector<><double>> cvec(amplitudes.size());
    
    // transform vector<double> to vector<><double>>
    transform(amplitudes.begin(), amplitudes.end(), cvec.begin(),
              [](double d){ return complex<double>(d, 0.0); });
    
    Complejo f[N];
    std::copy(cvec.begin(), cvec.begin() + N, f); // copiar al array para FFT
    

    Cabe señalar que el tamaño del array Complejo f debe ser una potencia de 2 para el procesamiento FFT. En el ejemplo, N es el tamaño del array, por lo que es posible que necesites ajustarlo según el tamaño de tus datos de entrada. Además, asegúrate de incluir los encabezados apropiados para complex, vector y algorithm.

Comments are closed.