CMSIS-DSP libraryを使っています.速くて便利です.ARM社が作ってくれて配布しているものらしい.CPUが変わっても大丈夫です.でも仕様がよくわからないので触って確かめます.
同libraryについての過去投稿.
STM32H723スピードtune up インスト方法
STM32 CMSIS FIRとFFTをお味見 FIR,FFT使い方
FIR,FFTを使うにあたり、Cの標準とは違う変数型が出てきます.
q15_t (1.15) 符号1bit、整数15bit 2の補数
q31_t (1.31) 符号1bit、整数31bit 2の補数
float32_t
複素数の型はないっぽい.
代わりに、実数部と虚数部を交互に並べて使う.配列長は2倍になります.
xxx[] = { Re, Im, Re, Im...... }
変数型に応じてFIRの関数が用意されてる.他の演算も同様.
arm_fir_q15()
arm_fir_q31()
arm_fir_f32()
配列の型変換をする関数もある.
arm_q15_to_float()
arm_q15_to_q31()
型変換の法則が判らなかったので調べました.
配列の全ての要素に定数を加算してくれる関数もある.
arm_offset_q15()
CMCIS-DSP libraryの説明はこれでおしまいです.
ーーーー
本題のクリップ処理について.
懸念:
q15に加算すると、上限の32767を超えちゃうかもしれません.
FIRがoverflowして、波形がマイナス側に反転しちゃうかもしれません.
使ってみたところ、たとえばq15のFIRに過大入力を突っ込んだとしても、ちゃんと32767でクリッピング処理してるみたいよ.もちマイナスも同様.
arm_fir_q15()
加算関数もクリッピングしてくれてるっぽい.
arm_offset_q15()
演算関数の内部はblack boxなので、クリッピングしてないからといじるわけにもいきません.でもちゃんと作ってあるみたいでよかよか.
#間違ってても責任取らないので素直に死んでください
かしこ









































