オーディオ用のInterpolatorとDecimatorはFIRフィルタの変形として実装することが多いですが、一般には係数長やブロックサイズ長に制約があることは知られていません。
何故知られていないかというと、あはは使われないからです。あはは。サンプル周波数を変える等というのは、なかなかアマチュアのフィールドには降りてきません。そんなものを使う場合にはエキスパートなわけで、エキスパートはエキスパートのコミュニティを持っているから一般には知る必要も無いと言うことでしょう。
実際にどんな制約があるか、CMSISのDSPライブラリを見てみましょう。たとえば、arm_fir_decimate_init_f32()の返り値に関する記述を読んでみると以下の記述があります。
The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_LENGTH_ERROR if
blockSize
is not a multiple ofM
.
多少記述が曖昧ですが、blockSizeはダウンサンプル比Mの整数倍でなければなりません。明示されてはいませんが、同じ制約がarm_fir_decimate_f32()にもあるはずです。
また、arm_fir_interpolate_init_f32()には以下の記述があります。
The function returns ARM_MATH_SUCCESS if initialization was successful or ARM_MATH_LENGTH_ERROR if the filter length
numTaps
is not a multiple of the interpolation factorL
.
係数長はアップサンプル比Lの整数倍でなければなりません。
自分で実装するとこれらの制約は自明なものとして頭に入るのですが、使うときにはちょっとした罠になるため注意が必要です。