arm_fir_q15関数
FIR(Finite Impulse Response)フィルタを実行する

関数のソース(CMSIS 2.0以上をダウンロード・インストールする必要あり)
CMSIS_2_00\CMSIS\DSP_Lib\Source\Cortex-M4-M3\FilteringFunctions\arm_fir_q15.c

サンプルソース(DFFSKN40基板付属CD-ROMに収録)
IARprojects\src\projects\arm_fir

引数と戻り値


説明(イメージ)


使用例(サンプルソースの一部)

#define numTaps 90

q15_t firCoeff [] = {
-11, -4, -3, 0, 3, 10, 19, 31,
44, 59, 74, 88, 99, 107, 108, 101,
85, 60, 24, -21, -75, -136, -199, -260,
-316, -360, -386, -391, -367, -312, -222, -95,
66, 261, 486, 734, 998, 1269, 1537, 1792,
2023, 2221, 2378, 2486, 2541, 2541, 2486, 2378,
2221, 2023, 1792, 1537, 1269, 998, 734, 486,
261, 66, -95, -222, -312, -367, -391, -386,
-360, -316, -260, -199, -136, -75, -21, 24,
60, 85, 101, 108, 107, 99, 88, 74,
59, 44, 31, 19, 10, 3, 0, -3,
-4, -11 };
q15_t firStateL[numTaps];
q15_t firStateR[numTaps];
arm_fir_instance_q15 firInstanceL;
arm_fir_instance_q15 firInstanceR;

 : 中略

arm_fir_init_q15(&firInstanceL, numTaps, firCoeff, firStateL, 1);
arm_fir_init_q15(&firInstanceR, numTaps, firCoeff, firStateR, 1);

 : 中略

ADCからのデータをinL, inRに入れる
arm_fir_q15(&firInstanceL, &inL, &outL, 1);
arm_fir_q15(&firInstanceR, &inR, &outR, 1);
outL, outRのデータをDACに渡す

ステレオ2chの場合はL/R別インスタンスで宣言し別々に実行する。

実験
上記のサンプルソースをDFFSKN40基板(デジタルフィルター社)にて実験した。Cortex-M4マイコンはPK40X256VMD100(Kinetis, フリースケール社)搭載。

@ステレオ2chそれぞれOPアンプで振幅調整・高周波カット。
Aマイコン内蔵のADCで16ビットデジタル化。
Barm_fir_q15関数でデジタルフィルタリング。
Cマイコン内蔵のDACでアナログ化。
DOPアンプで振幅調整、その後PCで波形観測。


入力が白色雑音の場合の出力をPCで観測(SoftOscillo2 Standard Edition)。LPFで3kHz以上がカットされている。


まめ知識
開発環境はIAR Workbench 6.0 Kickstart、コンパイラの最適化は「高」でFIRの最大タップ数は90。その他のオプションでは以下の通り。(チャネル数2、サンプリング周波数48kHz)
最適化 なし
最大タップ数 22 46 82 90
これらのタップ数を超えると出力が出なくなる。チャネル数が1ならば倍のタップ数、サンプリング周波数が半分でも倍のタップ数まで可能になる。

戻る

Top Page