信号処理


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_* 関数を使う前に、fft_utils.hをインクルードする必要があります。

#include <fft_utils.h>

FFT

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を返す

IFFT

fft_real(vSig.GetSize(), vSig, FFT_BACKWARD); // エラーなしで0を返す

STFT

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");
}

FFTフィルタ

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);