shingoushori's dialy

音信号処理を専ら研究していた元博士後期課程の学生によるメモ

Simutransで, 建築物を弄る

<欲望>
筆者は, 鉄道経営シミュレーションが好きである.
Simutrans(http://japanese.simutrans.com)は, 素晴らしい.
今回は, 建築物を弄ります. 
特に, 建築物の所在地を変換するのが第一の目的です.
建築物の所在地を調整することで, 市域を調整することができます.

 

<設定いじり>
セーブデータをxmlで書き出す設定にしておく.
simutrans/config/simuconf.tab の,
saveformat = bzip2

saveformat = xml
に書き換え

 

<狙いの建築物さがし>

・座標点
xml中, 各地点のデータは, 
 <planquadrat_t> と </planquadrat_t> で括られている.
この括りが, マップの左上->右上, -> .... ->, 左下->右下 の順に並んでいそうだ.
括りを数えなければ, 座標点は探せないように見える.

・標高
<planquadrat_t> の次に来る  <id>(数字)</id>, これが標高のようだ.

・建築物であるか否か?
<planquadrat_t>の中に, <gebaeude_t> </gebaeude_t>の括りが,
建築物である印のようだ.

・建築物の種類
<gebaeude_t></gebaeude_t>の中にある, 
<![CDATA[(種類)]]>, ここに種類がありそうだ.
ここでの種類は, 市内建築物建設ツールの原名にある記述のようだ.

建築物の所在地
</gebaeude_t>の一つ前の, <i32>(数字)</i32>が該当しそう.
ここでの数字は, 都市名のxml中での掲載順-1になっていそうでした.
都市名のxml中での掲載順は,
とりあえず <![CDATA[( あたりで文字列サーチして, リストアップできます.

 

まだまだ, 謎な数字があったり不便もいいところですが,
とりあえず糸口が掴めました.

... たぶんxmlの構文もどこかに解説があるんでしょう...

論文・文献徘徊メモ 160219-1 Pease FFT / Korn–Lambiotte FFT

FFTといえば,
Cooley–Tukey FFTが一番有名で, Stockham FFTが二番であろうと思います.
工学書を覗いてみると, だいたいここ2つではないでしょうか.
Cooley–Tukeyはわかりやすいとして, Stockhamはぎょっとします.
Webサイトによっては, よくよく線を辿ってみると不完全なものもありました.

そんなわけで, Stockhamの正しそうでわかりやすい説明を探し求めてみたわけです.
すると, Stockhamよりも一見してわかりやすそうな別のFFTに出会いました.
それが, Pease FFTKorn–Lambiotte FFTでした.

 

Pease FFT が載っている文献
https://users.ece.cmu.edu/~franzf/papers/fft-enc11.pdf
http://csg.csail.mit.edu/Dataflow/talks/HoeTalk.pdf

 

Korn–Lambiotte FFT が載っている文献
https://users.ece.cmu.edu/~franzf/papers/fft-enc11.pdf
http://www.ams.org/journals/mcom/1979-33-147/S0025-5718-1979-0528051-4/S0025-5718-1979-0528051-4.pdf

 

Pease FFTKorn–Lambiotte FFT は, ステージ間での配線パターンが同じです.
美しい ...

ちなみにStockham FFT は,
入出力時の並び順がin placeであることが主眼のようです.
しかし, それよりも各ステージの回転因子を乗算する周波数ビンが
(たぶん) 同じ位置, しかも後半に固まっていることの方が, 有用で美しく思います.

Web Audio API の、BiquadFilterNodeのbandpassの周波数特性の概形

標準の BiquadFilterNode の
bandpassの周波数特性の概形を探ってみました.
98帯域のMultiband Sidechain Compressor を作れることがわかったので,
フィルタバンクの周波数特性を詰めていこうとしているわけです.

今回, WebAudioAPI の BiquadFilterNode の周波数特性をグラフにするやつ
という素敵なページに巡り会いました.
こちらのページの上で, 中心周波数から-20 dBと-40 dBになる周波数比の目安を,
手探りで簡単な整数比で捉えてみました.

Q-20 dB-40 dB
0.5 x 20 x 200
1 x 10 x 100
2 x 5 x 50
3 x 7/2 x 100/3
6 x 2 x 16
9 x 5/3 x 90/8
12 x 3/2 x 8
18 x 4/3 x 6
24 x 5/4 x 9/2
30 x 7/6 x 7/2
36 x 8/7 x 3
42 x 9/8 x 8/3
48 x 10/9 x 7/3
60   x 20/9
72   x 2

WebAudioAPIのマニュアルには, フィルタの解説がありました.
一般的なフィルタに見受けられますが, 地味に計算が大変です.

Web Audio API で、Multiband Sidechain Compressor を試作 (98帯域)

これまでに, マルチバンドサイドチェインコンプレッサーを, 
3帯域, 10帯域で作ってきました.
ソースコード上では, 1帯域分の記述を単純にコピペしていました.
今回は, それをArrayで束ねてFor文でぶん回しました. ぶん回せました, うれしい.

帯域数を簡単に弄れるようになりましたので, 増やしてみました.
98帯域です.

1/12オクターブバンドフィルタバンクで,
最低域を55(=440*(2^-3)) Hz, 最高域を14080(=440*(2^5)) Hzとしました.
人間の可聴域をカバーさせてみました.
帯域が密接しているため, Q値を適当に12としました.

予想以上にあっさりと動いてしまってびっくりしています.
さらに帯域を12帯域ずつ増やしてみたところ,
110帯域では別のタブを操作していようとも音が途切れず, 
122帯域では別のタブを操作しているときに音が途切れ,
134帯域では別のタブを操作せずとも音が途切れました.
私の環境ではこの辺りが能力の限界のようです.

ちなみに, STFTによる帯域分割も検討しました.
不甲斐ないことに, 周波数領域でゲインを操作したときにぶつぶつとノイズが発生し,
原因を突き止めきれませんでした.

こんな経緯もあり, 単純にフィルタを並列接続するだけのものが,
しかも可聴域を1/12オクターブで刻み付けるものが,
簡単に動いてしまって大いに感動しているわけです.

Web Audio API で、Multiband Sidechain Compressor を試作 (10帯域)

前回は3帯域のマルチバンドサイドチェインコンプレッサーをつくりました.
Web Audio API で、Multiband Sidechain Compressor を試作 - shingoushori's dialy
それを10帯域にしてみました.
重くなって動かないかと思いきや, 全然動きました.
どこまで帯域を細かくできるんでしょう?

各帯域の周波数の設定は, 下から,
50, 100, 200, 400, 800, 1600, 3200, 6400 ,12800 Hz + 残渣信号です.

Web Audio API で、Multiband Sidechain Compressor を試作

前回制作したサイドチェインコンプレッサー
Web Audio API で、Sidechain Compressor を試作 - shingoushori's dialy
を, マルチバンド化してみました.

帯域分割は, Web Audio API 標準のBiquadFilterNodeを用いてみました.
https://developer.mozilla.org/ja/docs/Web/API/BiquadFilterNode
今回は3帯域. 
・500 Hz中心のバンドパス
・1000 Hz以上のハイパス
・残渣信号
コンプレッサーは, 上二つの帯域でのみ動くようにしました.

残渣信号を用意したのは,
帯域を抜き出すフィルタを独立して複数組み合わせて用いる場合,
再合成時に完全に元信号に戻すのが難しいからです.

IEEE Xploreの検索結果を一気に表示

IEEE Xplore http://ieeexplore.ieee.org/Xplore/home.jsp の検索結果は,
一見すると最大100件しか1ページに表示できない.
Per Pageのプルダウンメニューが, 10, 25, 50, 75, 100 だけだからだ.

ところが, URLを直接いじることで, 任意の件数を表示できる.

Per Pageのデフォルトは25である. これを100に変更すると,
URLに↓こんなのが増える↓
&rowsPerPage=100&searchField=Search_All
このrowsPerPageの数字が, 実は任意の件数を受け付けてくれそうなのだ.

pitch markの検索結果を例として示します.
pitch markは話速変換やピッチ変換の要素技術です.
シンプルに検索すると, ↓ 393のうち, 1-25が表示されます ↓
http://ieeexplore.ieee.org/search/searchresult.jsp?queryText=pitch%20mark&newsearch=true
上述の通り数字を書き換えると ↓ 393全て表示できます ↓
http://ieeexplore.ieee.org/search/searchresult.jsp?queryText=pitch%20mark&rowsPerPage=400&searchField=Search_All

これができて一番喜ばしく思ったのが, 一気にcitationsを作れること.