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



相変わらず、Arduinoでクロマチックチューナー。

おかしな処理をしちゃう原因を探るために、計算途中
の変数をダンプとって、グラフ化してみることに。

まずは、440Hzの信号を入れた場合。



うん、うん。想定どおり。バッチリ。ちなみに、いくつか
の線がごちゃごちゃ重なるように表示されているけど、
1本1本がそれぞれ何cent分に相当する量をずらした場合の、
シフト後の波形。それぞれ、32、16、8、4、2、1、0、-1、
-2、-4、-8、-16、-32centずつ、ラの音(440Hz)から
ずらす想定の波形。

丁度真ん中で440Hz±0centの波形と重なってる状態。
当然、このロジックを通した結果は、440Hz±0centが
一番近いよ、と表示されるわけ。よし、よし。


続いて、他の音程も眺めてみる。F#(369.99Hz)。



おや?上下反転してる波形が出てくる…。

F(349.23Hz)。



おやおや?

C#(277.18Hz)。



おやおやおや?

C(261.63Hz)。



おやおやおやおや?


なんとなくわかってきたような…。

一部の波形が正負反転しちゃってるから、自己相関
取ろうとしても、真逆の位相なら相関は真逆に
なっちゃうよな。

んで、実際にDDSファンクションジェネレータから
読み込んだ波形での結果も、これらの「反転」
しているところだけが拾えてないっていう事実と
符合することが確認できた。
(でも、Fの音は、単に反転してるだけじゃない
 ような感じがあるな…ちょっと後回し)

さらに内部変数を色々ダンプしてみて、反転しちゃう
計算がどこから来るのか、電卓使って確認中。

電卓で計算してみると、確かに反転するような波形
を吐き出しているみたい。unsignedとか、キャスト
とか、桁あふれとか、そんな単純なミスっていう
感じではなさそうだなぁ…

440Hzはうまく行ってて、他の周波数は反転したり
しなかったりっていうのは、何故なんだろう?

やっぱ、ちゃんとしたデバッガ環境が欲しいな。
シリアルデバッグは厳しいものがあるよなぁ。

もうちょっと細かく覗いてみないとな。反転しちゃう
条件がわかれば、一気にロジックは完成ってことに
なりそうなんだけどな。

一つの取っ掛かりとしては、0centずらす(つまり
全然シフトしない)状態では、反転するケースが
無いっていうことかな。
それ以外のcent値では、ことごとく反転している
ことを考えると、そこが糸口になりそう。



http://headlines.yahoo.co.jp/hl?a=20140118-00000001-jct-bus_all
660ccのケータハムセブン。だいぶスペックが
わかってきた感じ。

80PSはナカナカ。だけど、確かターボって言ってた
ような気がするな。NAで出して欲しいんだけどな。

お値段も結構だな。でも、ちゃんと軽枠なんだな。




コメント ( 0 )