arm_fir_interpolate_q15関数
インターポレーション(オーバサンプリング)を行う

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

サンプルソース(DFFSKN40基板付属CD-ROMに収録) 2011/09/04追加
IARprojects\src\projects\arm_interp

引数と戻り値


説明(イメージ)


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

#define numTaps 28
#define blockSize 50
#define L 2

q15_t inData[blockSize];
q15_t outData[blockSize*L];
q15_t firState[numTaps/L+blockSize-1];

arm_fir_interpolate_instance_q15 firInstance;

// FIRフィルタの係数
q15_t firCoeff[] = {
72, -1, -239, -136, 388, 272, -699, -576,
1171, 1143, -2080, -2554, 5039, 14482, 14482, 5039,
-2554, -2080, 1143, 1171, -576, -699, 272, 388,
-136, -239, -1, 72 }
 : 中略
arm_fir_interpolate_init_q15(&firInstance, L, numTaps, firCoeff, firState, blockSize);
 : 中略
void initWave() {
// 入力データの初期化
inData [ 0 ] = 28415 ;
inData [ 1 ] = 26196 ;
inData [ 2 ] = 12790 ;
inData [ 3 ] = 12402 ;
inData [ 4 ] = 25732 ;
 : 中略
inData [ 47 ] = 29066 ;
inData [ 48 ] = 25082 ;
inData [ 49 ] = 11923 ;
}
 : 中略
arm_fir_interpolate_q15(&firInstance, inData, outData, blockSize);

入力は50個のデータ列。あらかじめプログラムに埋め込んである。
2倍オーバサンプリングの結果、出力は100個のデータ列になる。

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

@50個の入力データ列を2倍オーバサンプリングして100個の出力データ列を得る。
A入出力データをUSB経由でパソコンに送る。
BWindowsアプリケーションで波形観測。


KnInterp.exe(DFFSKN40基板付属CD-ROMに収録)を実行してbefore Over Samplingボタンを押すと入力データ列(inData)が描画される。


after Over Samplingボタンを押すと出力データ列(outData)が描画される。滑らかに2倍補間されている。


まめ知識
FIRフィルタでフィルタリングしているのでその分遅延する。28タップなので出力の最初の14サンプルはほぼゼロになる。
2倍オーバサンプリングの場合、FIRフィルタのタップ数は2の倍数にする必要あり。
2倍オーバサンプリングの場合、振幅が半分になるので出力を2倍にして表示している。
blockSizeとは、一度に処理する入力データの数であることに注意。
遅延器の長さは(numTaps/L)+blockSize-1必要。

戻る

Top Page