Weather casting with Machine Learning (SVM and SRNN).

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

Committer:
yukari_hinata
Date:
Mon Feb 16 07:53:45 2015 +0000
Revision:
1:8538381cae81
Parent:
0:f6cdb984f638
Child:
2:20ecfe6edd71
changed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yukari_hinata 0:f6cdb984f638 1 #include "main.hpp"
yukari_hinata 0:f6cdb984f638 2
yukari_hinata 1:8538381cae81 3 LocalFileSystem *local_fs; // マウントポイントを定義(ディレクトリパスになる)
yukari_hinata 0:f6cdb984f638 4
yukari_hinata 0:f6cdb984f638 5 // 時間(global)
yukari_hinata 1:8538381cae81 6 time_t global_time; // 現在時刻
yukari_hinata 1:8538381cae81 7 Mutex time_mutex; // 時間のMutex
yukari_hinata 0:f6cdb984f638 8 // Pointer to Class instance (global)
yukari_hinata 0:f6cdb984f638 9 SRNN *srnn;
yukari_hinata 0:f6cdb984f638 10 MCSVM *mcsvm;
yukari_hinata 1:8538381cae81 11 SensorModule *sensor_module;
yukari_hinata 1:8538381cae81 12 GraphicHandler *graphic_handler;
yukari_hinata 1:8538381cae81 13 // ネットワーク関係(global)
yukari_hinata 1:8538381cae81 14 EthernetInterface eth_if;
yukari_hinata 1:8538381cae81 15 TCPSocketServer http_server;
yukari_hinata 1:8538381cae81 16 NTPClient ntp_client;
yukari_hinata 0:f6cdb984f638 17
yukari_hinata 0:f6cdb984f638 18 // 系列データ
yukari_hinata 0:f6cdb984f638 19 float* new_seqence_data; // 現在の(一番新しい)系列データ
yukari_hinata 0:f6cdb984f638 20 float* new_predict_data; // 現在の予測結果
yukari_hinata 0:f6cdb984f638 21 int* new_predict_weather; // 現在の予測天気
yukari_hinata 0:f6cdb984f638 22 float* new_predict_probability; // 現在の予測天気の確率(厳密には,確率ではない...)
yukari_hinata 0:f6cdb984f638 23 FILE* seqence_data_fp; // 系列データのファイルポインタ(SRNNと計器の記録に使う)
yukari_hinata 0:f6cdb984f638 24 FILE* predict_data_fp; // 予測データ
yukari_hinata 0:f6cdb984f638 25 Mutex seqence_data_mutex; // 系列データのMutex
yukari_hinata 0:f6cdb984f638 26 Mutex predict_data_mutex; // 予測データのMutex
yukari_hinata 0:f6cdb984f638 27
yukari_hinata 0:f6cdb984f638 28 // 計器/機械学習スレッド
yukari_hinata 0:f6cdb984f638 29 void read_and_predict_thread(void const *arg)
yukari_hinata 0:f6cdb984f638 30 {
yukari_hinata 0:f6cdb984f638 31 // 1. 定期的(周期はmainが指定)にセンサーから読み出す
yukari_hinata 0:f6cdb984f638 32 // 2. 記録(記録ファイルが長くなっていたら, 削る)
yukari_hinata 0:f6cdb984f638 33 // 3. SRNNに学習データを読み込ませる.(Mutexを使う)
yukari_hinata 0:f6cdb984f638 34 // 4. SRNNの学習/予測結果から, MCSVMで天気識別
yukari_hinata 0:f6cdb984f638 35 // 5. 予測結果のセット, 書き込み
yukari_hinata 0:f6cdb984f638 36 }
yukari_hinata 0:f6cdb984f638 37
yukari_hinata 0:f6cdb984f638 38 // 描画スレッド : 優先度低め
yukari_hinata 0:f6cdb984f638 39 void draw_thread(void const *arg)
yukari_hinata 0:f6cdb984f638 40 {
yukari_hinata 0:f6cdb984f638 41 // 1. 1分に一回, 時間を取りにいく
yukari_hinata 0:f6cdb984f638 42 // 2. 描画更新 <- 学習中は止めたい...
yukari_hinata 0:f6cdb984f638 43 }
yukari_hinata 0:f6cdb984f638 44
yukari_hinata 0:f6cdb984f638 45
yukari_hinata 0:f6cdb984f638 46 // ネットワークスレッド
yukari_hinata 0:f6cdb984f638 47 void network_thread(void const *arg)
yukari_hinata 0:f6cdb984f638 48 {
yukari_hinata 0:f6cdb984f638 49 // 1. たまに時間を更新
yukari_hinata 0:f6cdb984f638 50 // 2. ポート80のListen <- 学習中は止めたい...
yukari_hinata 0:f6cdb984f638 51 }
yukari_hinata 0:f6cdb984f638 52
yukari_hinata 0:f6cdb984f638 53 // エントリ. スレッドの生成, そして待つ
yukari_hinata 0:f6cdb984f638 54 int main(void)
yukari_hinata 0:f6cdb984f638 55 {
yukari_hinata 0:f6cdb984f638 56 set_new_handler(no_memory);
yukari_hinata 1:8538381cae81 57 local_fs = new LocalFileSystem("local");
yukari_hinata 0:f6cdb984f638 58 setup();
yukari_hinata 0:f6cdb984f638 59 printf("EXIT SUCESS!! \r\n");
yukari_hinata 0:f6cdb984f638 60 return 0;
yukari_hinata 0:f6cdb984f638 61 }