目次: ベンチマーク
少しだけ
Nクイーン問題JavaScript版のソルバを更新しました。右上の角にある場合(1列目)は、N - 1の大きさの盤の問題を解くこととほぼ同じ、と見なすことで、1割ほど速くなりました。
他の言語でもやってみようと思い、試しにJava版に同じ実装をしてみましたが、全く速くなりません。うーん、なんでだろう……?
以下、各言語版のNクイーン問題のソルバへのリンクです。
NクイーンJavaScript版(リポジトリではないです)
この記事にコメントする
目次: PC
前回の日記(2014年11月20日の日記参照)の続きです。
サンプリング周波数(以降fsと書く)の1/6や1/8の周波数を持った矩形波のLPCMデータをDA変換したらどんな波形になりますか?を計算しています。

周波数1/6 fsの矩形波のLPCMサンプルデータと連続時間信号

周波数1/8 fsの矩形波のLPCMサンプルデータと連続時間信号
前々回に掲載したUSB-DACの出力波形と比べてみても、形が似ていることがわかると思います。

ONKYO SE-U33GXV2の1/6 fs = 7.4kHz矩形波出力(fs = 44.1kHz)(再掲)

ONKYO SE-U33GXV2の1/8 fs = 5.5kHz矩形波出力(fs = 44.1kHz)(再掲)
当然ながらONKYO SE-U33GXV2は信号発発生器ではないので、波形が歪んでいても文句は言えません。しかし素人が見たり測ったりする限りでは、波形の歪みもなく、ノイズも少なく、基本に忠実なDACです。今更ながら、良い買い物だったなあ、と思います。
そう思うなら、オシロに繋いでないで音楽聴けよって?ええ、ええ、わかってますとも。
計算に使ったsinc関数(sin(x) / x形の関数のこと)は、やっかいなことに無限の過去から無限の未来まで値を持ちます。そのため、あるサンプルの値を変えると、過去から未来の全ての計算結果に対して影響が出ます。
下記グラフのようにLPCMデータ上は0でも、未来のデータの影響を受けるため、0ではないレベルの信号が出力されてしまいます。
無限に影響が出るとは言ってもこの世の機械では計算ができませんので、実際に売られているDACなどの機器ではどこかで影響を打ち切っていると思われます。もしくは思い切って信号の再現性は捨ててsinc関数を使わずに計算しているはずです。
じゃあ実際、どの辺まで計算しているんでしょうね?USB-DACの鳴り始めの信号にトリガを掛けて、オシロスコープで見てみましょう。

ONKYO SE-U33GXV2の 周波数1/2 fs = 22kHzの連続時間信号の鳴り始め(fs = 44.1kHz)
なお、計算値(-400〜 +400)と対応が取りやすいように、いずれのUSB-DACの振幅も-4V〜+4Vの振幅になるように音量を調整しています。
マイナス側に一番大きく-6Vくらいまで振れている波が、一番最初のLPCMデータに対応した信号になります。計算したグラフと見比べるとわかりやすいです。
最初の波より前についても、計算したグラフの形と、オシロスコープの波形がほぼ一致していますので、LPCMデータを入力していない部分は、値0のLPCMデータとして扱っていると見て問題なさそうです。
セカンドオピニオンとしてCreative X-Fi Go! Proにも登場いただくことにします。前々回泣かされたCreative SB Play! とは違って、X-Fi Go! ProのSin波は非常に綺麗です。

Creative X-Fi Go! Proの 周波数1/2 fs = 22kHzの連続時間信号の鳴り始め(fs = 44.1kHz)
なんとなく鳴り始めを打ち切ったような波形ですね。残念ながらセカンドオピニオンならず。せっかく買ったのにションボリですね…。
オシロスコープの波形と、0データとの交点を数えてみると、下記のように少なくとも鳴り始めより17〜18個前のサンプルまで影響を及ぼしているように見えます。

ONKYO SE-U33GXV2の鳴り始め以前の0との交差部分
これは少なくとも18サンプル以上DAC内部に貯めてから、信号の値を計算していることの現れです。たくさん貯めてから計算するほど理想のDA変換に近づきますが、貯めすぎればDACの処理遅延に繋がり、使い勝手は悪くなります。
ちなみに18サンプルの遅延はfs = 44.1kHzのとき、わずか0.408 [ms] に過ぎません。ざっとこの10倍〜20倍のサンプルを貯めてから計算しても、人間に全くわからないレベルの遅延に収まるでしょう。
恐らくUSB-DACはもっとたくさんのサンプルを貯めていて遅延も大きいはずですが、今持っている測定手段ではこれ以上の精度で信号が読めないので、真実については何とも言えませんねー……。
もっと良い測り方をご存じの方は教えていただけると嬉しいです。手持ちの機材で測れそうなら試してみます。
この記事にコメントする
| < | 2014 | > | ||||
| << | < | 12 | > | >> | ||
| 日 | 月 | 火 | 水 | 木 | 金 | 土 |
| - | 1 | 2 | 3 | 4 | 5 | 6 |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | - | - | - |
wiki
Linux JM
Java API
2002年
2003年
2004年
2005年
2006年
2007年
2008年
2009年
2010年
2011年
2012年
2013年
2014年
2015年
2016年
2017年
2018年
2019年
2020年
2021年
2022年
2023年
2024年
2025年
過去日記について
アクセス統計
サーバ一覧
サイトの情報合計:
本日: