Weather casting with Machine Learning (SVM and SRNN).

Dependencies:   EthernetInterface GraphicHandler NTPClient SRNN SVM SensorModule mbed-rtos mbed

Committer:
yukari_hinata
Date:
Sun Feb 22 01:06:19 2015 +0000
Revision:
6:29d393d430d0
Parent:
5:b61f3f5b0fc8
add svm sample data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yukari_hinata 2:20ecfe6edd71 1 #include "main_util.hpp"
yukari_hinata 2:20ecfe6edd71 2
yukari_hinata 5:b61f3f5b0fc8 3 void update_srnn_sample(float* sample_queue, float* new_data)
yukari_hinata 5:b61f3f5b0fc8 4 {
yukari_hinata 5:b61f3f5b0fc8 5 // 古いデータの消去, データのシフト
yukari_hinata 5:b61f3f5b0fc8 6 for (int i = 0; i < DIM_SIGNAL * LEN_DATA_SEQUENCE; i++) {
yukari_hinata 5:b61f3f5b0fc8 7 if ( i < DIM_SIGNAL * (LEN_DATA_SEQUENCE-1) )
yukari_hinata 5:b61f3f5b0fc8 8 sample_queue[i] = sample_queue[i+DIM_SIGNAL];
yukari_hinata 5:b61f3f5b0fc8 9 }
yukari_hinata 5:b61f3f5b0fc8 10
yukari_hinata 5:b61f3f5b0fc8 11 // 末尾に新データを追加
yukari_hinata 5:b61f3f5b0fc8 12 memcpy(&(sample_queue[DIM_SIGNAL * (LEN_DATA_SEQUENCE-1)]), new_data, sizeof(float) * DIM_SIGNAL);
yukari_hinata 5:b61f3f5b0fc8 13 }
yukari_hinata 5:b61f3f5b0fc8 14
yukari_hinata 5:b61f3f5b0fc8 15 // ファイルのオープンチェック(いや、fopenをラップしろよサーセン)
yukari_hinata 2:20ecfe6edd71 16 void check_file_open(FILE* file_p, const char* file_name)
yukari_hinata 2:20ecfe6edd71 17 {
yukari_hinata 5:b61f3f5b0fc8 18 // static int open_count;
yukari_hinata 5:b61f3f5b0fc8 19 // printf("[cnt:%d] %s : %p \r\n", open_count++, file_name, file_p);
yukari_hinata 2:20ecfe6edd71 20 if ( file_p == NULL ) {
yukari_hinata 2:20ecfe6edd71 21 fprintf( stderr, "Error : file %s open faild. \r\n", file_name );
yukari_hinata 3:5add3759e08a 22 fflush( stderr );
yukari_hinata 2:20ecfe6edd71 23 exit(1);
yukari_hinata 2:20ecfe6edd71 24 }
yukari_hinata 2:20ecfe6edd71 25 }
yukari_hinata 2:20ecfe6edd71 26
yukari_hinata 5:b61f3f5b0fc8 27 // データ系列ファイルの行数をmaxlineまで切り詰める
yukari_hinata 5:b61f3f5b0fc8 28 void truncate_data_file(int maxline)
yukari_hinata 2:20ecfe6edd71 29 {
yukari_hinata 2:20ecfe6edd71 30 FILE* dat_file_fp;
yukari_hinata 2:20ecfe6edd71 31 const char tmp_file_name[] = "/local/TMP_DAT.CSV";
yukari_hinata 3:5add3759e08a 32 int line, diff_line;
yukari_hinata 2:20ecfe6edd71 33 char trunc_buf_str[BUF_SIZE];
yukari_hinata 2:20ecfe6edd71 34 // 最初に現在の行数を数える
yukari_hinata 2:20ecfe6edd71 35 dat_file_fp = fopen( SEQUENCE_DATA_NAME, "r");
yukari_hinata 2:20ecfe6edd71 36 check_file_open( dat_file_fp, SEQUENCE_DATA_NAME);
yukari_hinata 2:20ecfe6edd71 37 line = 0;
yukari_hinata 2:20ecfe6edd71 38 while(fgets(trunc_buf_str, BUF_SIZE, dat_file_fp) != NULL) {
yukari_hinata 2:20ecfe6edd71 39 line++;
yukari_hinata 2:20ecfe6edd71 40 }
yukari_hinata 2:20ecfe6edd71 41 fclose( dat_file_fp );
yukari_hinata 2:20ecfe6edd71 42
yukari_hinata 2:20ecfe6edd71 43 // 切り詰め開始
yukari_hinata 5:b61f3f5b0fc8 44 if ( line > maxline ) {
yukari_hinata 2:20ecfe6edd71 45 FILE* tmp_fp;
yukari_hinata 5:b61f3f5b0fc8 46 diff_line = (line - maxline);
yukari_hinata 2:20ecfe6edd71 47 dat_file_fp = fopen(SEQUENCE_DATA_NAME, "r");
yukari_hinata 3:5add3759e08a 48 // rewind( dat_file_fp );
yukari_hinata 2:20ecfe6edd71 49 check_file_open( dat_file_fp, SEQUENCE_DATA_NAME );
yukari_hinata 3:5add3759e08a 50 tmp_fp = fopen( tmp_file_name, "w");
yukari_hinata 3:5add3759e08a 51 check_file_open( tmp_fp, tmp_file_name );
yukari_hinata 2:20ecfe6edd71 52 line = 0;
yukari_hinata 2:20ecfe6edd71 53 while(fgets(trunc_buf_str, BUF_SIZE, dat_file_fp) != NULL) {
yukari_hinata 2:20ecfe6edd71 54 line++;
yukari_hinata 3:5add3759e08a 55 if (line >= diff_line) break;
yukari_hinata 2:20ecfe6edd71 56 }
yukari_hinata 2:20ecfe6edd71 57 // diff_line以降をテンポラリにコピー
yukari_hinata 3:5add3759e08a 58
yukari_hinata 2:20ecfe6edd71 59 while( fgets( trunc_buf_str, BUF_SIZE, dat_file_fp) != NULL) {
yukari_hinata 3:5add3759e08a 60 fputs( trunc_buf_str, tmp_fp );
yukari_hinata 2:20ecfe6edd71 61 }
yukari_hinata 3:5add3759e08a 62
yukari_hinata 3:5add3759e08a 63 fclose( dat_file_fp );
yukari_hinata 3:5add3759e08a 64 fclose( tmp_fp );
yukari_hinata 2:20ecfe6edd71 65
yukari_hinata 2:20ecfe6edd71 66 // 更新
yukari_hinata 3:5add3759e08a 67 tmp_fp = fopen( tmp_file_name, "r");
yukari_hinata 2:20ecfe6edd71 68 check_file_open( tmp_fp, tmp_file_name );
yukari_hinata 3:5add3759e08a 69 dat_file_fp = fopen(SEQUENCE_DATA_NAME, "w");
yukari_hinata 2:20ecfe6edd71 70 check_file_open( dat_file_fp, SEQUENCE_DATA_NAME );
yukari_hinata 2:20ecfe6edd71 71 // 一時ファイルからコピー
yukari_hinata 2:20ecfe6edd71 72 while( fgets( trunc_buf_str, BUF_SIZE, tmp_fp) != NULL) {
yukari_hinata 2:20ecfe6edd71 73 fputs( trunc_buf_str, dat_file_fp);
yukari_hinata 2:20ecfe6edd71 74 }
yukari_hinata 2:20ecfe6edd71 75
yukari_hinata 2:20ecfe6edd71 76 fclose( dat_file_fp );
yukari_hinata 2:20ecfe6edd71 77 fclose( tmp_fp );
yukari_hinata 2:20ecfe6edd71 78
yukari_hinata 2:20ecfe6edd71 79 // テンポラリの削除
yukari_hinata 2:20ecfe6edd71 80 remove( tmp_file_name );
yukari_hinata 2:20ecfe6edd71 81 }
yukari_hinata 2:20ecfe6edd71 82 }