arm_rfft_init_q31:cfft成员是如何初始化的?

时间:2016-04-27 12:48:26

标签: c arm signal-processing cortex-m cmsis

尝试将一些旧代码与当前的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);

编译器告诉我函数arm_rfft_init_q31在当前版本的DSP lib中不再接受我的第二个参数(_cfft_)

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

我试图找到一个相关的更改日志条目向我解释这一点,到目前为止没有运气。

3 个答案:

答案 0 :(得分:2)

该函数声明为

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);

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

在我的案例中使用nm查看库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

实际结构可以直接引用上面的cfft结构以及旋转因子指针来定义实例结构,而不是使用真实FFT的init函数,如CMSIS documentation中所示。