信号処理
Origin Cは、フーリエ変換FFT (FFT), 短時間FFTSTFT(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);
|