ディザ効果のLabVIEW参考プログラム

LabVIEW によるディザ効果参考プログラム
(最終改訂
2016/07/08)
書庫ファイル内容
LV_dither.zip には本解説ファイル(ファイル名 LV_dither.pdf)と LabVIEW によるディザ効果確認
用の参考プログラム(以下「LV_dither」と言う。
)の情報科学研究教育センターの OS 環境に対応した
実行ファイル(Virtual Desktop 用:_VDT と Local PC 用:_LPC)2 種類が含まれている。
LV_dither について
音声信号に信号とは相関の無いノイズを付加することにより小振幅の正弦波信号の高調波歪を減ら
し量子化ステップの 1/2 未満の小振幅の正弦波信号をも表現できることは情報学実験Ⅰ課題⑦「正弦波
合成と音声ディザ」テキスト(以下「テキスト」と言う。)に示す通り(原理は例えば、テキスト p.8
図 7、p.10 図 9 を参照)である。LV_dither は、音声信号の値を画素値に対応させて(註参照)可視化
することでディザの効果を直感的に確認するもので、ここではビット深度 3 ビットの 7 階調(表現可能
な範囲はディジタルオーディオと同様に正負対称の-3~+3)としている。
註:人間の聴覚では音声信号の極性を(両耳受聴の場合は左右同時に)反転しても音圧の刺激は変化せ
ず、信号 0 は画像では黒画素(0x00)に割当てるのが適当と考えられ、この場合正負の信号には補色(例
えば負を青、正を黄)を割当てることになる。無音信号にディザを加えた平均値が 0 となるのに対し、
この様に対応した画素は平均して灰色となり 0 には対応しない。LV_dither では信号 0 の画素に 0x00
以外に正負の平均(γ=2.2 として 0xBABABA)を割付けるモードを設けている(p.2 図 2 参照)
。
図1
LV_dither 起動時の既定の画面
1
LV_dither の起動時のフロントパネルを p.1 図 1 に示す。中央部に配置された 3 個の表示枠の上には
ラベルに代えて設定に応じた表示内容を示す文字列表示器を配置している。正方形の表示枠(実行速度
を考慮して情報学実験Ⅱ課題⑦「画像情報処理」と同じ 256×256 としている)に正弦波の量子化され
た信号を表示し、縦が時刻(上端が 0、下端が 1 で単位を秒とすれば標本化周波数は 256Hz となる)で
縦の 1 本のラインがディザを付加した信号の量子化結果で、これを横に 256 例を並べディザ付加による
ばらつきの様子を示している。
信号表示枠の下の横長のスケール表示枠には割付けられた画素値(左隣の数値入力セレクタで選択)
によるスケール(左端が-3、右端が+3)を表示する。画素値の割付は、フロントパネル左下の数値入
力セレクタ(ラベル zero level)で切替え、0 では青~黒~黄(図 2 右に示す通り、正負の平均が信号
値 0 の画素とは一致しないが視認性からこれを起動時の既定としている)
、1 で黒~灰~白、2 でシアン
~灰~赤(スペクトルの色順とは異なるが絶対値が等しい正負の値に補色を割当てるため)としている。
図 2 に各設定でのスケール(図左)
、無信号で一様乱数最大振幅のディザを付加した場合の平均色(図
右)を示す。信号 0 の画素に 0xBABABA を割付ける設定 1、2 では平均色の RGB 各成分は、ほぼ 0xBA
となるが、信号 0 の画素に 0x00 を割付ける設定 0 では 0x3E~0x4B 程度となる。
図 2 スケール(左)
無信号一様乱数最大振幅ディザでの信号表示枠右上端と個別表示枠(右)
信号表示枠右の縦長の個別表示枠には、既定では信号枠の横方向全体の平均(画素値の平均はγ=2.2
で計算している)を表示するが、フロントパネル右上の水平トグルスイッチ(ラベル mean/sample。既
定は OFF。水平トグルスイッチ ”mean range” に優先する)を ON にすると画面上部の水平スライド
で設定した指標の列を表示する(図 3 左)
。また、水平トグルスイッチ “mean/sample” を OFF の状態
でフロントパネル左上の水平トグルスイッチ(ラベル mean range。既定は OFF)を ON にすると、信
号枠左端(指標 0)から水平スライドで設定した指標の列までの範囲(指標値+1個)の平均値を表示
する(図 3 右)
。このとき、信号表示枠とスケール表示枠の表示内容は、垂直トグルスイッチ ”overlay” 、
水平トグルスイッチ ”original/quantized” (後述)の設定により異なり、図 3 はこれが共に ON での表
示例である。
図 3 個別表示枠の表示設定例。
指標 50 の列(左)
指標 0~5 の列の平均(右)
信号表示枠右下の垂直トグルスイッチ(ラベル overlay。既定は OFF)を ON にすると信号表示枠に
信号波形、スケール表示枠に信号範囲をオーバレイでプロットする(図 3 以下では ON に設定)。プロ
2
ットする内容はその右の水平トグルスイッチ(ラベル original/quantized 。既定は OFF)および上述
の水平トグルスイッチ “mean/sample”、“mean range” と両スイッチの間にある水平スライドの設定に
より異なる。
水平トグルスイッチ “original/quantized” が OFF のとき:信号表示枠には量子化前の原信号の値(値
は左端が-3、右端が+3)
、スケール表示枠には原信号の範囲をプロットする。“mean/sample”、“mean
range” の何れかが ON のとき、信号表示枠で信号 0 のライン(時間軸に相当)は指標を示すカーソル
表示に充てられる。
水平トグルスイッチ “original/quantized” が ON のとき:信号表示枠にはディザを付加して量子化後
の値(“mean/sample”、“mean range” が共に OFF のときは 256 例の平均、“mean/sample” が ON の
ときは個別値、“mean/sample” が OFF で “mean range” が ON のときは指定範囲の平均)
、スケール
表示枠にはディザを付加して量子化した値の範囲(“mean/sample”、“mean range” が共に OFF のとき
は 256 例での最大最小、“mean/sample” が ON のときは個別値での最大最小、
“mean/sample” が OFF
で “mean range” が ON のときは指定範囲での最大最小)を量子化前の値ではなく量子化後に対応する
整数のゾーン全体をプロットする。
表示枠左右の垂直スライドは、フロントパネル左から順にディザ振幅(ラベルは無く、文字列表示器
に目盛の意味が表示される。範囲は 0~1 で、起動時の既定は 0)、正弦波信号振幅(ラベル signal
amplitude。範囲は 0~3。起動時の既定は 1)、周波数(ラベル frequency。範囲は 0.5~8 でこのスラ
イドのみ対数スケール。信号表示枠縦の幅を時間で 1 秒と見たとき単位は Hz。起動時の既定は 1)、初
期位相(ラベル phase (deg)。信号表示枠上端の時刻を 0 としている。単位は度で範囲は-180~180。
起動時の既定は 0)である。
フロントパネル左端の垂直トグルスイッチ(ラベル normal。既定は OFF)でディザの乱数を選択し、
OFF で一様乱数、ON で正規乱数となる。目盛の数値の意味は設定により異なり、一様乱数では最大絶
対値(実効値はその 1/√3)
、正規乱数では実効値(
「最大絶対値」は存在しない)を示す(図 4)。本解
説では p.5 図 9 右を除き、一様乱数に設定している。
図 4 ディザ乱数の選択による目盛表示の切替
一様乱数(左)
正規乱数(右)
ディザ用の乱数は常時更新されるため、たとえば無信号でディザを付加したとき(電界強度が一定以
下の)アナログ TV 放送のいわゆる「砂嵐」
(snow noise)画面の様になるが、個別表示枠右の垂直ト
グルスイッチ(ラベル hold。既定は OFF)を ON にすると乱数生成を固定(ON の状態でも垂直トグ
ルスイッチ”normal” を操作して乱数を切替えたときは当該種類の乱数を一度生成する)して静止画に
できる(p.2 図 3 以下では ON に設定)
。
高調波歪の低減
p.4 図 5 は、起動時の既定画面から、垂直トグルスイッチ ”overlay” を ON に、次いで水平トグルス
イッチ ”original/quantized” を ON にして、振幅が量子化ステップに等しい正弦波の原信号と量子化後
の波形の違いを示している。
p.4 図 6 は、WaveGene で振幅 1 の「サイン波」を再生し、これを WaveSpectra を録音状態にして表示
(オーディオインタフェースのループバック機能を使用してディジタル入力している)した例で図 5 右
の波形に対する高調波歪の実際を示している。
3
図 5 トグルスイッチ ”overlay” を ON の表示。オーバレイは左が原信号、右が量子化後
図 6 図 5 に相当する WaveGene と WaveSpectra の画面
図 7 は、垂直スライドで一様乱数ディザの絶対値最大を 0.2(左)、0.5(右)にそれぞれ設定した例
で、図右では量子化後の平均が原信号(図 5 左のオーバレイ)と変らないことが分る(最大絶対値が 0.5
の一様乱数をディザとして用いるとき、ディザを付加して量子化した期待値は原信号の値に等しくなる。
正規乱数をディザとして用いるとき、この様な性質は無い)
。
実際、図 7 右と同じ条件に設定した WaveGene(正規乱数による WaveGene の「ホワイトノイズ」ではな
く、実験で使用した ”uniform_0dB_16b.wav” を「ユーザー波形」に登録する)と WaveSpectra の画面で
見る通り高調波歪は大幅に低減している(p.5 図 8)
。
図 7 振幅 1 の正弦波にディザを付加した例。一様乱数絶対値最大 0.2(左)、0.5(右)
4
図 8 図 7 右の設定条件に相当する WaveGene と WaveSpectra の画面
図 8 の分析は 1kHz 正弦波を標本化周波数 44.1kHz、分析区間 4096 サンプル(分析区間に約 93 周
期含まれる)としており THD は約 6.3%と表示されているが、最大絶対値が 0.5 の一様乱数をディザと
して用いるとき分析区間を限りなく長くすれば理論上は THD は 0 に収束し、WaveSpectra で設定可能
な最大の 131072 サンプルでは約 1.2%(もちろん THD+N は減らない)と表示される。逆に分析区間
を短くすれば THD は増え(WaveSpectra で設定可能な最小の 1024 サンプルでは THD は約 13%。同
じく THD+N が増えることはない)
、ディザの効能が平均操作に由来することが分る。図 7 右の条件に
より付加されたディザによる個別の量子化結果、少数(6 サンプル)の平均波形(p.2 図 3)が正弦波か
ら程遠いことに見る通りである。
ディザによる歪の低減の様子は加えた雑音の分布により異なる。図 9 は、振幅 1 の正弦波に左は最大
絶対値 0.3(実効値約 0.173)の一様乱数、右は実効値 0.3 の正規乱数をそれぞれ付加した結果で、正規
乱数によるディザ(図右)では乱数値が頭打ちではなく絶対値の大きい値まで分布が裾を引いている(こ
こでは Box-Muller 法を用いて生成している)ため、量子化後の平均値は微分が連続するなめらかな波
形となる。図 9 左、図 9 右と同じ条件に設定した WaveGene と WaveSpectra の画面を p.6 図 10、図
11 にそれぞれ示す。
図 9 ディザの分布の違いによる量子化後の平均値の違い
5
一様乱数(左)と正規乱数(右)
図 10 WaveGene で振幅 1 の正弦波に最大絶対値 0.3 の一様乱数のノイズを付加した例
図 11
WaveGene で振幅 1 の正弦波に実効値 0.3 の正規乱数のノイズを付加した例
図 12 は、
正弦波信号とディザのレベルを p.4 図 7 右と同じ条件で、
数値入力セレクタ ”zero level” で
画素値の割付を変更した例である。
図 12 図 7 右の設定で画素値の割付のみを変更した表示。単色(左)
、カラー(右)
ディザの付加による歪の低減は、視覚的には階調が滑らかになることに対応している。正弦波振幅 3
(設定可能な最大)
、周波数 0.5、位相 90°でディザ無し(左)、絶対値最大 0.5 の一様乱数ディザ付加
6
(右)の階調の違いを単色表示(図 13)
、カラー表示(図 14)のそれぞれについて示す。
図 13 最大振幅信号、周波数 0.5 位相 90°単色表示のディザ無し(左)、ディザ 0.5(右)
図 14 図 13 と同じ条件のカラー表示
小振幅正弦波の再生
図 15 は、量子化ステップの 1/2 未満である振幅 0.3 の正弦波信号単独(量子化後は 0 となる。図左)
と絶対値最大 0.75 の一様乱数ディザ(テキスト p.10 図 9 と同じ条件)を付加した場合(正弦波の特徴
を再現できている。図右)の比較で、p.8 図 16 は図 15 右と同じ条件に設定した WaveGene と
WaveSpectra の画面を示す。
図 15 振幅 0.3 の正弦波信号の量子化後。ディザ無し(左)
、絶対値最大 0.75 のディザ付加(右)
7
図 16 図 15 右に相当する WaveGene と WaveSpectra の画面
図 17 は p.7 図 15 右の条件で水平トグルスイッチ “mean/sample”、“mean range” と水平スライドを
操作してサンプル単独とサンプルの平均を表示した例で平均操作でのサンプル数の増加により正弦波
の特徴が現れる様子を示す。
図 17 図 15 右の条件で平均範囲による波形の変化
左からサンプル単独、6、11、21 サンプルの平均
図 18 は、信号とディザの振幅を p.7 図 15 右と同じ条件で画素値の割付を変えたもので単色(図左)
では図 15 右と比較して周期構造の判別が難しいが垂直スライド “frequency”で周波数を 4 とした p.9
図 19 では既定の青・黄の表示と同様に「正弦波」を認識できる。
図 18 信号とディザの振幅を図 15 右と同じ条件で値 0 を灰色に割付けた表示。単色(左)、カラー(右)
8
図 19 信号とディザの振幅を図 18 と同じ条件で周波数を 4 とした表示
9