むだ時間推定のソースコード

  • 2021年6月27日
  • Home

ファイル構成

ファイルの中身

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