音頻處理基礎-數值定點化

定點化
由於成本,功耗等音素,一些DSP和MCU上並沒有硬浮點支持,採用軟浮點較爲耗時,更有甚至不支持浮點計算。 在這些處理器上要實現相關算法,浮點的計算轉換到定點域裏計算必不可少。
Q格式的數據是名義上的定點數,它們的存儲和計算均按照整數方式進行計算,這樣的化就可以使用標準的整數ALU來實現浮點計算。而編程這必須確定整數和小數部分的位數以符合使用場景需要的動態範圍和精度。
##浮點轉成Q格式
從浮點轉成Qm.n格式如下:
1.將浮點數乘以2^n
2.四捨五入到整數
##Q格式轉成浮點

  1. 乘以2^{-n}
    ##線程編程
    本篇所述線程是指POSIX標準的線程,

pthread庫不是Linux系統默認的庫,鏈接程序時需要使用靜態庫libpthread.a,編譯時可以加上-lpthread參數.

在算法工程化這一章節中就提到了併發程序設計思想,併發程序設計的核心思想是利用處理多核特性,讓數據處理併發,併發可以使用多進程實現也可以用使用多線程方式實現,在同一個進程中的多個線程可以訪問所屬進程的資源,如文件描述符,內存等;在多個線程裏共享資源時就需要關注資源的一致性(信號,鎖,同步)問題.

考慮時下一個比較常見的應用場景,麥克風陣列在做AEC(自動回聲消除時),每一路麥克風數據處理極其相似,一路一路處理這種串行處理方式是一種方式,另外還有一種方法是設置多個線程,將每一路的語音數據分配到一個核上,併發執行,這樣在四核四路麥克的情況下,實際的處理時間就是一路處理時間,這樣系統的實時性就會很好.

當然在單核的情況下更需要多線程設計,舉個例子,一個進程執行了定期獲取麥克風尋向結果,然後根據獲取到的結果進行點燈刷新操作,如果是多線程設計,那麼在等待獲取尋向結果線程時,這個線程是可以進入休眠的,將cpu讓出來給其它線程使用,儘量充分利用cpu資源.

###線程創建

#include <phtread.h>
int pthread_create(pthread_t *restrict tidp,
                const pthread_attr_t *restrict attr,
                void *(*start_rtn)(void*), void *restrict arg);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章