FFT

spFFTRec型を用いるFFTでは、内部でCPU等に応じた 高速な実装を利用して演算を行っています。できるだけこれらのFFTを用いることを推奨します。

spFFTRec

目的
FFTを行う際に使われる型です。 メモリの確保と解放には、それぞれspInitFFTspFreeFFTを使用して下さい.

データ型
隠蔽されたデータ型です.

関連項目
spInitFFT, spFreeFFT

spInitFFT

目的
FFTを行う際に使われるspFFTRec型のメモリを確保し、初期化します。

書式
#include <sp/fft.h> 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

spFreeFFT

目的
FFTを行う際に使われるspFFTRec型のメモリを解放します。

書式
#include <sp/fft.h> spBool spFreeFFT(spFFTRec fftrec);

引数
fftrec
spInitFFTの呼び出しで得られた fftrecを指定します。

戻り値
呼び出しに成功するとSP_TRUEを、失敗するとSP_FALSEを返します。

関連項目
spInitFFT

spResetFFTOrder

目的
FFTを実行する際のFFTポイントを変更します。

書式
#include <sp/fft.h> spBool spResetFFTOrder(spFFTRec fftrec, long order);

引数
fftrec
spInitFFTの呼び出しで得られた fftrecを指定します。
order
FFTポイントが2の何乗であるかを指定します。例えば、256であれば、8を指定します。

戻り値
呼び出しに成功するとSP_TRUEを、失敗するとSP_FALSEを返します。

説明
FFT実行の際(spExecFFTspExecRealFFT)の データの領域の大きさは、2のorder乗である必要があります。

関連項目
spInitFFT

spExecFFT, spExecFFTF

目的
FFTを実行します。

書式
#include <sp/fft.h> 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のorderspInitFFTの呼び出し時に指定したもの)乗である必要があります。 入力が複素数ではなく、実数の場合は、imagの全てのデータを0.0にしたもの を指定します。
inv
非0の場合には逆FFTを実行し、0の場合にはFFTを実行します。

戻り値
呼び出しに成功するとSP_TRUEを、失敗するとSP_FALSEを返します。

説明
float型のデータの場合はspExecFFTFを、double型のデータの場合はspExecFFTを呼び出します。 どちらの関数を呼び出しても、内部処理においては spInitFFTの呼び出し時に指定したprecisionに対応する精度で計算します。

関連項目
spExecRealFFT

spExecRealFFT, spExecRealFFTF

目的
実数データに対するFFTを実行します。

書式
#include <sp/fft.h> spBool spExecRealFFTF(spFFTRec fftrec, float *data, int inv); spBool spExecRealFFT(spFFTRec fftrec, double *data, int inv);

引数
fftrec
spInitFFTの呼び出しで得られた fftrecを指定します。
data
フーリエ変換を行うデータを指定します。 領域の大きさは、2のorderspInitFFTの呼び出し時に指定したもの)乗である必要があります。 周波数領域では、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

目的
ベクトル型に対し、FFTを行います。

書式
#include <sp/fft.h> 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関連処理

目的
ベクトル型に対し、FFTに基づく処理を行います。

書式
#include <sp/fft.h> 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);

引数
xab
入力信号波形です。
gd
群遅延スペクトルです。
fftl
FFTポイント数です。
fftrec
spInitFFT等の呼び出しで得られた spFFTRec型を指定します。 関数の末尾にexが付いているものの場合に用いられます。

戻り値
戻り値がspBool型の場合は、実行に成功するとSP_TRUEが、失敗するとSP_FALSEが返ります。 戻り値がベクトル型の場合は、メモリ確保されたベクトル型が返ります。

説明
戻り値がspBool型の場合は、入力ベクトルに値が上書きされます。 戻り値がベクトル型の場合は、それを使用しなくなったらメモリの解放をして下さい。 それぞれの関数は、以下のような処理を行います。

関連項目
ベクトル型に対するFFT

ケプストラム関連処理

目的
ケプストラムに関連した処理を行います。

書式
#include <sp/fft.h> 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型の場合は、入力ベクトルに値が上書きされます。 戻り値がベクトル型の場合は、それを使用しなくなったらメモリの解放をして下さい。 それぞれの関数は、以下のような処理を行います。

関連項目
ベクトル型に対するFFT関連処理

データシフト関連処理

目的
入力データのシフトを実行します。

書式
#include <sp/fft.h> 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型の場合は、入力ベクトルに値が上書きされます。 戻り値がベクトル型の場合は、それを使用しなくなったらメモリの解放をして下さい。 それぞれの関数は、以下のような処理を行います。

関連項目
ベクトル型に対するFFT

Last modified: "2012-06-09 00:33:00 hideki"