FFT
spFFTRec型を用いるFFTでは、内部でCPU等に応じた
高速な実装を利用して演算を行っています。できるだけこれらのFFTを用いることを推奨します。
- 目的
- FFTを行う際に使われる型です。
メモリの確保と解放には、それぞれspInitFFTと
spFreeFFTを使用して下さい.
- データ型
- 隠蔽されたデータ型です.
- 関連項目
-
spInitFFT,
spFreeFFT
- 目的
-
FFTを行う際に使われるspFFTRec型のメモリを確保し、初期化します。
- 書式
-
#include
spFFTRec spInitFFT(long order, spFFTPrecision precision);
- 引数
-
- order
- FFTポイントが2の何乗であるかを指定します。例えば、256であれば、8を指定します。
- precision
- FFTの内部計算における精度を指定します。
SP_FFT_DEFAULT_PRECISION、SP_FFT_DOUBLE_PRECISION、SP_FFT_FLOAT_PRECISIONなどが指定できます。
特に精度を重視しない場合は、SP_FFT_DEFAULT_PRECISIONを指定して下さい。
精度を高くする場合、環境によっては速度が遅くなる場合があります。
- 戻り値
- 成功すると、メモリ確保されたspFFTRecが返ります。
失敗するとNULLが返ります。
メモリを解放するには、spFreeFFTを呼びます。
- 説明
- FFT関連の関数であるspExecFFT、spExecRealFFTなどは、この関数を呼び出さないと使用できません。
- 関連項目
-
spFreeFFT,
spExecFFT
- 目的
- FFTを行う際に使われるspFFTRec型のメモリを解放します。
- 書式
-
#include
spBool spFreeFFT(spFFTRec fftrec);
- 引数
-
- fftrec
- spInitFFTの呼び出しで得られた
fftrecを指定します。
- 戻り値
- 呼び出しに成功するとSP_TRUEを、失敗するとSP_FALSEを返します。
- 関連項目
-
spInitFFT
- 目的
- FFTを実行する際のFFTポイントを変更します。
- 書式
-
#include
spBool spResetFFTOrder(spFFTRec fftrec, long order);
- 引数
-
- fftrec
- spInitFFTの呼び出しで得られた
fftrecを指定します。
- order
- FFTポイントが2の何乗であるかを指定します。例えば、256であれば、8を指定します。
- 戻り値
- 呼び出しに成功するとSP_TRUEを、失敗するとSP_FALSEを返します。
- 説明
-
FFT実行の際(spExecFFTやspExecRealFFT)の
データの領域の大きさは、2のorder乗である必要があります。
- 関連項目
-
spInitFFT
- 目的
- FFTを実行します。
- 書式
-
#include
spBool spExecFFT(spFFTRec fftrec, double *real, double *imag, int inv);
spBool spExecFFTF(spFFTRec fftrec, float *real, float *imag, int inv);
- 引数
-
- fftrec
- spInitFFTの呼び出しで得られた
fftrecを指定します。
- real, imag
- realに実部、imagに虚部のデータを指定します。配列、あるいはメモリ確保されたポインタを指定します。
領域の大きさは、2のorder(spInitFFTの呼び出し時に指定したもの)乗である必要があります。
入力が複素数ではなく、実数の場合は、imagの全てのデータを0.0にしたもの
を指定します。
- inv
- 非0の場合には逆FFTを実行し、0の場合にはFFTを実行します。
- 戻り値
- 呼び出しに成功するとSP_TRUEを、失敗するとSP_FALSEを返します。
- 説明
- float型のデータの場合はspExecFFTFを、double型のデータの場合はspExecFFTを呼び出します。
どちらの関数を呼び出しても、内部処理においては
spInitFFTの呼び出し時に指定したprecisionに対応する精度で計算します。
- 関連項目
-
spExecRealFFT
- 目的
- 実数データに対するFFTを実行します。
- 書式
-
#include
spBool spExecRealFFTF(spFFTRec fftrec, float *data, int inv);
spBool spExecRealFFT(spFFTRec fftrec, double *data, int inv);
- 引数
-
- fftrec
- spInitFFTの呼び出しで得られた
fftrecを指定します。
- data
- フーリエ変換を行うデータを指定します。
領域の大きさは、2のorder(spInitFFTの呼び出し時に指定したもの)乗である必要があります。
周波数領域では、dataには、次のように複素スペクトルの値が入っています。
data[0]=Re(X[0]), data[1]=Re(X[fftl/2]), data[2*n]=Re(X[n]), data[2*n+1]=Im(X[n])。
ここで、X[n]は複素スペクトルを、fftlはFFTポイントを表します。
すなわち、0を除く偶数番目の要素にはスペクトルの実部の値が、1を除く奇数番目の要素にはスペクトルの虚部の値が入っており、
0番目の要素には周波数0におけるスペクトルの値(実部)が、1番目の要素には
ナイキスト周波数におけるスペクトルの値(実部)が入っています。
- inv
- 非0の場合には逆FFTを実行し、0の場合にはFFTを実行します。
- 戻り値
- 呼び出しに成功するとSP_TRUEを、失敗するとSP_FALSEを返します。
- 説明
- float型のデータの場合はspExecRealFFTFを、double型のデータの場合はspExecRealFFTを呼び出します。
どちらの関数を呼び出しても、内部処理においては
spInitFFTの呼び出し時に指定したprecisionに対応する精度で計算します。
- 関連項目
-
spExecFFT
- 目的
-
ベクトル型に対し、FFTを行います。
- 書式
-
#include
void fvfft(FVector x);
void dvfft(DVector x);
void fvifft(FVector x);
void dvifft(DVector x);
FVector xfvfft(FVector x, long length);
DVector xdvfft(DVector x, long length);
FVector xfvifft(FVector x, long length);
DVector xdvifft(DVector x, long length);
spBool dvfftex(spFFTRec fftrec, DVector x);
spBool dvifftex(spFFTRec fftrec, DVector x);
spBool dvrfftex(spFFTRec fftrec, DVector x);
spBool dvirfftex(spFFTRec fftrec, DVector x);
DVector xdvfftex(spFFTRec fftrec, DVector x);
DVector xdvifftex(spFFTRec fftrec, DVector x);
DVector xdvrfftex(spFFTRec fftrec, DVector x);
DVector xdvirfftex(spFFTRec fftrec, DVector x);
- 引数
-
- x
- 入力信号波形もしくは入力スペクトルです。
- length
- FFTポイント数です。
- fftrec
- spInitFFT等の呼び出しで得られた
spFFTRec型を指定します。
関数の末尾にexが付いているものの場合に用いられます。
- 戻り値
- 戻り値がspBool型の場合は、実行に成功するとSP_TRUEが、失敗するとSP_FALSEが返ります。
戻り値がベクトル型の場合は、メモリ確保されたベクトル型が返ります。
- 説明
-
戻り値がspBool型もしくはvoid型の場合は、入力ベクトルに値が上書きされます。
戻り値がベクトル型の場合は、それを使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- fft: FFTを実行します。
- ifft: 逆FFTを実行します。
- rfft: 実数信号のFFTを実行します。
- irfft: 実数信号に対するスペクトルの逆FFTを実行します。
スペクトルは、
spExecRealFFTで説明する条件で格納されている必要があります。
- 関連項目
-
ベクトル型に対するFFT関連処理
- 目的
-
ベクトル型に対し、FFTに基づく処理を行います。
- 書式
-
#include
FVector xfvfftconv(FVector a, FVector b, long fftl);
DVector xdvfftconv(DVector a, DVector b, long fftl);
FVector xfvfftpower(FVector x, long fftl);
DVector xdvfftpower(DVector x, long fftl);
FVector xfvfftabs(FVector x, long fftl);
DVector xdvfftabs(DVector x, long fftl);
DVector xdvfftangle(DVector x, long fftl);
DVector xdvfftgrpdly(DVector x, long fftl);
DVector xdvgdtophase(DVector gd, long fftl, int reverse);
DVector xdvzerophase(DVector x, long fftl);
spBool dvfftpowerex(spFFTRec fftrec, DVector x);
spBool dvfftabsex(spFFTRec fftrec, DVector x);
spBool dvfftangleex(spFFTRec fftrec, DVector x);
spBool dvfftgrpdlyex(spFFTRec fftrec, DVector x);
DVector xdvfftgrpdlyex(spFFTRec fftrec, DVector x);
spBool dvfftconvex(spFFTRec fftrec, DVector a, DVector b);
DVector xdvfftconvex(spFFTRec fftrec, DVector a, DVector b);
- 引数
-
- x、a、b
- 入力信号波形です。
- gd
- 群遅延スペクトルです。
- fftl
- FFTポイント数です。
- fftrec
- spInitFFT等の呼び出しで得られた
spFFTRec型を指定します。
関数の末尾にexが付いているものの場合に用いられます。
- 戻り値
- 戻り値がspBool型の場合は、実行に成功するとSP_TRUEが、失敗するとSP_FALSEが返ります。
戻り値がベクトル型の場合は、メモリ確保されたベクトル型が返ります。
- 説明
- 戻り値がspBool型の場合は、入力ベクトルに値が上書きされます。
戻り値がベクトル型の場合は、それを使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- fftconv: 2つの入力信号の畳み込みをFFTを用いて実行します。
- fftpower: 入力信号のパワースペクトルを求めます。
- fftabs: 入力信号の振幅スペクトルを求めます。
- fftangle: 入力信号の位相スペクトルを求めます。
- fftgrpdly: 入力信号の群遅延スペクトルを求めます。
- fftgdtophase: 群遅延スペクトルから位相スペクトルを求めます。
- fftzerophase: 入力信号を零位相化します。
- 関連項目
-
ベクトル型に対するFFT
- 目的
-
ケプストラムに関連した処理を行います。
- 書式
-
#include
void dvspectocep(DVector x);
void dvceptospec(DVector x);
DVector xdvrcep(DVector x, long fftl);
void dvrcep(DVector x);
void dvceptompc(DVector cep);
DVector xdvmpcep(DVector x, long fftl);
void dvmpcep(DVector x);
void dvlif(DVector cep, long fftl, long lif);
spBool dvspectocepex(spFFTRec fftrec, DVector x);
spBool dvceptospecex(spFFTRec fftrec, DVector x);
spBool dvrcepex(spFFTRec fftrec, DVector x);
spBool dvmpcepex(spFFTRec fftrec, DVector x);
- 引数
-
- x
- 入力信号波形もしくは入力スペクトルです。
- fftl
- FFTポイント数です。
- lif
- リフタリングの際に用いられるケプストラム次数です。
- fftrec
- spInitFFT等の呼び出しで得られた
spFFTRec型を指定します。
関数の末尾にexが付いているものの場合に用いられます。
- 戻り値
- 戻り値がspBool型の場合は、実行に成功するとSP_TRUEが、失敗するとSP_FALSEが返ります。
戻り値がベクトル型の場合は、メモリ確保されたベクトル型が返ります。
- 説明
-
戻り値がspBool型もしくはvoid型の場合は、入力ベクトルに値が上書きされます。
戻り値がベクトル型の場合は、それを使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- spectocep: 複素スペクトルからケプストラムを求めます。
- ceptospec: ケプストラムから複素スペクトルを求めます。
- rcep: 入力信号の実数ケプストラムを求めます。
- mpcep: 入力信号の最小位相ケプストラムを求めます。
- ceptompc: 実数ケプストラムから最小位相ケプストラムに変換します。
- lif: ケプストラムのリフタリングを行います。
- 関連項目
-
ベクトル型に対するFFT関連処理
- 目的
-
入力データのシフトを実行します。
- 書式
-
#include
extern void fvdatashift(FVector x, long shift);
extern void dvdatashift(DVector x, long shift);
extern void fvcircleshift(FVector x, long shift);
extern void dvcircleshift(DVector x, long shift);
extern FVector xfvfftshift(FVector x, long length);
extern DVector xdvfftshift(DVector x, long length);
extern FVector xfvfftturn(FVector x, long length);
extern DVector xdvfftturn(DVector x, long length);
extern void fvfftshift(FVector x);
extern void dvfftshift(DVector x);
extern void fvfftturn(FVector x);
extern void dvfftturn(DVector x);
extern void datashiftf(float *real, float *imag, long length, long shift);
extern void datashift(double *real, double *imag, long length, long shift);
extern void circleshiftf(float *real, float *imag, long length, long shift);
extern void circleshift(double *real, double *imag, long length, long shift);
extern void fftturnf(float *real, float *imag, long length);
extern void fftturn(double *real, double *imag, long length);
extern void fftshiftf(float *real, float *imag, long length);
extern void fftshift(double *real, double *imag, long length);
- 引数
-
- x
- 入力信号波形もしくは入力スペクトルです。
- length
- データ長です。
- shift
- データシフト長です。正の値を指定すると右側に、負の値を指定すると左側にシフトします。
- real
- 実部を表す配列もしくはポインタです。
データ長分のメモリが確保されている必要があります。
- imag
- 虚部を表す配列もしくはポインタです。使用しない場合は、NULLとすることができます。
使用する場合には、データ長分のメモリが確保されている必要があります。
- 戻り値
- 戻り値がspBool型の場合は、実行に成功するとSP_TRUEが、失敗するとSP_FALSEが返ります。
戻り値がベクトル型の場合は、メモリ確保されたベクトル型が返ります。
- 説明
-
戻り値がspBool型もしくはvoid型の場合は、入力ベクトルに値が上書きされます。
戻り値がベクトル型の場合は、それを使用しなくなったらメモリの解放をして下さい。
それぞれの関数は、以下のような処理を行います。
- datashift: データのシフトを行います。
シフトした結果、ベクトルの範囲を超えてしまう場合は、その部分は捨てられます。
- circleshift: データの環状シフトを行います。
- fftshift: length/2点目が0点目になるように環状シフトします。
- fftturn: スペクトルの実部を、length/2点目を中心に線対称になるようにし、
スペクトルの虚部を、length/2点目を中心に点対称になるようにします。
入力スペクトルの後半部分に含まれているデータは使用されません。
- 関連項目
-
ベクトル型に対するFFT
Last modified: "2012-06-09 00:33:00 hideki"