Я использую кодировщик MATLAB для генерации кода, который имеет дело с комплексными числами.Typedef по умолчанию для сложного типа, сгенерированного MATLAB:
typedef double real_T;//real number
typedef struct {
real_T re;
real_T im;
} creal_T;//complex number
Теперь я хочу использовать fftw3 для выполнения fft с данными, проблема в том, что в fftw3 сложный тип определяется как:
typedef double fftw_complex[2];
Из документации fftw3 в разделе «Обновление с fftw Version 2»:
Основное отличие типов данных заключается в том, что fftw_complex в FFTW 2 был определен как структура с макросамиc_re и c_im для доступа к реальным / мнимым частям.( Это двоичная совместимость с FFTW 3 на любом компьютере, за исключением, возможно, некоторых старых Crays с одинарной точностью. ) Эквивалентные макросы для FFTW 3:
#define c_re(c) ((c)[0])
#define c_im(c) ((c)[1])
Am Iздесь чего-то не хватает или есть способ безопасно привести тип creal_T к соответствующему fftw3 без фактического копирования элемента данных по элементу?