サウンドプログラミング2
■ このスレッドは過去ログ倉庫に格納されています
0172大原ゆき
NGNGFIRでの場合ですが、
入力x、出力y、タップ数Nのフィルタ係数hとして、
y[n]=(h[0]*x[n]+h[1]*x[n-1]+h[2]*x[n-2]…h[N-1]*x[n-(N-1)])
を逐次実行してゆけば良いのです。
C++での実装では、例えば、Filterクラスを用意して、
メンバ変数
std::vector<double> hh_;
std::deque<double> ringbuff_;
メンバ関数
double filter(double x) {
ringbuff.pop_back();
ringbuff.push_front(x);
return std::inner_product(ringbuff_.begin(), ringbuff_.end(), hh_.begin(), 0.0);
}
などを作ります。
フィルタの関数は一サンプル入れるごとに一サンプル出力されるように作ると汎用性が高まりますよ。
■ このスレッドは過去ログ倉庫に格納されています