• 正文
  • 推薦器件
  • 相關推薦
申請入駐 產業(yè)圖譜

DSP庫中的FFT奇怪的現象

2024/03/18
2797
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

一、前言

這是前兩天搭建的H7B0單片機信號采集與計算的模塊,利用它的16比特的ADC采集信號,并進行頻譜分析,結果顯示在OLED屏幕上。計算 2048點的FFT,耗時大約為 10個毫秒左右。下面測試一下,利用 Cortex中的 CMSIS中的 DSP算法庫中的FFT,看是否計算速度能夠得到提高,并對比計算的結果的精度,下面進行測試。

二、添加DSP庫

首先點擊 Keil 編譯環(huán)境中的 Package 按鍵,打開軟件包管理單元。添加 CMSIS 中的 Core以及 DSP 軟件包。確定之后,便可以在工程文件后面看到對應的 DSP軟件包了。

在工程選項中,C++設置頁面,增加 ARM_MATH_CM7 這個常量,表示使用對應Cortext-M7 內核的DSP算法庫。在應用 C 文件中,增加相應的頭文件,這里增加兩個頭文件。請注意,如果不增加前面 ARM_MATH_CM7常量的定義,在包含頭文件之后,就會出現編譯出錯。下面就可以應用相應的DSP函數了。

三、計算結果

調用DSP中的實數浮點FFT函數,對 長度為 2048 的浮點數組進行初始化,前面四個數字設置 1,其他都是0。初始化FFT實例參數,進行實數FFT變換,計算FFT結果的賦值。進行結果顯示和圖像繪制。

這是進行FFT數據的波形,在前面 4 個數據,幅度為 1,其他都是0,變換結果中,前面一半是數據的幅度頻譜,對于實數來講,它的幅度譜關于中心店左右對稱,輸出結果中,只給出了前面一半的結果,后面一半不是計算的數據。這里需要說明的是,FFT計算是即位存儲,也就是最終的結果存儲在輸入數據存儲區(qū)中。輸出結果只有實際頻譜的前半段,后半段與前半段呈現共軛對稱。

▲ 圖1.3.1 信號的波形▲ 圖1.3.2 變換后的幅度譜

對比單片機DSP庫計算得到的幅度譜與 Python 計算的幅度譜,它們是重合的,對應的誤差應該是反映了單精度浮點數與雙精度浮點數之間的差異性。

▲ 圖1.3.3 繪制DSP與Python 計算的結果▲ 圖1.3.4 DSP與Python 計算幅度品的誤差

但是,遇到了一個詭異的情況,那就是如果設置數據窗口長度為5,DSP計算的結果的第一個數值就會出現較大的誤差。第一個數字反映了數據的直流分量。這是數據窗口長度為 7 的時候,也是出現了較大的誤差。這就是了怪了,窗口長度為偶數的時候是準確的,是奇數的時候不準確,這個問題困擾了我很長時間,不知道誰能夠給出解答。

▲ 圖1.3.5 當數據窗口寬度為5的時候,計算結果的第一位,也就是直流分量結果出現了較大的誤差

繪制出數據窗口的寬度從0 到 2048 過程中,DSP算法庫得到的結果第一個數據對應的誤差。隨著數據的長度增加,誤差減小。誤差與數據的長度成反比。對應的窗口為偶數的時候,誤差為0,奇數的時候出現了差異。這實在令人感到奇怪了。

▲ 圖1.3.6 不同窗口計算出的直流分量的誤差分布

四、計算的速度

為了測量DSP中的FFT計算速度,在FFT函數調用前后增加對單片機端口 的操作,有單片機端口的高低電平來表示FFT的計算時間,?通過示波器,測量該端口的波形,可以確定 DSP 庫中的FFT的計算速度。單片機時鐘頻率設為 280MHz,對于長度為 2048 的 FFT,單片機計算時間長度為 1.22ms。前兩天自行編寫了 FFT C語言算法,同樣長度,需要大約 10ms的時間。課件 DSP庫中的算法效率還是非常高的。

▲ 圖1.4.1 計算速度

※ 總??結 ※

本文對于STM32H7B0單片機使用DSP算法庫進行 FFT計算進行測測試。速度非常快,對于2048個數據進行單精度浮點計算時,耗時大約為 1.2ms,這是內核時鐘頻率為 280MHz 的情況下測量的。但也出現了一個令人不解的情況,那就是計算直流量在某些情況下會出現誤差。具體原因現在還不清楚呢。

參考資料

[1]STM32 DSP庫的使用方法: https://blog.csdn.net/u010058695/article/details/112665306

[2]模擬信號的采集并顯示頻譜:STM32H7B0: https://zhuoqing.blog.csdn.net/article/details/136419754

[3]STM32H7B0模塊的電路圖: https://zhuoqing.blog.csdn.net/article/details/136285749

推薦器件

更多器件
器件型號 數量 器件廠商 器件描述 數據手冊 ECAD模型 風險等級 參考價格 更多信息
CSTCE8M00G55-R0 1 Murata Manufacturing Co Ltd Ceramic Resonator, 8MHz Nom, ROHS AND REACH COMPLIANT, CERAMIC PACKAGE-3

ECAD模型

下載ECAD模型
$0.83 查看
SN74LV595ARGYR 1 Texas Instruments Eight-bit shift registers with 3-state output registers 16-VQFN -40 to 125

ECAD模型

下載ECAD模型
$0.9 查看
LAN8710A-EZC-TR 1 Microchip Technology Inc DATACOM, ETHERNET TRANSCEIVER, QCC32, 5 X 5 MM, 0.90 MM HEIGHT, ROHS COMPLIANT, QFN-32

ECAD模型

下載ECAD模型
$1.25 查看

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

公眾號TsinghuaJoking主筆。清華大學自動化系教師,研究興趣范圍包括自動控制、智能信息處理、嵌入式電子系統(tǒng)等。全國大學生智能汽車競賽秘書處主任,技術組組長,網稱“卓大大”。