「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ



http://arduino-japan.com/article/604
この、木の鏡。天才だな。どんな風に色を変えて
いるのかなぁと思ったんだけど、角度を弄って
光の当たる角度で濃淡を表現してるみたいだな。

こんな方法も有るんだな。スバラシイ。実物を
眺めてみたい…



Arduinoを使ったCNC関係の情報が色々あった。
http://blog.protoneer.co.nz/arduino-cnc-shield/
http://blog.protoneer.co.nz/arduino-cnc-controller/
Gコードが動くインタプリタを内蔵したコントローラ
で、PC無しで駆動できるのか。前に見たかな?

PCから動かす方が、なんとなく画面でかいし使いやすい
んじゃないかなぁと思ったりするんだけど、動いてる
間は殆ど触らないだろうから、単体で動くっていうのも
いいかもしれないな。

コントローラだけじゃなく、筐体部分がお気楽に手に
入るようになるといいんだけどな。


そういえば、CNCって言えば、3Dプリンタの仕組みと
いうか、リクツから考えれば、そろそろ100円ショップ
でグルーボンド買ってきて、ステッピングモータを
組み合わせて、超安い3Dプリンタを自作しちゃう人
が出てくる頃だと思ってるんだけど、調べてみた。

http://www.hirax.net/diaryweb/2013/03/09.html
おぉ。hirax.netの平林さんのところで、グルーボンド
で3Dプリンタペンに使ってた。ってことは、やはり
時間の問題だな。

グルーボンドで最大の問題は、グルーボンドの
送り出し量と、もしかしたら温度調節かな。




コメント ( 0 )




AMDFをどんなロジックで書いたら、精度と速度と
メモリ量をイイカンジに出来るかを調べるために、
昨日の表計算で作ったシートをさらにいじくって、
スイートスポットを探ってみる。

とりあえずソフトを起動したら、
http://www.openoffice.org/ja/download/?utm_source=AOO3_4_1_ja&utm_medium=Client&utm_campaign=Upgrade
OpenOffice4.0.0が出てるらしい。大きく数値が変わって
いる場合は、人柱モードになりそうなので、どうしようか
迷いつつ、入れてみた。500個以上のバグフィックス
が盛り込まれているらしいので。

でも、画面が1ドットずれてゴミが残る的な微妙な
バグは相変わらず残ってるみたい。まぁ、表示の
問題だけだろうと思うので、そのまま使ってみる。


残念なお知らせ。グラフ描いて、そのドローの
メタデータをグラフィックツールにコピペして
みると、座標軸の文字が化けた。単なる数字を軸に
当てていたのに、なんだかよくわかんない西暦の日付
になっちゃう。仕方ないので、画面キャプチャソフト
使ってグラフィックを取り込むことにする。

まぁ、大きなバージョンアップは、大体バグってる
よね。


とりあえず、ドミソラの信号に対して、半音ごとに
比較周波数を当てながら、誤差計を計算していって、
どんな風になるのかをグラフで可視化してみる。
可視化することで全体的な「傾向」がつかめるはずだ。

で、やってみたらこんな感じに。



うん。およそ想像していたような結果になってる。
これだとちょっとごちゃごちゃしてて解りにくいと
思うので、ソの音を3オクターブ分取り出すとこんな。



色が似ててわかりにくいけど、「青」が196Hzのソの音
で、当然196Hzだけで誤差極小。
「小豆色」が392Hzのソの音で、392Hzと196Hzの2箇所で
誤差極小に。
「紫」が784Hzのソの音で、784Hzと392Hzと262Hzと196Hz
で誤差極小に。

紫の784Hzについてだけ取り出してみると、こう。


知りたいのは、この図の一番右側の「誤差極小」となる
周波数。ここで問題が生じる。つまり、1波形だけ
ずらした場合の「ずらし量」が知りたいんだけど、
周波数が2倍(波長は半分)の場合は、2波形ずらした
ところも一緒に。さらに高い周波数だと、もっと
たくさんの点で誤差が極小になっちゃう。


誤差極小になる点は、この図の様に複数個所で出てくる
んだけど、どうしたら、それが一番右側の周波数って
ことが判るのか。実際に計算した値は、誤差「数十」程度
の数値で、必ずしも右の数値が一番小さいわけじゃない。
単なる誤差極小となる個所を拾うロジックだと、この
4箇所のうちどこが拾われるかが、運を天に任せる状態
になっちゃう。

んで、ココでグラフを描いた意味が出てきた。図中の
「誤差極小」地点4箇所を見比べてみると、拾いたい
ところは、他のところに比べると、開く角度が「広い」
のが判る。それを利用。


数学得意な人だと、多分これらの点(離散値)を
滑らかに(微分可能な形に)補完して、2回微分して、
その値が「プラス値」で一番小さいところ(下への
出っ張りが緩やかなところ)を選べばいい、と
考えるであろうところ。


まぁ、そうなんだけど、そんな補完すると計算時間
もかかるし面倒。その考え方だけ利用することにして、
もっと簡単な方法を考えてみる。2回微分の代わりに、
その両隣のデータを利用する。こういう感じ。

↓これが抽出したいデータ。


↓これが抽出したくないデータ。


図中の「茶色」のバーの長さに注目。どちらも真ん中の
バーの長さ(誤差の大きさ)は同じくらい小さいん
だけど、その両端の誤差も含めて「3つの茶色」を足して
から比較すると、このソの音に限らず、どの場合でも
必ず上の状態の点が「誤差最小」となる。よし、使える。

つまり、トンガリがきついところは、両脇のデータの
誤差が急に大きくなるので、それまで含めると簡単に
抽出が出来るわけ。
もちろん、極小点付近に限らず、他の点を含めてもこの
「両側も合算」した値で最小値をとる点が「お目当ての
音程」となるわけ。2回微分とか使うことなく、単に
3つの数値の足し算でイイカンジの弁別が可能。


この結果を使って、半音単位の音を正確に同定できる
ことはなんとなく判った。シメシメ。


こんな感じで、どの音程付近の音か判ったら、次は
その音の周辺で、1cent単位で音程を絞り込んでいく
って感じにすれば良さそうだな。最小周波数から最大
周波数までを、1cent単位で全部舐めていくという
必要はないわけ。


さらに、「左右の誤差情報」も一緒に評価するって
いう方法は、1cent単位の微妙な誤差を抽出する場合
でも、差分を明確に洗い出しそうなので、そっちでも
使うことにしたいな。


大体作戦が決まったので、あとはメモリ量の削減と
処理時間の削減だな。

処理時間の削減の一つは、この「半音単位」で
一旦絞り込んでおいて、その後で微小なズレを抽出
するっていう作戦でいいと主運だけど、まだまだ
手を抜けるところを抜かないと、タイムラグが
大きくなり過ぎそう。

もうちょっと詰めていこう。


あと、シミュレーションしてみてわかったんだけど、
振幅が最大付近なら1cent単位で分離出来るんだけど、
音量が下がっちゃうと、ダイナミックレンジが狭く
なるせいで、1cent単位は厳しい…

http://brown.ap.teacup.com/nekosan0/1458.html
以前探ったような、「対数アンプ」についてちゃんと
考えておかないと駄目だろうな。



http://headlines.yahoo.co.jp/hl?a=20130729-00000101-mai-soci
この半々のクワガタ。ガッチャマンを思い出した…


http://www.switch-science.com/catalog/1318/
スイッチサイエンスに、電子ペーパーのシールド
なんて有ったのか。
http://www.aitendo.com/product/7075
aitendoにもこの間電子ペーパーが出てたな。



コメント ( 0 )




引き続き、AMDFを使ったピッチ計算で色々もがく。

いきなりプログラム組むとナニなので、例によって
表計算ソフトを使って数値シミュレーションしてみる。


作戦は、ADCから512点のデータを40000spsで正弦波を
サンプリングした状態をシミュレート。コイツを任意の
周波数に該当する時間分だけシフトしてみて、それが
元の波形と比較してどのくらいの誤差になるのかを
計算してみる。

アレコレ考えながら、とりあえずワークシートが出来た。


とりあえず、「補完」を行わずに、1サンプルは1サンプル
として整数値単位でシフトさせてみた結果。

220Hzで計算してみると、確かに丁度220Hz付近で
誤差が最小値になることを確認。

続いて440Hzの場合。440Hz付近の4つの周波数(438
~441Hz)で同一の最小値になった。


そう。シフトが整数単位(セル単位)だから、四捨五入
の結果、同じセル分だけずれたところを参照しちゃう
んだよな。これだと、1centはとても分離できないという
ところは予めわかってたところ。

とりあえずはココまで。


んで、この後は、整数単位ではなく、端数分を使って
按分することで、セル以下の数値に補完(直線補完)を
掛けてみるだな。

数値的にはきっと妥当な値まで追い詰めることがが出来る
だろうけど、問題は、計算速度に影響する「計算回数」
だな。

どうやったら計算速度を下げずに精度を保てるか。

シミュレーションで、手替え品替え、追い込んでいって
みよう。それができれば、Arduinoならすぐにスケッチに
落とせるだろう。


バイナリサーチ的な演算で追い込んでいけるといいんだ
けどなぁ。純粋な正弦波ならともかく、ノイズ混じりで
倍音混じりの信号となると、その手が通じるのかどうか…

あと、440Hzの波形を220Hz分だけシフトさせてみると、
当然だけどピッタンコ合っちゃうんだよな。(丁度
2波形分に相等するから)
こういうの、どうやって区別付けたらいいのかも、
一緒に考えておかないとな…。




コメント ( 0 )




昨日に続いて、AMDF。Arduinoでウクレレ用の
クロマチックチューナーを作っちまおうという
作戦の続き。

http://deambulatorymatrix.blogspot.ca/2010/11/digital-chromatic-guitar-tuner-2008.html
例によってこちらの文章とか参考にしつつ、処理を
行うためのメモリ量とか、計算回数とか、精度とか、
モロモロをフィッティングさせるための基礎数値を
悶々と計算してみる。

半音ごとに6%で、誤差を1centと仮定して、およそ200Hz~
800Hzの間で各音を同定できるように、という計算をする
としたら、一番精度が必要になる800Hzのときに、およそ
1.4Mspsでサンプリングすると、1centに収まると出た。


…このままじゃ駄目。Arduino単体はおろか、外付けの
ADCを搭載しても、ADCが追いつかない。ってことで、
1centを何とかするんなら、別の方法を考えないと。
例のサイトでも触れられている「補完」をつかって、
データ処理で周波数の細分化が出来れば、なんとか
なりそう。とはいっても、当然データ処理で無いデータを
捏造するってことは、限度があるはず。

各サンプリングデータを線形補完するとして、何倍くらい
まで補完によって精度が得られるのか。

例のサイトを参考にしてみると、440Hzくらいで2cent
くらいの精度みたい。んで、サンプリングレートを
上げてやれば、もう少し改善できるはず。メモリ量を
もう少し増やせば、さらに改善できるはず。

色々と計算してみた結果、40000spsでサンプリングして、
512個のバッファを構えると、隣り合うサンプル同士を
13.67個に分割して補完すると、1cent誤差と出てくる。
丁度キリのいい16個とかって考えておけばいいかな。

あとは補完ロジックの計算にしたがって、どのくらい
ずらすと自己相関が最大になるのかを計算してやれば、
1波形の周期が求まるので、逆数とって周波数…と。

理論上は、これで1centまで追い込めるんだけど、
真面目に計算しようとすると、7000回×1波形分の
ループ計算を行わないといけないので、もっと手を抜く
方法を考えないと、レスポンスが悪くて話にならない。

つまり間引き方法なんだけど、精度を下げずに間引き
をするのに、いい方法はどれかな…って感じだな。

明確に一つは思いついてるんだけど、それだと処理時間
がどうかなぁ…
とりあえず、組んで、動かしてから考えるか…


http://headlines.yahoo.co.jp/hl?a=20130726-00000000-jij_afp-int
オイラはネコアレルギーじゃないけど、この研究が
すすめば、世界中のネコファンにうれしいお話だな。


http://zasshi.news.yahoo.co.jp/article?a=20130726-00000009-pseven-soci
あぁ。むしろ「何がやりたいの?」って、直接聞いて
みてくれればよかったのにな。
それにしても、
  「365日24時間、会社のことを考えるのが
   当たり前だろ、社畜どもめ」
と言ってたお方が、その舌の根も乾かぬうちに、
選挙ごっこに現を抜かして遊んでるんだから、
所詮その程度の存在なんだよな。コイツは。

(当たり前だけど、オイラは比例代表についても
 自民なんぞに一票も入れる気無し。民主は歴史
 から忘れ去られつつある政党なのは自業自得として、
 二大政党制を理想とするおいらとしては、それに
 代われる対立政党が出来る日を待っているので)

なんでこんなのを公認したんだろうねぇ…


http://www.kumikomi.net/archives/2013/07/rp27evca.php
こんなのがあるよ!って、メールが来たんだけど、
これって、いわゆるCQ出版関係なの?

見た目はアレだけど、フレーム構造のボデーだし、
足回りはチューンできるし、こういうの、実は
大好き。

21万かぁ。遊びたいなぁ…。すげぇ楽しそう…。
オイラ、こういうminimalなメカニズムって、大好き
なんだよなぁ…



コメント ( 0 )




http://www.nicovideo.jp/watch/sm21406058
久々にゲーグラに新しいムービー。100分を越える
超大作。とはいいつつ、ダウンロード始まらないし、
2時間近いのを今見てる暇がないので、また後日。


例によって調べ物。以前も触れたと思うけどこのサイト。
http://deambulatorymatrix.blogspot.ca/2010/11/digital-chromatic-guitar-tuner-2008.html
Arduinoのクロマチックギターチューナー。
周波数をかなり正確に把握するための処理内容を
眺めなおす。

ザックリ処理内容を眺めてみて、頭の中で必要メモリ
とサンプリングレートと計測される周波数誤差を
ザックリ計算しなおしてみる…。

単純計算では、とても1cent単位の誤差には届かない
はずだなぁ。一桁以上狂いそうなんだけど…。どう
やってるんだろうと、さらに読み直す。

ほう。ずいぶん前に読んだから、すっかり忘れて
たけど、直線補完を掛けて、サンプルとサンプル
の間のデータを作り出してたのか…。それでどの程度
に出来るんだろうなぁ?

AMDF(Average Magnitude Deference function)
について、あらためて他のサイトも眺めなおす。

http://d.hatena.ne.jp/ku-ma-me/20120122/p1
なんか面白いゲームになってる。

http://n-horita.blogspot.jp/2010/09/amdf.html
ここは、Pythonのサンプルソース(関数のみ)が
ある。

まぁ、ロジック自体は単純なんだけどね。あとは
補完のロジックと、誤差蓄積計算のしかたで、
どれだけ速く計算できるかだよな。

FFT使うのと、AMDF使うのと、ドッチが高レスポンス
にできるかなぁ。実験だな。あとでプログラム書いて、
実際に信号入れて試してみよう。


http://www.youtube.com/watch?v=yh5stfyitRw
CNC旋盤だからなのか。途中まで、手動の旋盤で
こんなに綺麗な曲線をすばやく正確に制御してる
のかと思った…。びびった。それにしても、仕上がり
はピカピカで超きれい。


https://github.com/carlosgs/Cyclone-PCB-Factory
この基板パターン削りだすCNC旋盤もいいな。
Z軸方向のゆがみを予めセンシングしておいて、
それを加味してパターンを切削で削りだす…
1台欲しい。


http://page6.auctions.yahoo.co.jp/jp/auction/f130797581
PC-6601。説明文しょうが熱い!!! P66愛が
ひしひしと。


http://www.youtube.com/watch?v=cd2-vsTzd9E
自転車用自動変速機。電気制御とかは行ってない
みたいで、トルクセンシング型っぽい。

トルクが掛かったらギヤ比を落とすみたい。
でもなぁ、速度検知も混ぜないと、速度が出てる
時にさらに踏み込んで加速しようとすると、
ギヤ比が落ちて困ったりしないのかな?


http://headlines.yahoo.co.jp/hl?a=20130725-00000369-yom-soci
警察って、そんなに暇なのかな?平和で暇って
いうならまだいいんだけど、携帯片手の自転車
とか取り締まってくれないかな。

さっきも、片手の携帯に夢中になってる女子学生(?)
の自転車が、狭い道を無効から結構なスピードで
走ってきて、ギリギリでぶつからなかったんだけど、
「すみませーーん」とか言って、そのまま携帯片手
で逃げてったんだよな。ああいうの、片っ端から
しょっ引いて、麻雀の掛け金よりも違反金がっぽり
稼げばいいジャン。

んで、その直後におっさんが携帯ポチポチ操作
しながら走ってった。

ちなみに、少し前には、同じく携帯片手の女子学生
が正面から走って来て、(こっちが危険を察知して
ブレーキ掛けて止まったところに)ノーブレーキで
突っ込んできたこともあったな。さすがにイカンこと
したと自覚したようで、すごい勢いで逃げてった。

それでも、自分だけは大丈夫…とか信じてるんだ
ろうな。



コメント ( 0 )



« 前ページ