Weather casting with Machine Learning (SVM and SRNN).
Dependencies: EthernetInterface GraphicHandler NTPClient SRNN SVM SensorModule mbed-rtos mbed
main_util.cpp@6:29d393d430d0, 2015-02-22 (annotated)
- 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?
User | Revision | Line number | New 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 | } |