バスレフ研究所 Personal Audio Laboratory mcap.exblog.jp

工学オーディオに取組むオカルト嫌いです。


by MCAP-CR
プロフィールを見る
画像一覧

カテゴリ:プログラミング( 40 )

少し前に書いたのですが、FC2ウェブサイトは、ファイルサイズの制約ができてしまったので、WEBCROWに引っ越しています。
FC2もそのまま残っているのですが、更新は新しいWEBCROWで行っていますし、後からかかったファイルサイズの制限により、FC2のファイルの一部は無くなっています。
このため、metaタグを使って、自動でWEBCROWに飛ぶようにしてみました。
タグは、
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=http://mcap.webcrow.jp/indexj.html">
のような感じです。
ただし、excite blogの制限で、上記の内容はタグと見なされてしまい使用できないので、"<"のかわりに日本語の"<"を使っています(これで回避できたが、コピペしても使えないのでご注意ください)。

上のCONTENT="の後ろの1は、1秒後に飛びます。
またURL=の後ろは、飛ぶ先です。

古いページをブックマークされている方、リンクを貼っていただいている方は、
http://mcap.webcrow.jp
のほうにリンクを変更していただきたくお願いいたします。
[PR]
by mcap-cr | 2016-01-28 23:07 | プログラミング | Trackback | Comments(0)

Pythonに挑戦

最近更新をサボっていたら広告がトップに表示されるようになってしまいました。
ゆっくりゆっくりですが、プログラム言語のPythonの勉強を徐々に始めました。
正直云ってプログラム言語は難しいです。
何から何までC言語でできるわけではないし、Windowsネイティブな言語は嫌いなので、Pythonを始めたというものです。
Pythonは、計算が遅いので、多自由度バスレフのシミュレータには向いていませんが、LibreOfficeのマクロに使えたりして結構便利です。
時間をかけて覚えていきたいと思います。
面白いプログラムができたら紹介していきたいと思います。
[PR]
by mcap-cr | 2015-07-02 23:13 | プログラミング | Trackback | Comments(0)
まだ始めたところで、公開の予定は立っていませんが、シミュレーションプログラムのドキュメントを作りはじめました。
コンピュータプログラムは、あくまでも、書かれたままに動作するのですが、間違って書けば間違ったとおり正しく動作します。
かように素直なのがプログラミングの特徴です。
問題は、書いた本人が中身を忘れてしまうことです。
公開済みのシミュレーションプログラム現状最終版は、以下の4つのモジュールで構成されています。

(1)離散フーリエ変換モジュール
(2)離散フーリエ変換の一部分だけを実行するモジュール
(3)漸化式の逐次計算モジュール
(4)メインモジュール

このうち、2番目のモジュールは、非常に短い記述なので簡単ですが、それでも、『何故このような処理をしたのか』ということを忘れています。
コンパイルしたプログラムがそれらしく動作しているからと云って、正しくプログラミングできた、とならないのが、プログラミングの難しいところです。

目標は3ヶ月くらいとしたいと思います。
私のコードを読んだ人は極々少数のようですので、『お楽しみに!』とも書けないところですが...
[PR]
by mcap-cr | 2015-02-02 06:50 | プログラミング | Trackback | Comments(0)
標準MCAP-CR(ダブルバスレフ、バスレフ、密閉、バッフルも可能)のシミュレータプログラムを更新しました。
日本語、英語の説明書が付属しています。
今度のバージョンは、箱の設計条件を複数同時に解析可能です。
このため、箱の容積やバスレフダクトの適正値を探すために何度もシミュレータプログラムを実行する必要がなくなりました。
実用性は相当高くなったと思います。
コマンドラインからの実行ですが、結果がCSV形式で出力されるので、他のソフトウェアで、簡単にグラフ表示できます。力学モデルを基にしたダブルバスレフのシミュレータは他にないと思いますので、遊んでみてください。
このソフトを元に、記事を書いていきたいと思います。

ダウンロードはこちらから
[PR]
by mcap-cr | 2015-01-02 17:33 | プログラミング | Trackback | Comments(0)
みなさんいかがお過ごしですか?
ブログの更新はいつも通勤中です。
シミュレータプログラムの更新も通勤中にやっています。
なかなかまとまった時間がとれないですね。

さて、CUIバージョンですが、現在改変が進んでおり、複数の条件でシミュレーション結果が比較できるようになりました。
a0246407_6475619.png

この結果、箱の容量を少しずつ変えたり、バスレフダクトサイズを少しずつ変えたりして、比較するのが容易になりました。
もう少し改善してリリースする予定です。
ダブルバスレフにも(シングルバスレフにも)使えるので、結構役立つと思います。
上のグラフは、改変中のシミュレータでシミュレーションした結果例です。
[PR]
by mcap-cr | 2014-12-25 06:51 | プログラミング | Trackback | Comments(0)
前々回、シミュレータのマイナーチェンジにバグがあると書きましたが、
バグではなかったようです。
不自然な設計の値を入れると、モデル式が対応できず、発散してしまったりします。
今回の問題は、まさしくこの点が問題の原因でした。
計算の解像度を細かく設定し直したら、計算できました。

ただ、新たな疑問が湧き上がりした。
解像度をどんどん高めていくと、高域側(200~400Hz)のゲインが変わります。
こういう問題は、数値解析にはつきものです。
安定した結果を出すためには、現在の倍精度から更に有効桁数を増やしたりしなければいけないのかもしれません。
有効桁数を増すと、計算時間が長くなります。
今回プログラムを見直して実行速度を改善したのですが、別な問題が出るかもしれません。
[PR]
by mcap-cr | 2014-12-15 12:38 | プログラミング | Trackback | Comments(0)

なぜC言語なのか

私は、バスレフのシミュレーションプログラムを、C言語で書いています。
C言語は1970年代に生まれた古いプログラミング言語で実績は多くありますが、古いため、今はさほど人気はないようです。
では、なぜC言語を選んだのか考えてみました。


(1)コンパイラが無料で手に入る
当初はさらに古いFORTRANで書こうと思っていましたが、適切なコンパイラが見付かりませんでした。
今は、GCCにもFORTRANが含まれていますが、当時は気付きませんでした。
(2)ウェブ上に情報がたくさんある
これはプログラミングを学ぶ上で重要なことです。
その前にもCに関する書籍2桁冊は購入していると思いますが、書籍ではなかなか難しいところもあります。
ウェブでは知りたい情報がピンポイントで選べるところがメリットでしょう。
(3)少しだけ知っていた
少しでも知っていると始めやすいものです。
(4)他の言語をあまり知らない
比較的知っていたのは、古いBASIC、FORTRAN、EXCEL VBAといったところでしょうか。
Visual BasicとかVisual C++, Borland C++でも調べながらできない訳ではないのですが、あまりひとつのプラットフォームに依存するのもどうか、と。


C言語は、ハードウェアに近い言語と云われ、ハードを直接操作するのに強みがあるどうですが、自分はそういうことは全くできません。
計算だけならFORTRANのほうがよさそうですが、Cで書いてみると、記述のしやすさは大して変わらないように思います。
自分のプログラムは、Cの能力の1パーセントも使っていませんが、それで知りたいことが計算できててしまうのが強みです。
五十の手習いですが、始めるのに遅すぎることはありません。
研究会にプログラミング分科会をつくるとか....無理そうですが。

さて、今年も忘年会か新年会をやりたいと思っています。
あとで、メーリングリストで連絡します。

最後に、
必ず投票に行きましょう!
投票先は、マスコミに操作された情報に惑わされず、自分で選びましょう。
マスコミは基本的に自分の都合で記事を作るので信じてはいけません。
C言語では儲からないのでプロモートしないのと同じです。
自分の目で選んで日本を創っていきましょう。
[PR]
by mcap-cr | 2014-12-12 06:57 | プログラミング | Trackback | Comments(2)

なかなか進まないデバグ

公開済みのMCAP-CR型バスレフシミュレータプログラムのデバグに取組んでいますが、調子が悪くなると一向に進みません。
計算プログラムのデバグの一般手法は分かりませんが、たぶん、自分がやっている手法はあまり変わらないでしょう。
計算プログラムのデバグで、最も重要なのは、次の計算プロセスに対して意図した数値が渡されているか、ということです。
初期の設定値を元に、単純計算を実施し、その結果を次のステップに渡す、このような単純な繰り返しがプログラム計算だと思っています。
プログラムにする場合には、ステップ数が多いので、手計算だけで検証できることは必ずしも多くはありません。
そこで、途中で、中間計算値を、デバグ用ファイルに書き留めるコードを書き入れます。
そして、その計算値が渡された先で、正しく受け取ってるか、その値も書き留めるコードを書き込みます。
たとえば、
a0246407_12273077.png

(Excite Blogでは、Cプログラムを文字のまま書いても何故か正しく表示されないバグがあるようなので、画像にしました)
のようなコードを延々と追加してゆき、実行の都度デバグログに目を通します。
これで解決できるバグも多いのですが、何故か良く分からないものもあります。
特に、if文が多いと、その計算がどういう条件の場合なのか、良く分からなくなります。

そもそも、自分が使っていたプログラムうに何故今頃良く分からないバグが出てくるのか、それも分かりません。
頭をひねりますが、素人プログラマの自分には、まだまだ乗り越えなければならない壁があります。

追伸:
今、構想している次期の作品は、メカニカルマトリックス共鳴管で、三分割、全部繋げると3mとなるものです。
変わるかもしれませんが。
スピーカーユニットは、秋月の300円のものを使おうかと思っています。
さてどうなるでしょうか...
[PR]
by mcap-cr | 2014-12-10 06:59 | プログラミング | Trackback | Comments(0)
このところずっとシミュレータプログラムを修正しています。
先日、少し変わった構造の多自由度バスレフ用シミュレータの第一版を終えたので、調子が良くなったと思っていました。
ここに来て、バグが修正できずにいます。
すでにリリースしているプログラムに大きなバグはないと思っていましたが、ときどき、予想外の結果が出ます。
予想外とは、微妙に違うとかではなく、質点の変異が計算できているのにDFTに値が正しく渡されていないとか、すぐにおかしいことが分かるものなので、混乱するということではないのですが、気になります。
それに、いずれは、複数のシミュレーションケースを一括して計算出力したいと思っていました。
多自由度バスレフは、設計の自由度が高いのですが、自分の場合、試作する訳にはいかないので、できるだけ、シミュレーションでピンポイントに、設計を決めたいと思っています。

あと少しで、修正版をリリースできると思います。
CUI版ですが。

GUI版は、Qtが買収される度に変わるので最近は触っていません。
とは云っても、Visual C++とかでは、Linuxで使えないので手を出す予定はありません。

買収されないIDE(Integrated Desktop Environment)は出ないかな?
[PR]
by mcap-cr | 2014-12-02 06:45 | プログラミング | Trackback | Comments(0)
オフ会が終わったので、多自由度バスレフのシミュレーションプログラム改造をすすめています。
自分がしたいのは、LibreOffice/OpenOffice(ISO/IECフォーマット)のファイル上のボタンをクリックすると、シミュレーションケースを作成し、また、CUIのプログラムを実行するものです。
さらに、CUIのプログラムで作成した結果ファイルを、VBAのボタンひとつで取込んで、結果もそこからボタンひとつで表示できるようにしようというものです。
まだ、試行錯誤の段階ですが、下記のようなイメージです。
a0246407_781147.png

画面には、ボタンが並んでいます。

ここで、スプレッドシート上に、実行したいシミュレーション条件を入力し、ボタンを押すと、CUIのシミュレータ用の条件ファイルを出力する(ここまではできました)

そして、実行ボタンをクリックすると、ひとつのケースについては、シミュレーションを実行する(いまこの途中)

さらに、条件ファイルを複数作成し、ボタンひとつで自動実行(この先)

最後は、ボタンひとつで、結果をスプレッドシートに取込みまとめて表示(その先)

と、こんな具合ですが、なかなか簡単ではありません。

簡単でないのは、自分の知識不足がいちばんの理由なのでしょうがありませんが、

いま、シミュレーションを実行できるところまでは、来ています。
ところが、最初は、実行ファイルを叩いても、ランタイムエラーで異常終了していました。
どうやら、実行ファイルを叩いても、条件ファイルを正しく読み込んでいないようです。
しばらく考えていましたが、叩いた実行ファイルを、OSがどこか別のメモリー空間(というか、テンポラリーフォルダ)で実行しているのではないかと思い、Cプログラムのファイル指定を、フルパスに変更したら、普通に動きました。
しかし、これでは、ユーザーがCプログラムの中身を環境に合わせて編集し、コンパイルし直さなければならないので、汎用性がありません。
こういうのってスマートじゃありませんよね。

ということで、再コンパイルなしで、せめて、スプレッドシート上でパスを設定できないか画策中です。

ここを乗り越えられれば、スプレッドシート上からボタン三つ四つでシミュレーション可能になります。

まあ、悪いことばかり書いてますが、それでも自分のプログラミング能力は上がっていると感じています。
少なくとも、修論書いてた頃よりは、かなり進歩しました。
プログラマーの仕事は、若いうちにピークに達すると云われていますが、オジサンでも、少しずつは成長するんだ、というのが、これからの高齢化社会に向けた希望でしょう。
[PR]
by mcap-cr | 2014-10-17 07:30 | プログラミング | Trackback | Comments(4)