Origin Cは、フーリエ変換 (FFT), 短時間FFT (STFT), コンボリューション, Correlation, FFTフィルタ, ウェーブレット分析に対するグローバル関数とNAG関数のコレクションを提供しています。
Origin C関数は、Origin Cヘルプ -> Origin Cリファレンス -> グローバル関数 -> 信号処理カテゴリーで確認できます。
ocmath_smooth関数は、メディアンフィルタ、Savitzky-Golayスムージング、隣接平均スムージング の3つの方法をサポートしています。
vector vSmooth; // 出力 vSmooth.SetSize(vSource.GetSize()); //Savitzky-Golay スムージングを実行。Left=Right=7, quadratic int nLeftpts = nRightpts = 3; int nPolydeg = 2; int nRet = ocmath_smooth(vSource.GetSize(), vSource, vSmooth, nLeftpts, SMOOTH_SG, EDGEPAD_NONE, nRightpts, nPolydeg);
fft_* 関数を使う前に、fft_utils.hをインクルードする必要があります。
#include <fft_utils.h>
fft_real は、離散フーリエ変換(FFT_FORWARD)または逆フーリエ変換(FFT_BACKWARD)を実行します。
fft_real(vSig.GetSize(), vSig, FFT_FORWARD); // エラーなしで0を返す
fft_one_side_spectrumは、FFT結果の片側スペクトルを計算するのに使用します。
fft_one_side_spectrum(vSig.GetSize(), vSig); // エラーなしで0を返す
fft_real(vSig.GetSize(), vSig, FFT_BACKWARD); // エラーなしで0を返す
stft_real 関数は、1Dの実数信号データに短時間FFTを実行するのに使用します。 Stft_complex 関数は、1Dの複素数信号データに短時間FFTを実行するのに使用します。 以下は、実数データに対するサンプルです。
int nWinSize = 4; vector win(nWinSize); get_window_data(RECTANGLE_WIN, nWinSize, win); matrix stft; double stime, sfreq; vector sig = {0, 0, 0, 1, 1, 0, 0, 0}; stft_real(sig, win, 0.1, 1, 4, stft, stime, sfreq); for (int ii = 0; ii < stft.GetNumRows(); ii++) { for (int jj = 0; jj < stft.GetNumCols(); jj++) printf ("%f\t", stft[ii][jj]); printf ("\n"); }
Origin Cは、FFTフィルタを実行するのに、ローパス、ハイパス、バンドパス、バンドブロック、しきい値、ローパスパラボリックなど複数のフィルタタイプをサポートしています。 例えば、
double dFc = 6.5; int iRet = fft_lowpass(vecSignal, dFc, &vecTime);
Origin Cで、NAG関数を呼び、ウェーブレット分析を実行できます。すべてのウェーブレット関数を見るには、Origin Cヘルプ -> Origin C リファレンス -> グローバル関数 -> NAG関数 -> NAG関数へのアクセスとヘルプ -> ウェーブレットのカテゴリを参照してください。 関連のヘッダファイルをインクルードする必要があります。
#include <..\OriginLab\wavelet_utils.h>
以下は、実数型の1D連続ウェーブレットのサンプルです。
int n = vX.GetSize(); int ns = vScales.GetSize(); matrix mCoefs(ns, n); NagError fail; nag_cwt_real(Nag_Morlet, 5, n, vX, ns, vScales, mCoefs, &fail);