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



http://www.kurims.kyoto-u.ac.jp/~ooura/fft-j.html

例のC言語用FFTライブラリを、実際に弄って、パラメタ
の指定の仕方によって、意図した結果が得られるかを
確認してみることに。



いろいろ探ってみると、

http://geisterchor.blogspot.jp/2011/04/fft_16.html

こちらに、例のFFTライブラリを使ってみた結果がリポート
されているので、その情報を頼りに、Ubuntu環境下でgccで
まずは動かしてみることに。





gccを久々に使ったので、コンパイルでいろいろ手間取った。

もともとのライブラリのmakeファイルの中身をすっ飛ばして
使いたかったので、上記のサイトのページで示されている
ヘッダファイルを利用させていただいた。

さくっとコンパイル通るようになった。ありがたい。

このヘッダファイルを使わせていただきつつ、64サンプル
の場合と、256サンプルの場合を使って、あるデータを
ぶっこんだら、想定どおりの結果が出てくるのかを確認
してみる。




まず、実験に使ったプログラム。64サンプルから。

上記のサイトのプログラムでは、mallocで配列のエリアを
確保してるんだけど、出来ればmalloc使わずに済ませたい
ので、固定サイズで割り当てするように変えたりとか、
いろいろ弄って、最小限のコンパクトなプログラムに
したのがこれ。
(例によって、このブログの仕様により、include文など
 の不等号マークを全角文字に置き換えてあります)


//  gcc fftsg.c myfft64.c -lm -o myfft64 //

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "./fftsg.h"

#define FS 6400  // サンプリング周波数
#define LEN 64  // 信号長 == FFT点数
#define N (LEN * 2)  // データ個数(実数、虚数)
#define F0 500  // 正弦波周波数


void outdata (char *title, double *a) {
  int i;
  
  printf("%s\n",title);
  printf("No , real , imaginal , log10\n");
  for (i=0; i<LEN; i++) {
    printf("%d , %f , %f , %f\n",
    i, a[i*2], a[i*2+1],
    10.0*log10(a[i*2]*a[i*2] + a[i*2+1]*a[i*2+1]) );
  }
  printf("\n");
}


int main () {
  int ip[8 + 2]; // sqrt(64) + 2
  double a[N];  // points * 2
  double w[LEN]; // points

  int i;

  // generating data
  for (i = 0; i < LEN; i++) {
    a[i*2] = sin(2.0 * M_PI * i * F0 / FS);
    a[i*2 + 1] = 0.0;
  }
  
  /* display original data */
  outdata("*** input data ***", a);

  /* do fft */
  ip[0] = 0.0;
  cdft(N, -1, a, ip, w);

  /* output result */
  outdata("*** fft result ***", a);
}



プログラム中の、配列「a」に初期値としてぶっこんでる
正弦波が、FFTを掛けたいデータ。実数→虚数の順に、
64組のデータを入れておけば、FFTがかかる。
(通常に使うときは、実数のところにADCのサンプリング
 データを入れて、虚数のところに0を入れておけばok)


結果は、標準出力に出してるので、これをパイプでファイル
に繋ぎ換えて、表計算ソフトでグラフにする。

入力データ。サンプリング周波数6400sps、データの正弦波
は500Hzという前提で、64サンプル分。青が実数、橙が虚数。




FFT掛けた結果。



左下のとんがりが、正の周波数分の出力。ちょうど500Hzの
ところにピコンと立つ。
右上のとんがりは、負の周波数分。

これらのデータを、実数、虚数それぞれを平方和して
平方根とれば、各周波数成分の量がわかる。




さらに256サンプルも試してみる。


プログラム。ほとんど同じだけど、定数だけ調整。

//  gcc fftsg256.c myfft.c -lm -o myfft256 //

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "./fftsg.h"

#define FS 6400  // サンプリング周波数
#define LEN 256  // 信号長 == FFT点数
#define N (LEN * 2)  // データ個数(実数、虚数)
#define F0 500  // 正弦波周波数


void outdata (char *title, double *a) {
  int i;
  
  printf("%s\n",title);
  printf("No , real , imaginal , log10\n");
  for (i=0; i<LEN; i++) {
    printf("%d , %f , %f , %f\n",
    i, a[i*2], a[i*2+1],
    10.0*log10(a[i*2]*a[i*2] + a[i*2+1]*a[i*2+1]) );
  }
  printf("\n");
}


int main () {
  int ip[16 + 2]; // sqrt(256) + 2
  double a[N];  // points * 2
  double w[LEN]; // points

  int i;

  // generating data
  for (i = 0; i < LEN; i++) {
    a[i*2] = sin(2.0 * M_PI * i * F0 / FS);
    a[i*2 + 1] = 0.0;
  }
  
  /* display original data */
  outdata("*** input data ***", a);

  /* do fft */
  ip[0] = 0.0;
  cdft(N, -1, a, ip, w);

  /* output result */
  outdata("*** fft result ***", a);
}



入力のデータ256サンプル分。



サンプル数が4倍になっているので、取り込まれている波の
数も4倍になっている。(サンプル周波数6400spsとデータ
となる正弦波の周波数500Hzはおなじまま)


結果は、こう。




周波数分解能が高くなってる分、とんがりが細くなってる。
けど、当然ながら500Hzのところにピコンと立ってる。





うん。できた。普通にFFTができる。ただ、このライブラリ
には、窓関数の処理が付いてないので、その辺は独自に処理
する必要有り。

キリのいい周波数じゃないと、窓掛けずにFFTすると、
エンベロープが広がってしまうのは、普通のFFTといっしょ。





というわけで、どこにどんなパラメタを指定すれば、
どんな結果になるのかは判った。

あとは、この浮動小数点処理のまま、mbedにぶっこんだら、
十分な処理速度で処理できるのかが問題かな。

うちにあるSeeeduino Archは、FPUなんて搭載してなかった
よなぁ。たしか。


あと、平方和の平方根も、FPUなしで処理すると、すんごい
時間かかるんだよな…

Nulceoシリーズで、FPU搭載してる(かつmbedで有効化が
されてる)のって、あるのかなぁ?



できればやっぱ、整数処理にして、開平なんかもテーブル
処理したいところなんだけどな。
ArduinoのFFTライブラリは、その辺よく出来てるんだよな。



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




Ubuntu環境で、シリアルログインとかに使える
ターミナルソフト、探してみたら、gtktermって
いうのがあるみたい。

http://linuxandxx.blog.fc2.com/blog-entry-34.html

ってことで、とりあえずインストールして、起動
してみた。

シリアルのdialoutグループが自分のユーザに付いてない
からか、エラーが出るので、権限付与するなりしないと
いけないみたい。dialoutグループについては、まぁ、
いつもの感じなので、ぱぱっとやって、USBシリアル
変換基板をつないでみる。

とりあえず動いた。大丈夫みたい。

ちゃんと、ログをファイルに保存したりもできるみたい
なので、teraterm的な用途で、シリアル経由でログを
残したりっていう用途もUbuntuノートで不便なく出来そう。






この間の、C言語用FFTライブラリの話。

http://jiwashin.blogspot.jp/2015/05/fft.html

これをmbedで使ってみようと思ったんだけど、いきなり
mbedに持っていくと、ちょっと面倒な感じになりそう
なので、端末の入出力がさくっとできる、Ubuntuの
gcc使って、付属のテストプログラムから。

makeしてみると、そのままさくっとコンパイル通って、
実行できる。
けど、fftの動作と使い方がわかる動作っていうよりは、
誤差の検証プログラムって感じなので、ライブラリ中の
コメントとか読んで、関数のパラメタをどんな具合に
設定したらいいのかをあらためて調べなおす。


…よく見てみたら、これ、整数に対するFFTじゃなく、
double型(8バイト?)の浮動小数なんだなぁ。
それだと、PCはともかく、FPU搭載してないmbedだと
結構時間かかりそうだなぁ。

でもまぁ、パラメタの指定方法はなんとなく判った。
配列の個数の計算とかを、もうちょっと調べなおして
から、あとで自前データぶっこんで検証してみよう。


整数型のないかなぁ。16ビット幅くらいのでいいん
だけど、できるだけ高速なやつ…






https://www.youtube.com/watch?v=CIRKRzw54Zs

光学マウスなのかなぁ?マウスのセンサーを使って、
リニアセンサーにしちゃう案。

そういえば、昔まだマウスの中に玉が入ってたころ
(というか、まだ88を現役で使ってたころ)、マウス
をデジタイザ(図を取り込むためのデバイス)に使って
いた作例があったなぁ。

いまの光学マウスなら、安物使っても、リニアセンサー
として結構高精度に取り込めるんじゃないかなぁ、
という気がしてる。これちょっとやってみたいな。






こないだ、松戸のメクマン跡地をgoogleマップで見てて、
あのスペースは駐車場になっちゃったのか、1Fがコンビニ
の建物になっちゃったのか、わからなくなっちゃってた
んだけど、

https://twitter.com/Konimiru/status/766300835361853440

この写真みて、ようやくわかった。この消火栓の柱とか、
もろもろ写りこんでるものをもとに考えると、

https://www.google.co.jp/maps/@35.7866704,139.9043913,3a,75y,51.75h,90.4t/data=!3m7!1e1!3m5!1sTfs7hF2jOuzDe6SuiiAb7g!2e0!6s%2F%2Fgeo0.ggpht.com%2Fcbk%3Fpanoid%3DTfs7hF2jOuzDe6SuiiAb7g%26output%3Dthumbnail%26cb_client%3Dmaps_sv.tactile.gps%26thumb%3D2%26w%3D203%26h%3D100%26yaw%3D23.836609%26pitch%3D0!7i13312!8i6656?hl=ja

あのコンビニがあった建物が、元メクマンだな。
まぁ、場所が判っても、戻ってはこないんだけどな。





https://twitter.com/jot6001/status/765538151339175938

THEXDERの起動、難しい。





https://twitter.com/odilon_japon/status/765543417933725696

>ボツになってしまいました。






https://twitter.com/OGUoT/status/765766869928280065

こういうの見てると、やっぱゴジラ見に行きたくなる
んだよな。






https://twitter.com/Arts_making/status/766424485431881728

キレイ。
20秒くらい見てて、ようやく気づいた。






https://twitter.com/17Marimo/status/766056753444249600

ニワトリ、大きくなっても、ピヨちゃんなんだなぁ。
しかし、賢いな。


オイラ、アヒルかウズラが飼いたいんだよな…



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




前に、aliexで買っておいた、Raspberry Pi用の480×320
のカラー液晶ili9488を試してみる。


一応、OSのフレームバッファじゃなく、単体での動作は
確認してあるので、あとはOSバージョンとか、ドライバの
設定とか上手くいけば、Raspberry Pi単体とかキーボード
とかつなげば動くはず。


というわけで、ドライバの組み込みの作業を行う。

ここ参照。

http://raspberrypi.stackexchange.com/questions/44179/rpi-2-and-3-95-tft-ili9488


各種ファイルを書き換えたりいろいろいじって、リブート。

…上手くいかない。なんかだめ。全然なにも表示されん。


どうやら、いろいろ調べてみると、Jessieじゃだめっぽい。

こっちを試す。

http://appdictive.dk/blog/projects/2015/10/30/cheap_tft_display_on_raspberry_pi/


…やっぱ上手くいかない。

どうやら、Jessieの手順は、下のほうにコメントされて
いる方法を適用するってことみたい。

また、今度またやり直してみることにしよう。


そういえば、Wi-Fi経由でRaspberry Piのコンソールに
Ubuntuからログインするなら、sshコマンド使えばいい
んだけど、USBシリアル変換基板経由でログインしようと
思ったら、なにつかえばいいんだ?と思って、すっかり
忘れてた。cuコマンド使うんだな。

Windowsだと、どっちもtera term使えばいいんだけど、
Ubuntuって、tera termみたいなソフトって、ないのかな?
探してみたことがなかったな。





https://twitter.com/Nabe_RMC/status/766152287169282048

そうか!11月号で、I/Oは40周年なのか。
なにかイベントてきなことやるのかなぁ?それとも、
いつもどおりっぽい感じなのかなぁ?

はらJINさんのねこのイラストとか、ちょっと紹介
みたいに出てきたりするとうれしいな。






こないだのMFTでNutubeを見て、やっぱりココロが動く
のを感じたんだけど、なぜ、VFDを見るとココロ動くのか、
ようやく気づいた。

http://www.nicovideo.jp/watch/sm10644963

LCDとFL管のゲームでは、FL管はお金持ちの子の家に
遊びに行くとプレイできる、贅沢なゲームだったから
だな。クレイジークライミングとか。

オイラ、持ってたゲームっていうと、ミサイルベーダー
(LED表示のゲーム)を除くと、全部LCDだったはず。
FL管への憧憬だったのか…





http://q-ho.com/products/Qholia/Qholia.php

Qholia(クホリア)。かっちょいい筐体なのに、3万円
とちょっとなの?これいいかも。
おき場所なんだよな…。どうするか…





http://www.bbc.com/news/video_and_audio/headlines/37112292

世界一でかい飛行物体。うーーーーん。

せっかく空飛ぶのはいいんだけど、上に飛行甲板も、
回転して出てくる砲台もないし、ハイパーデスラー砲
もついて無いじゃん。



どうやって、自動惑星ゴルバと戦うのよ…。





https://twitter.com/itm_nlab/status/766226163312111616

ぷよぷよ。



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




http://gigazine.net/news/20160817-intel-joule-module/
http://pc.watch.impress.co.jp/docs/news/event/1015281.html

インテルの新しいマイコン、ジュールが発表に。

スペック見る限り、Wi-FiとかBTとかUSBとかUARTとかI2Cとか、
CSI/DSIとか、てんこ盛りなんだけど、GPU内蔵になっちゃった
のは、Edisonより電力効率悪化しそうだな。

っていうか、スマホやタブレットのコア機能丸ごと入って
いる感じ。メモリは、スマホとかに比べると小さめだよな。
スマホからCPU周辺をぶっこぬいたみたいな感じ。

これがEdisonくらいに省電力なら、かなりいけてるかも
しれないけど、GPUの分余分に電気食うとしたら、
ちょっと…ってかんじかなぁ?

なんにしても、ちっちゃいな、これ。


http://b.hatena.ne.jp/entry/298254380/comment/YaSuYuKi

キュリーにしても、ジュールにしても、なんか不幸なひと
から名前取るよな。







http://akizukidenshi.com/catalog/g/gP-10191/

秋月の新商品。このジャンパー「ジャン太」。なかなか
面白い。





https://twitter.com/kadenken/status/765815863828099072

家電のケンちゃんの5インチフロッピークリーナ。
やっぱりあっという間に売り切れちゃったみたい。
また仕入れられるのかなぁ?





https://twitter.com/Nonoba2Nonoba/status/764060043192840193

それはひょっとしてギャグで(略)





https://twitter.com/masaK9/status/764384940964261889

これは。





http://gigazine.net/news/20160816-bionic-leaf/

自然の10倍の効率で、アルコールを光合成するバイオニック
リーフ。へぇ。

これって、ナニと比べて10倍なんだろう?
もしこれが、葉っぱが光合成して作り出すでんぷんの10倍
のエネルギー効率とかっていみなら、ミドリムシよりも
効率的に燃料を取り出せるってことになるのかな?

なんにしても、こういう技術で、内燃機関がいつまでも
使えるといいんだけどな。


http://gigazine.net/news/20151005-solarcity-solar-panel/

こっちは、低コストな太陽光パネル。
耐久性はどうなんだろうなぁ?






https://twitter.com/Yokohama_Geo/status/765828690382954497

逸般人なら上陸してもいいのかな?






http://blog.livedoor.jp/nichepcgamer/archives/1060261124.html

あぁ…。なんかWindows7も、Windows10みたいな、悪しき
伝統を見習うことになるのかな?






https://www.youtube.com/watch?v=ktPM-ot1ADc

1/100のヤマトと1/500のヤマト。

やっぱ、パート2のオープニングみたいに飛んでいく
ところを期待しちゃうよねぇ…。





https://www.youtube.com/watch?v=lFfdOq9rvLc

Volca FMのチュートリアルっぽい。
これ、一度触ってみたいんだよなぁ…。



コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする




aitendoで、tiny2313が150円なんだけど、これって
ちょっと安くなったのかな?

http://www.aitendo.com/product/10897

以前、180円じゃなかったかな?ちなみに、秋月は
230円まで上がっちゃってる。こまるね。





探し物してたら、昔買ったstm32vldiscoveryを発掘
してしまった。

当時、ARMのSTM32搭載基板としては、かなり格安だよな、
と思って、飛びついて買ったような気がするんだけど、
なぜか全然いじってない。

確か、コンパイラにナニを選べばいいかで、もやもや
と考えてて、結局手を動かさなかったんじゃないか
って気がする。結局、ナニを使えばいいんだろう?






http://www.gamepres.org/

ゲーム保存協会。おぉ。オイラのお師匠様、日高さんが。






https://twitter.com/Konimiru/status/765407331911737344

しらなかった。ナッツ&ミルクはなんとなく知ってた
けど、ギャラクシアンは、当然のように敵の名前だと
思ってた。ギャラクシアン軍団め!!って。

じゃぁ、ギャラガとかギャプラスとかも、自機のこと
だったりするの?





https://twitter.com/kuina_ch/status/765179419421839360

ははぁ。確かに、2!=2って、なんなのよ?だな。





https://twitter.com/asciijpeditors/status/765449219591114752/photo/1
http://ascii.jp/elem/000/001/212/1212152/index-3.html

うーーーん。この黒のチャイナドレスのひと、
スンゴイ美人だな。





https://twitter.com/cross_natural_9/status/765334739095957504

PCデポなんかより、こっちのほうが全然あくどい
んじゃないの?

http://bylines.news.yahoo.co.jp/soichiromatsutani/20150710-00047396/

ビッグエッグとか、マツダスタジアムとか、比較
にすらならない。






https://twitter.com/sisiodoc/status/765438409552781314

まぁ、わるいことじゃないんだけど、ネットの個人
サイトの情報なんかより、NHKのニュースどうのこうの
なんかより、公文書に捏造情報を残してたり、大事な
情報を削り落としたりしてるほうが重要なんじゃないの?

ネットの個人サイトだの、NHK(一応民間)だのは、
所詮公的なものじゃないけど、公文書は公文書だから
重さが全然違うんだけど。

そういうのグダグダなままで、それ以外がんばっても、
意味内容な気がするんだけど。


http://biz-journal.jp/2014/01/post_3936.html

これは公文書じゃないけど、NHKはこんなことしてた
らしい。これはひどい。



https://twitter.com/nojiri_h/status/765026452865552384

これはすばらしい指摘じゃないかな。

>真の国益とは多様な文化

おぉ。


あれか。公文書がいい加減に捏造されているものなら、
それを指摘している市井の声が、ネット上の個人サイト
とかの発言として残されていく、みたいな感じと考えると、
それはそれで意味あることなのかもな。
後世の人たちが、それ見て考えることができるかも。




コメント ( 0 )
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする



« 前ページ 次ページ »