ファイル構成
ファイルの中身
2_impulse_estimate.cpp
#include <fstream>
#include <string>
#include <vector>
#include <iostream>
#include "csv_import.h"
#include "2_impulse_estimate_function.h"
using namespace std;
// ==================================================================================
// 実行プログラム
// ==================================================================================
int main()
{
//-------------------------------------------------------------------------------
// インターフェース
string input_file_name, output_file_name;
cout << "Enter analysis file name" << endl;
cin >> input_file_name;
//-------------------------------------------------------------------------------
// csv取り込み
vector<float> time, input, output;
vector< vector<float> > data = csv_import( input_file_name );
for (int k=0; k<data[0].size(); k++ )
{
time.push_back( data[0][k] );
input.push_back( data[1][k] );
output.push_back( data[2][k] );
}
//-------------------------------------------------------------------------------
// 相関解析法によるインパルス応答計算
vector<float> impulse_response = correlation_analysis( input, output );
//-------------------------------------------------------------------------------
// csv出力
ofstream outputfile("./data_strage/2_impulse_response.csv");
outputfile << "Lag" << "," << "response" << endl;
for ( int k=0; k<impulse_response.size(); k++ )
{
outputfile << k << ",";
outputfile << impulse_response[k] << ",";
outputfile << endl;
}
cout << "Impulse response estiamtion is completed" << endl;
}
2_impulse_estimate.h
#include <vector>
using namespace std;
// 相関解析法によるインパルス応答計算
vector<float> impulse_function( vector<float> input, vector<float> output );
correlation_analysis_method.cpp
#include <vector>
#include <bits/stdc++.h>
using namespace std;
//-----------------------------------------------------------------------------------
// 相関解析法によるインパルス応答計算
vector<float> correlation_analysis( vector<float> input, vector<float> output )
{
vector<float> result;
int tau_max = 50;
int k_end = output.size() - tau_max;
// 分母計算
float den=0;
for (int k=0; k<k_end; k++)
{
den += pow( input[k], 2 );
}
// インパルス応答の計算
for ( int tau=0; tau<tau_max; tau++ )
{
// 分子計算
float num=0;
for ( int k=0; k<k_end; k++ )
{
num += output[k+tau] * input[k];
}
result.push_back( num/den );
}
return result;
}