- 目的
- フィルタリングを行います。
- 書式
-
#include
extern DVector xdvfftfiltex(spFFTRec fftrec, DVector b, DVector x);
extern DVector xdvfftfiltmex(spFFTRec fftrec, DVector b, DVector x);
extern DVector xdvfftfilt(DVector b, DVector x, long fftp);
extern DVector xdvfftfiltm(DVector b, DVector x, long fftp);
extern DVector xdvconv(DVector b, DVector x);
extern DVector xdvfilter(DVector b, DVector a, DVector x);
extern DVector xdvfiltfilt(DVector b, DVector a, DVector x);
- 引数
-
- b
- FIRフィルタ部の係数ベクトル
- a
- IIRフィルタ部の係数ベクトル
- x
- 入力信号ベクトル
- fftp
- FFTポイント数
- fftrec
-
spInitFFT等の呼び出しで得られた
spFFTRec型。
これを引数に持つ関数は、exの接尾辞を持っている。
- 戻り値
- フィルタ処理の結果がベクトル型で返ります。
- 説明
- 戻り値のベクトル型は、使用しなくなったらメモリの解放をして下さい。
fftrecを引数に持つ関数は、内部で高速なFFTの実装を使用するため、処理が劇的に速くなることがあります。
それぞれの関数は、以下のような処理を行います。
- fftfilt: FFTを用いて、FIRフィルタと入力信号の畳み込みを行います。
- fftfiltm: FFTを用いて、FIRフィルタと入力信号の畳み込みを行います。
ただし、出力信号は、xの長さと同じになるように打ち切られます(MATLABと同様の仕様)。
- conv: FIRフィルタを入力信号に畳み込みます。
- filter: FIRフィルタ部とIIRフィルタ部を含むフィルタを入力信号に畳み込みます。
- filtfilt: FIRフィルタ部とIIRフィルタ部を含むフィルタを入力信号に畳み込みます。
ただし、フィルタの位相特性が零位相になるようなフィルタリングが行われます。
- 関連項目
-
ベクトル型、
ベクトル型のメモリ、
spFFTRec型
- 目的
- カイザー窓を用いたFIRフィルタの作成を行います。
- 書式
-
#include
extern DVector xdvlowpass(double cutoff, double sidelobe, double trans, double gain);
extern DVector xdvhighpass(double cutoff, double sidelobe, double trans, double gain);
extern DVector xdvbandpass(double hp_cutoff, double lp_cutoff, double sidelobe, double trans, double gain);
extern DVector xdvbandstop(double lp_cutoff, double hp_cutoff, double sidelobe, double trans, double gain);
- 引数
-
- cutoff、hp_cutoff、lp_cutoff
- ナイキスト周波数(サンプリング周波数の半分)を1としたときの正規化カットオフ周波数。
hp_cutoff、lp_cutoffはそれぞれハイパス・ローパスフィルタの正規化カットオフ周波数。
- sidelobe
- デシベル単位のサイドローブの高さ
- trans
- 許容誤差。
0に近いほど許容誤差が小さくなり、その結果としてフィルタ次数が高くなることがある。
- gain
- ゲイン。1.0であればゲイン調整を行わない。
- 戻り値
- FIRフィルタの係数がベクトル型で返ります。
- 説明
- 戻り値のベクトル型は、使用しなくなったらメモリの解放をして下さい。
xdvlowpass、xdvhighpass、xdvbandpass、xdvbandstop
は、それぞれローパス、ハイパス、バンドパス、バンドストップフィルタを作成します。
- 関連項目
-
フィルタリング、
ベクトル型、
ベクトル型のメモリ
- 目的
- フィルタ処理に関連した関数です。
- 書式
-
#include
extern void dvangle(DVector spc);
extern DVector xdvangle(DVector spc);
extern void dvunwrap(DVector phs, double cutoff);
extern double sinc(double x);
extern double sincc(double x, double c);
- 引数
-
- spc
- 入力複素数ベクトル。例えば複素スペクトルなど。
- 戻り値
- 戻り値がベクトル型の場合は、メモリ確保されたベクトル型が返ります。
- 説明
- 戻り値のベクトル型は、使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- angle: 入力複素数ベクトルの要素ごとの位相を計算します。
- unwrap: 位相のアンラップ(位相の2πのジャンプを取り除く処理)を行います。
- sinc、sincc: sinc関数を計算します。sinccは分子の係数をcで指定できます。
- 関連項目
-
ベクトル型、
ベクトル型のメモリ
- 目的
- 補間などを実行します。
- 書式
-
#include
extern DVector xdvinterp1l(DVector x, DVector y, DVector xi);
extern DVector xdvinterp1s(DVector x, DVector y, DVector xi);
extern DVector xdvsplinecl(DVector x, DVector y, DVector xi, double leftslope, double rightslope);
extern DVector xdvspline(DVector x, DVector y, DVector xi, spBool notaknot);
extern DVector xdvinterpex(DVector sig, long r, long l, double a);
extern DVector xdvinterp(DVector sig, long r); /* l = 4, a = 0.5 */
extern DVector xdvdecimateex(DVector sig, long r, long order, spBool fir_flag);
extern DVector xdvdecimate(DVector sig, long r);
- 引数
-
- x
- 補間元の入力信号yのX軸の値
- y
- 補間元の入力信号
- xi
- 補間後の信号のX軸の値
- leftslope、rightslope
- xdvsplineclによる補間の端点の勾配。それぞれ左端の勾配と右端の勾配を表す。
- notaknot
- xdvsplineにおいて、SP_TRUEの場合、not-a-knot条件での実行となり、
SP_FALSEの場合、natural条件での実行になる。
- sig
- 入力信号
- r
- 変換倍率。補間の場合は、何倍に点数を増やすか、間引きの場合は何倍に点数を減らすかを表す。
- l
- xdvinterpexのフィルタ次数の基準となる値。xdvinterpでは、デフォルト値として4が使用される。
- a
- xdvinterpexの正規化カットオフ周波数(ナイキスト周波数=1)。
xdvinterpでは、デフォルト値として0.5が使用される。
- order
- xdvdecimateexのフィルタ次数。
0にすると、FIRフィルタの場合は30次、IIRフィルタの場合は8次のデフォルト値が用いられる。
- fir_flag
- SP_TRUEを指定すると、xdvdecimateexに用いるフィルタにFIRフィルタが用いられ、
SP_FALSEを指定するとIIRフィルタが用いられる。
- 戻り値
- 処理結果がベクトル型で返ります。
- 説明
- 戻り値のベクトル型は、使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- interp1l: 線形補間を実行します。
- interp1s: キュービックスプライン補間を実行します。
not-a-not条件(MATLABと同じ条件)での実行になります。
- splinecl: キュービックスプライン補間を実行します。
端点での勾配を指定できます。
- spline: キュービックスプライン補間を実行します。引数
notaknotがSP_TRUEの場合、not-a-knot条件での実行となり、
SP_FALSEの場合、natural条件での実行になります。
- interpex: 入力信号の補間を行い、点数を増やした信号を作成する。
- interp: 入力信号の補間を行い、点数を増やした信号を作成する。
l = 4, a = 0.5の条件が用いられる。
- decimateex: 入力信号の間引きを行い、点数を減らした信号を作成する。
fir_flagがSP_TRUEのときはIIRフィルタ(チェビシェフI型)を用い、
SP_FALSEの場合はFIRフィルタ(ハミング窓により打ち切られたsinc関数)を用いる。
orderが0のときはデフォルトの次数(FIRでは30、IIRでは8)が用いられる。
- decimate: 入力信号の間引きを行い、点数を減らした信号を作成する。
8次のチェビシェフI型フィルタが用いられる。
- 関連項目
-
ベクトル型、
ベクトル型のメモリ
Last modified: "2012-06-09 00:33:16 hideki"