arm_rfft_init_q31:cfft成员如何初始化?

问题描述:

试图在当前CMSIS DSP库中使用一些旧代码。旧代码:arm_rfft_init_q31:cfft成员如何初始化?

const unsiged fftlen=128; 
arm_cfft_radix4_instance_q31 forward_cfft_instance = {0}; 
arm_rfft_instance_q31 forward_rfft_instance = {0}; 
arm_rfft_init_q31(&forward_rfft_instance, &forward_cfft_instance,fftlen, 0, 1); 

编译器告诉我,该功能arm_rfft_init_q31不接受我的第二个参数,(_cfft_),再在DSP LIB的当前版本。

由于rfft结构仍然有一个指向cfft实例的指针,我不知道这些指针是如何初始化的?

我试图找到一个相关的更新日志条目,向我解释这一点,迄今没有运气。

+0

@Olaf这与OP的问题有什么关系? – fluter

+0

@ fluter:采取的点。不知道为什么我读了最后一行作为'struct'的初始化程序。也许我需要新的眼镜。 – Olaf

查看源(我不知道它是可用的)我发现初始化函数插入一个指向全局常量CFFT结构是显然根据需要链接到二进制文件。

的函数声明为

arm_status arm_rfft_init_q31 (arm_rfft_instance_q31 *S, uint32_t fftLenReal, uint32_t ifftFlagR, uint32_t bitReverseFlag); 

它期待一个uint32_t作为第二个参数,而你传递一个指针arm_cfft_radix4_instance_q31。另外,根据名称,你想要的仅仅是:

uint32_t fftlen=128; 
arm_rfft_instance_q31 forward_rfft_instance = {0}; 
arm_rfft_init_q31(&forward_rfft_instance, fftlen, 0, 1); 
+0

是的,这个函数现在就是这样声明的。在2012年,这个函数有5个参数,第二个是这个指向这个东西的指针。推理是,实际输入的fft在内部使用fft来处理复杂的输入,并进行一些巧妙的数据重组。 rfft_init函数正在初始化两个结构。由于当前库的rfft结构仍然有一个cfft指针成员(最后一个成员),我不知道这个cfft是如何分配的。毕竟,在皮层m上,库不能简单地调用malloc。 –

我在github上看过CMSIS 5的代码,但现在找不到它。它证实了你在数学库中提供的全局常量cfft结构。

使用纳米看图书馆,libarm_cortexM4lf_math.a在我的情况:

nm libarm_cortexM4lf_math.a 

这提供只读那些在arm_rfft_init_q31呼叫引用结构的列表。

arm_const_structs.o: 
00000000 R arm_cfft_sR_f32_len1024 
00000000 R arm_cfft_sR_f32_len128 
00000000 R arm_cfft_sR_f32_len16 
00000000 R arm_cfft_sR_f32_len2048 
00000000 R arm_cfft_sR_f32_len256 
00000000 R arm_cfft_sR_f32_len32 
00000000 R arm_cfft_sR_f32_len4096 
00000000 R arm_cfft_sR_f32_len512 
00000000 R arm_cfft_sR_f32_len64 
00000000 R arm_cfft_sR_q15_len1024 
00000000 R arm_cfft_sR_q15_len128 
00000000 R arm_cfft_sR_q15_len16 
00000000 R arm_cfft_sR_q15_len2048 
00000000 R arm_cfft_sR_q15_len256 
00000000 R arm_cfft_sR_q15_len32 
00000000 R arm_cfft_sR_q15_len4096 
00000000 R arm_cfft_sR_q15_len512 
00000000 R arm_cfft_sR_q15_len64 
00000000 R arm_cfft_sR_q31_len1024 
00000000 R arm_cfft_sR_q31_len128 
00000000 R arm_cfft_sR_q31_len16 
00000000 R arm_cfft_sR_q31_len2048 
00000000 R arm_cfft_sR_q31_len256 
00000000 R arm_cfft_sR_q31_len32 
00000000 R arm_cfft_sR_q31_len4096 
00000000 R arm_cfft_sR_q31_len512 
00000000 R arm_cfft_sR_q31_len64 

而Q31初始化,例如:

arm_rfft_init_q31.o: 
     U arm_cfft_sR_q31_len1024 
     U arm_cfft_sR_q31_len128 
     U arm_cfft_sR_q31_len16 
     U arm_cfft_sR_q31_len2048 
     U arm_cfft_sR_q31_len256 
     U arm_cfft_sR_q31_len32 
     U arm_cfft_sR_q31_len4096 
     U arm_cfft_sR_q31_len512 
     U arm_cfft_sR_q31_len64 
00000001 T arm_rfft_init_q31 
000000e4 t $d 
00000000 r $d 
00000000 r $d 
00000010 N $d 
00000000 r realCoefAQ31 
00000000 r realCoefBQ31 
00000000 t $t 

除了使用初始化函数实FFT的,该实例结构可被定义直接引用上述以及旋转因子的CFFT结构指针,如CMSIS documentation中所示。