2016-04-27 755 views
0

試圖在當前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

回答

0

查看源(我不知道它是可用的)我發現初始化函數插入一個指向全局常量CFFT結構是顯然根據需要鏈接到二進制文件。

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

是的,這個函數現在就是這樣聲明的。在2012年,這個函數有5個參數,第二個是這個指向這個東西的指針。推理是,實際輸入的fft在內部使用fft來處理複雜的輸入,並進行一些巧妙的數據重組。 rfft_init函數正在初始化兩個結構。由於當前庫的rfft結構仍然有一個cfft指針成員(最後一個成員),我不知道這個cfft是如何分配的。畢竟,在皮層m上,庫不能簡單地調用malloc。 –

0

我在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中所示。