Вычислить спектр мощности из БПФC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вычислить спектр мощности из БПФ

Сообщение Anonymous »

Я пишу приложение-анализатор IQ на c++ qt и обрабатываю данные IQ, которые приходят ко мне с помощью fft (для этого я использую библиотеку fftw3). Затем я пытаюсь вычислить спектр мощности. Это код:

Код: Выделить всё

   fftw_complex* in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
fftw_complex* out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);

for (int i = 0; i < N; ++i) {
in[i][0] = data[i].real();
in[i][1] = data[i].imag();
}

fftw_plan plan = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);

fftw_execute(plan);

std::vector fftResult(N);
for (int i = 0; i < N; ++i) {
fftResult[i] = std::complex(out[i][0], out[i][1]);
}

fftw_destroy_plan(plan);
fftw_free(in);
fftw_free(out);

Код: Выделить всё

        float result1 = sqrtf(pow(fftResult[i].real(),2) + pow(fftResult[i].imag(),2)); //
float result2 = pow(result1,2); //
float result3 = pow(N,2); //
float result4 = result2 / result3; //
float result5 = log10(result4); //
float result6 = 10 * result5; //
magnitude[i] = result6; //
Когда я показываю эти результаты на графике, график кажется правильным, но результаты оказываются примерно на 15 дБм выше. При изменении местоположения или силы сигнала разница в 15 может увеличиваться. Я делаю что-то не так? Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/789 ... m-from-fft
Ответить

Быстрый ответ

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

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

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

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