Weather casting with Machine Learning (SVM and SRNN).

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

Committer:
yukari_hinata
Date:
Sun Feb 15 09:28:23 2015 +0000
Revision:
0:f6cdb984f638
Child:
1:8538381cae81
modified (add setup modules)

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