arm_rfft_init_q31: CFFT成员是如何初始化的?
arm_rfft_init_q31: how is the cfft member initialized?
尝试将一些旧代码与当前的 CMSIS DSP 库一起使用。旧代码:
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);
编译器告诉我,在当前版本的 DSP 库中,函数 arm_rfft_init_q31 不再接受我的第二个参数 (_cfft_)
。
由于 rfft 结构仍然有一个指向 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);
查看源代码(我不知道它可用)我发现初始化函数插入了一个指向全局常量 cfft 结构的指针,该结构显然根据需要链接到二进制文件中。
我曾在 github 上看到过 CMSIS 5 的代码,但现在找不到了。它证实了您所看到的有关数学库中可用的全局常量 cfft 结构的内容。
使用 nm 查看库,libarm_cortexM4lf_math.a 在我的例子中:
nm libarm_cortexM4lf_math.a
这提供了在 arm_rfft_init_q31 调用中引用的 read-only 结构的列表。
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
不使用 Real FFT 的 init 函数,实例结构可以直接引用上面的 cfft 结构以及旋转因子指针来定义,如 CMSIS documentation.
中所示
尝试将一些旧代码与当前的 CMSIS DSP 库一起使用。旧代码:
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);
编译器告诉我,在当前版本的 DSP 库中,函数 arm_rfft_init_q31 不再接受我的第二个参数 (_cfft_)
。
由于 rfft 结构仍然有一个指向 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);
查看源代码(我不知道它可用)我发现初始化函数插入了一个指向全局常量 cfft 结构的指针,该结构显然根据需要链接到二进制文件中。
我曾在 github 上看到过 CMSIS 5 的代码,但现在找不到了。它证实了您所看到的有关数学库中可用的全局常量 cfft 结构的内容。
使用 nm 查看库,libarm_cortexM4lf_math.a 在我的例子中:
nm libarm_cortexM4lf_math.a
这提供了在 arm_rfft_init_q31 调用中引用的 read-only 结构的列表。
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
不使用 Real FFT 的 init 函数,实例结构可以直接引用上面的 cfft 结构以及旋转因子指针来定义,如 CMSIS documentation.
中所示