Kuroyagi飼育日誌

学んだことの備忘録

シリアル通信の基本

シリアル通信でデータを送信してくれるデバイスを作ります。

 

といっても簡単なもので、【記事1】をやります。

 

【記事1】

arduinopid.web.fc2.com

 

出来ました(笑)

 

試しにteratermでも見てみると

 

f:id:cocosuzu:20170311203929p:plain

 

こんな感じです。

 

これを使ってRubyとJavascriptでグラフを描く【その1】 - Kuroyagi飼育日誌

にてシリアルデータ送信機器として使いたいと思います。

Gitのお勉強【その1】

【記事1】を参考にGitの練習をしていきます。

 

【記事1】

liginc.co.jp

 

ふむふむ、内容は理解できます。続いては【記事2】で実際に触れてみます。

 

【記事2】

liginc.co.jp

 

なるほど、一応GitHubにリモートリポジトリを作成できたようです。

 

ただし、まだGitの実際の運用を実践していませんので続いては【記事3】にて実践的な練習をします。

 

【記事3】

liginc.co.jp

 

さらっと読んでみましたが、いきなり進み過ぎていて分かりません。もうちょっと簡単なものを探してみます。

 

以下のあたりをシンプルに学びたいです。

 

・バージョン更新の手順

・ブランチ?手分けしての並行開発の基本

 

ひとまずここまでです。

RubyとJavascriptでグラフを描く【その1】

会社でシリアル通信で受けたデータをリアルタイムで表示するプログラムをよく作ります。普段はVisual CやMatlabで作るのですが、先輩がRubyJavascriptで作っているのを見て便利そうだったのでお勉強します。

 

先ずはrubyでのデータ処理やらリアルタイムと欲張らずにjavascriptcsvファイルからデータを読み込んでグラフにするといった簡単な処理をやってみます。

 

そこで参考にしたのが以下の【記事1】です。

 

【記事1】

qiita.com

 

これは単純明快で直ぐに動きます!とても分かりやすく、複雑なことも書いてないので初心者には大変ありがたい解説です。

 

2分くらいで準備完了です!描けました!

 

f:id:cocosuzu:20170311140840p:plain

 

ただし、詳しい知識は皆無です…ajaxjavascriptのデータ処理などここから学んでいきたいと思います。

 

基本的にjsの描画処理、Rubyでデータの送受信、測定系の模擬簡易モデルについて抑えればいいと思いますので、以降は以下を課題としたいと思います。

 

javascript

・列数、行数を自在に操作

・プロット形式を棒グラフから他のにする

 

Ruby

csvファイルを一定間隔で保存していくRubyの処理

・外部装置からのシリアルデータ読み込み

 

【周辺】

・シリアルデータを送信する機器を作る(ArduinoRaspberry Piがお手軽だと思う)

 

また、そろそろGitをちゃんと使えるようにした方がよさそうなため、追加課題としてGitの実践練習も行います。

 

週末やること

やることリスト

■投資
経済指標まとめ
トランプ大統領の演説動画確認
3dプリンタ業界確認
再生医療市場調査
ビットコインの技術動向調査
前期投資計画確認

■技術
AD変換回路を使ったRaspberry Piのセンサ信号読み込み
LTsipiceを使えるようにする(LDのAPC回路シミュレート)
小規模発注システムの市場調査(Webアプリ開発向け)
Interfaceを読みつつ画像認識による物仕分けモデル計画確認
JavaScriptによるリアルタイムデータ表示スクリプト作成
MatlabでTektronicsのオシロスコープからUSBで信号取り込む方法確認
サーボ制御の基本を勉強
PDとアンプを組み合わせた光検出回路の基礎を勉強
スペクトラムアナライザの基本を勉強
USB機器の通信基礎の勉強
arduinoとPCのシリアル通信
温度計設計検討
フィードバック制御の復習と実験系の検討

■その他の学び
レアジョブ
ロシア語
バイオリン
キーボード
硬筆
デッサン

■日常
部屋の掃除
観葉植物探し
会社用ニットの長袖かベスト探し
カジュアル用白シャツ探し
ダニエルボブの鞄でいいものがないか探す
香水探し
音読
macのノート購入検討

Matlabによる信号処理【フィルタの作り方】

DSP(Digital Signal Processing)でフィルタを使う訳ですが、今の知識だとFIRとIIRどちらを選べばいいのかわからないのでお勉強します。

【記事1】のNI様のところに分かりやすく書いてあります。

【記事1】
IIRフィルタとFIRフィルタ - DIAdem 2012ヘルプ - National Instruments

とりあえず、今後の基準は以下の通りと考えておきます。

IIR
メリット: 係数が少ない/計算ボリュームが小さい
デメリット: 非線形位相応答
得意とする情報: 振幅

■FIR
メリット: 非線形位相応答
デメリット: 係数が多い
得意とする情報: 位相

こんなところです。

Matlabドキュメンテーションに【記事2】があるので、基本的には記事にそって進めていきます。

【記事2】
jp.mathworks.com


まずは信号を設定します。信号はMatlabのサンプルデータとして用意されているchirpを使います。信号は以下の通りです。

f:id:cocosuzu:20170304124209p:plain

さて、フィルタを作ります。

blo = fir1(34,0.48,chebwin(35,30));

がフィルタの係数を生成する関数です。fir1はウィンドウを指定してフィルタの係数を生成する関数で、引数の最後にはウィンドウを定義するchebwinがいます。この辺はひとまずwindow関数が選べますよという程度にとどめておきます。

続いてフィルタを適用するためにfilter関数に処理したいデータとフィルタの係数セットを渡します。

すると時間波形は以下の通りとなります。

f:id:cocosuzu:20170305133126p:plain

大きな信号が消えました。ぱっと見で変化は分かりますが、より分かりやすくするために周波数スペクトルを見てみましょう。

f:id:cocosuzu:20170305164639p:plain

上段がフィルタ無しの生データ、下段がフィルタを適用した後の信号です。2000Hz以上の主ピークたちがごっそりいなくなっています。

これでフィルタが適用できていることがよく分かります。



ここで一歩戻って今回どんなフィルタを作ったのか見てみましょう。freqz関数でフィルタ係数の特性を見ることが出来ます。先ほど作ったbloを見てみると…

freqz(blo,1)

f:id:cocosuzu:20170305164351p:plain

どこにも2000Hzとは書いてません。正規化周波数で書かれています。ただし、ここで言う正規化周波数は書籍などでよく見るサンプリング周波数を1とする正規化周波数ではなく、ナイキスト周波数を1としています。それで正規化周波数の単位には2 \pi rad/Samplingではなく \pi rad/Samplingと書かれているのですね。

サンプリング周波数は8192Hzであることから、その半分である4096Hzを1とするとfir関数で引数としていた0.48は1966Hzに相当します。この1966Hzがローパスフィルタの周波数となっているわけですね。

さて、大体【記事2】の内容が分かってきたところでフィルタを自由自在に作る方法に移っていきます。

ここで使うのがFDA(Filter Design and Analisit) toolです。これはフィルタの形状を見ながらちょちょいとフィルタを作るには便利なツールです。

先ずは、ここまでで扱ってきたchirpデータの周波数スペクトルを見直してみます。

f:id:cocosuzu:20170305170509p:plain

バンドパスフィルタで主ピークの両端を削るようなフィルタを作ってみましょう。となるとバンドパスフィルタの周波数を2700~3500Hzにします。

f:id:cocosuzu:20170305170750p:plain

こんな感じの画面が出てきますので、以下のように設定します。細かい数値は適当です。

f:id:cocosuzu:20170305171614p:plain

エクスポートしてワークスペースに係数ベクトルをNumとして出力します。これを先のbloの代わりに代入してあげればバンドパスフィルタとして処理されるはずです。

ただ、メインのスクリプトがclear allで変数を都度リセットするようにしているので、都度Numを生成してくれるように作成したフィルタをmファイルとして出力しておきます。Matlabコードを生成を選ぶとmファイルを作ってくれます。

% All frequency values are in Hz.
Fs = 8192;  % Sampling Frequency

Fstop1 = 2500;            % First Stopband Frequency
Fpass1 = 2700;            % First Passband Frequency
Fpass2 = 3500;            % Second Passband Frequency
Fstop2 = 3700;            % Second Stopband Frequency
Dstop1 = 0.001;           % First Stopband Attenuation
Dpass  = 0.057501127785;  % Passband Ripple
Dstop2 = 0.0001;          % Second Stopband Attenuation
dens   = 20;              % Density Factor

% Calculate the order from the parameters using FIRPMORD.
[N, Fo, Ao, W] = firpmord([Fstop1 Fpass1 Fpass2 Fstop2]/(Fs/2), [0 1 ...
                          0], [Dstop1 Dpass Dstop2]);

% Calculate the coefficients using the FIRPM function.
bpf  = firpm(N, Fo, Ao, W, {dens});
Hd = dfilt.dffir(b);

ここで、Fsはスクリプト内で共通なので削除しておいて、生成されたフィルタ係数をfreqzで見てみましょう。

f:id:cocosuzu:20170305172558p:plain

ちゃんと出来てますね。それでは先のbloの代わりにbpfを使いましょう。先ずは時間波形を見てみます。

f:id:cocosuzu:20170305172823p:plain

これだけだと生データと大きくは変わらないですね。続いて生データとBPF処理後の周波数スペクトルです。

f:id:cocosuzu:20170305174018p:plain

上段が生データ、下段がBPF後の周波数スペクトルです。

ちゃんと設計したとおり2500以下は-60dB、3700以上は-80dBになるようになっています。以上、Matlabにおけるフィルタ設計の基本でした。

結局FIRとIIRはまだどっちを選べばいいか聞かれたら答えられません。追々分かったら書いていきたいと思います。

最近買って便利だったもの

絵を描く用のイーゼルがホワイトボードを立てておくのに便利です。



f:id:cocosuzu:20170305153355j:plain

https://www.amazon.co.jp/gp/aw/d/B001WB3K7G/ref=yo_ii_img?ie=UTF8&psc=1



ちょっと剛性は弱いですが、うちの壁は画鋲とか刺さらないので、コンパクトで自立式となるとこの辺がいいかもしれないです。

今週の成績

f:id:cocosuzu:20170304094901p:plain

 

先週は以下の通りです。

 

f:id:cocosuzu:20170224203939p:plain

 

先週比+2.43%です。

 

ビットコインの相場はというとこんな感じです。

f:id:cocosuzu:20170304111749p:plain

1月の暴落は過熱からのトレンド戻し&オーバーシュートと考えられますので、16年8月くらいから上昇トレンドを維持しつつ、上昇率も徐々に増加傾向にあります。今も若干ながらトレンドより上にいるので、若干の押し目はあるかもしれません。10~20k円ほどの急落はあるかも知れませんが、このまま上昇していくのではないかという印象を受けます。このあたりはまだ数値的な売買条件を設けていないのですが、長期で上昇するものだとは思っています。それがいつまで、どのくらいになるのかを見積もるためにもお金の仕組みと歴史、ビットコインの市場動向を調べる必要があります。

 

ちなみに、現在保有しているビットコインは21日前に取引を始めて+17%となっています。ちなみに会社の先輩は平均買い付け価格9万円なので、167%とかなりの運用成績になっています。車買えるくらいはつぎ込んでると言ってたので500万とすると…833万の+333万!ワオ!

 

そして先輩は100、1000倍とかになるんじゃない?と言ってるので、5億円!50億!

 

と、取らぬ狸の皮算用な上に人の話というどうしようもない感じですが、そんなドリームもあるということです。

 

私はまだまだ投入資金の規模が小さいので、せっせと買い増ししていきたいところです。

 

そうそう。トランプさんの演説見てなかったので見てみました。

www.youtube.com

www.nikkei.com

 

正しい移民は支援する。

法人税が下がる。

防衛予算拡大。

教育予算拡大。

戦う必要があるときは戦う。

利益が一致すれば仲良くなる。

 

こんなところが頭に残りました。移民に関してはロジックの通じない頑固親父の意見風味だった案も、正しい移民は支援すると表明したことは現実的な案に軌道修正されました。

 

トランプ大統領って選挙前と直後あたりは好き放題と言われていましたが、本質としてはアメリカを良くしたいというスタンスは変わっていないように感じます。手法が問題なだけ?笑

 

やりたいことが頭の中にあるけど、方法を知らないからまずはキャッチーでそれっぽい刺激的な方法をババン!と出す。そして、それに対する反応やらを見て現実的な方法を模索する。極論を投げかけて議論を加速させるような手法でこれはこれで良さがあると思います。

 

ダウのほうもついに21000ドル越えと素敵な勢いです。

f:id:cocosuzu:20170304104848p:plain

 

日経平均は19400円あたりでもみ合っていますね…

f:id:cocosuzu:20170304105144p:plain

 

一方マザーズはというとスルスル伸びていっています。

f:id:cocosuzu:20170304105034p:plain

 

小型株に徐々に資金が流入してるのでしょうか。これが海外勢の影響か確認したいです。市場の外国人の売買代金をちゃんと確認したことがないので、調べてみます。なぜならエリアリンクとかは外国人持ち株比率も株価上昇のファクターだと思うからです。