Comments
Description
Transcript
ディザ効果のLabVIEW参考プログラム
LabVIEW によるディザ効果参考プログラム (最終改訂 2016/07/24) 書庫ファイル内容 LV_dither.zip には本解説ファイル(ファイル名 LV_dither.pdf)と LabVIEW によるディザ効果確認 用の参考プログラム(以下「LV_dither」と言う。 )2 種類計 4 本が含まれている。拡張子を除いたファ イル名は LV_dither_xxx が基本版、LV_dither_M_xxx が拡張版で、それぞれ xxx は情報科学研究教育 センターの対応する起動 OS(VDT:Virtual Desktop 用と LPC:Local PC 用)を示す。 LV_dither について 音声信号に信号とは相関の無いノイズを付加することにより小振幅の正弦波信号の高調波歪を減ら し量子化ステップの 1/2 未満の小振幅の正弦波信号をも表現できることは情報学実験Ⅰ課題⑦「正弦波 合成と音声ディザ」テキスト(以下「テキスト」と言う。)に示す通り(原理は例えば、テキスト p.8 図 7、p.10 図 9 を参照)である。LV_dither は、音声信号の値を画素値に対応(註参照)させて可視化 し、LabVIEW プログラムのパラメータを変化させる(情報学実験Ⅱ課題⑦「画像情報処理」で学修す る)ことでノイズの振幅、種類の違い、平均操作によりディザの効果を直感的に確認するものである。 ここではビット深度 3 ビットの 7 階調(表現可能な範囲はディジタルオーディオと同様に正負対称の-3 ~+3)としている。 ノイズの分布は、基本版では垂直トグルスイッチで一様分布と正規分布とを切替え、M 系列を追加し た拡張版では各分布に対応した OK ボタンで切替えるが(画素値の選択も同様) 、ここでは基本版につ いて解説し、拡張版については p.9 備考でごく簡単に触れる。以下の図は VDT 版でのキャプチャ画像 に基づく。 註:人間の聴覚では音声信号の極性を(両耳受聴の場合は左右同時に)反転しても音圧の刺激は変化せ ず、信号 0 は画像では黒画素(0x00)に割当てるのが適当と考えられ、この場合正負の信号には補色(例 えば負を青、正を黄)を割当てることになる。無音信号にディザを加えた平均値が 0 となるのに対し、 この様に対応した画素は平均して灰色となり 0 には対応しない。LV_dither では信号 0 の画素に 0x00 以外に正負の平均(γ=2.2 として 0xBABABA)を割付けるモードを設けている(p.2 図 2 参照) 。 LV_dither の起動時のフロントパネルを p.2 図 1 に示す。中央部に配置された 3 個の表示枠の上には ラベルに代えて設定に応じた表示内容を示す文字列表示器を配置している。正方形の表示枠(実行速度 を考慮して情報学実験Ⅱ課題⑦「画像情報処理」と同じ 256×256 としている)に正弦波の量子化され た信号を表示し、縦が時刻(上端が 0、下端が 1 で単位を秒とすれば標本化周波数は 256Hz となる)で 縦の 1 本のラインがディザを付加した信号の量子化結果で、これを横に 256 例を並べディザ付加による ばらつきの様子を示している。 信号表示枠の下の横長のスケール表示枠には割付けられた画素値によるスケール(左端が-3、右端が +3)を表示する。画素値の割付は、フロントパネル左下の数値入力セレクタ(ラベル zero level)で切 替え、0 では青~黒~黄(p.2 図 2 右に示す通り、正負の平均が信号値 0 の画素とは一致しないが視認 性からこれを起動時の既定としている) 、1 で黒~灰~白、2 でシアン~灰~赤(スペクトルの色順とは 異なるが絶対値が等しい正負の値に補色を割当てるため)としている。p.2 図 2 に各設定でのスケール (図左) 、無信号で一様乱数最大振幅のディザを付加した場合の平均色(図右)を示す。信号 0 の画素 に 0xBABABA を割付ける設定 1、2 では平均色の RGB 各成分は、ほぼ 0xBA となるが、信号 0 の画素 に 0x00 を割付ける設定 0 では 0x3E~0x4B 程度となる。 1 図1 図 2 スケール(左) LV_dither 起動時の既定の画面 無信号一様乱数最大振幅ディザでの信号表示枠右上端と個別表示枠(右) 信号表示枠右の縦長の個別表示枠には、既定では信号枠の横方向全体の平均(画素値の平均はγ=2.2 で計算している)を表示するが、フロントパネル右上の水平トグルスイッチ(ラベル mean/sample。既 定は OFF。水平トグルスイッチ ”mean range” に優先する)を ON にすると画面上部の水平スライド で設定した指標の列を表示する(p.3 図 3 左) 。また、水平トグルスイッチ “mean/sample” を OFF の 状態でフロントパネル左上の水平トグルスイッチ(ラベル mean range。既定は OFF)を ON にすると、 信号枠左端(指標 0)から水平スライドで設定した指標の列までの範囲(列は指標値+1個)の平均値 を表示する(図 3 右)。このとき、信号表示枠とスケール表示枠の表示内容は、垂直トグルスイッ チ ”overlay” 、水平トグルスイッチ ”original/quantized” (後述)の設定により異なり、p.3 図 3 はこ れが共に ON での表示例である。 信号表示枠右下の垂直トグルスイッチ(ラベル overlay。既定は OFF)を ON にすると信号表示枠に 信号波形、スケール表示枠に信号範囲をオーバレイでプロットする(図 3 以下では ON に設定)。プロ ットする内容はその右の水平トグルスイッチ(ラベル original/quantized 。既定は OFF)および上述 の水平トグルスイッチ “mean/sample”、“mean range” と両スイッチの間にある水平スライドの設定に より異なる。 2 図 3 個別表示枠の表示設定例。 指標 50 の列(左) 指標 0~5 の列の平均(右) 水平トグルスイッチ “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.6 図 9 右を除き、一様乱数に設定している。 図 4 ディザ乱数の選択による目盛表示の切替 一様乱数(左) 正規乱数(右) ディザ用の乱数は常時更新されるため、たとえば無信号でディザを付加したとき(電界強度が一定以 下の)アナログ TV 放送のいわゆる「砂嵐」 (snow noise)画面の様になるが、個別表示枠右の垂直ト グルスイッチ(ラベル hold。既定は OFF)を ON にすると乱数生成を固定(ON の状態でも垂直トグ ルスイッチ”normal” を操作して乱数を切替えたときは当該種類の乱数を一度生成する)して静止画に できる(図 3 以下では ON に設定) 。 3 高調波歪の低減 図 5 は、起動時の既定画面から、垂直トグルスイッチ ”overlay” を ON に、次いで水平トグルスイッ チ ”original/quantized” を ON にして、振幅が量子化ステップに等しい正弦波の原信号と量子化後の波 形の違いを示している。 図 6 は、WaveGene で振幅 1 の「サイン波」を再生し、これを WaveSpectra を録音状態にして表示(オ ーディオインタフェースのループバック機能を使用してディジタル入力している)した例で図 5 右の波 形に対する高調波歪の実際を示している。 図 5 トグルスイッチ ”overlay” を ON の表示。オーバレイは左が原信号、右が量子化後 図 6 図 5 に相当する WaveGene と WaveSpectra の画面 p.5 図 7 は、垂直スライドで一様乱数ディザの絶対値最大を 0.2(左) 、0.5(右)にそれぞれ設定した 例で、図右では量子化後の平均が原信号(図 5 左のオーバレイ)と変らないことが分る(最大絶対値が 0.5 の一様乱数をディザとして用いるとき、ディザを付加して量子化した期待値は原信号の値に等しく なる。正規乱数をディザとして用いるとき、この様な性質は無い) 。 実際、図 7 右と同じ条件に設定した WaveGene(正規乱数による WaveGene の「ホワイトノイズ」ではな く、実験で使用した ”uniform_0dB_16b.wav” を「ユーザー波形」に登録する)と WaveSpectra の画面で 見る通り高調波歪は大幅に低減している(p.5 図 8) 。 4 図 7 振幅 1 の正弦波にディザを付加した例。一様乱数絶対値最大 0.2(左)、0.5(右) 図 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.3 図 3)が正弦波から程遠いことに見る通りである。 ディザによる歪の低減の様子はディザとして加えたノイズの分布により異なる。p.6 図 9 は、振幅 1 の正弦波に左は最大絶対値 0.3(実効値約 0.173)の一様乱数、右は実効値 0.3 の正規乱数をそれぞれ付 加した結果で、正規乱数によるディザ(図右)では乱数値が頭打ちではなく絶対値の大きい値まで分布 が裾を引いている(ここでは Box-Muller 法を用いて生成している)ため、量子化後の平均値は微分が 連続するなめらかな波形となる。それぞれ p.6 図 9 左、図 9 右と同じ条件に設定した WaveGene と WaveSpectra の画面を p.6 図 10、図 11 にそれぞれ示す。 5 図 9 ディザの分布の違いによる量子化後の平均値の違い 一様乱数(左)と正規乱数(右) 図 10 WaveGene で振幅 1 の正弦波に最大絶対値 0.3 の一様乱数のノイズを付加した例 図 11 WaveGene で振幅 1 の正弦波に実効値 0.3 の正規乱数のノイズを付加した例 p.7 図 12 は、 正弦波信号とディザのレベルを p.5 図 7 右と同じ条件で、数値入力セレクタ ”zero level” で画素値の割付を変更した例である。 6 図 12 図 7 右の設定で画素値の割付のみを変更した表示。単色(左) 、カラー(右) ディザの付加による歪の低減は、視覚的には階調が滑らかになることに対応している。正弦波振幅 3 (設定可能な最大) 、周波数 0.5、位相 90°でディザ無し(左)、絶対値最大 0.5 の一様乱数ディザ付加 (右)の階調の違いを単色表示(図 13) 、カラー表示(図 14)のそれぞれについて示す。 図 13 最大振幅信号、周波数 0.5 位相 90°単色表示のディザ無し(左)、ディザ 0.5(右) 図 14 図 13 と同じ条件のカラー表示 小振幅正弦波の再生 7 図 15 は、量子化ステップの 1/2 未満である振幅 0.3 の正弦波信号単独(量子化後は 0 となる。図左) と絶対値最大 0.75 の一様乱数ディザ(テキスト p.10 図 9 と同じ条件)を付加した場合(正弦波の特徴 を再現できている。図右)の比較で、図 16 は図 15 右と同じ条件に設定した WaveGene と WaveSpectra の画面を示す。 図 15 振幅 0.3 の正弦波信号の量子化後。ディザ無し(左) 、絶対値最大 0.75 のディザ付加(右) 図 16 図 15 右に相当する WaveGene と WaveSpectra の画面 図 17 は図 15 右の条件で水平トグルスイッチ “mean/sample”、“mean range” と水平スライドを操作 してサンプル単独とサンプルの平均を表示した例で平均操作でのサンプル数の増加により正弦波の特 徴が現れる様子を示す。 図 17 図 15 右の条件で平均範囲による波形の変化 左からサンプル単独、6、11、21 サンプルの平均 8 図 18 は、信号とディザの振幅を p.8 図 15 右と同じ条件で画素値の割付を変えたもので単色(図左) では図 15 右と比較して周期構造の判別が難しいが垂直スライド “frequency”で周波数を 4 とした図 19 では既定の青・黄の表示と同様に「正弦波」を認識できる。 図 18 信号とディザの振幅を図 15 右と同じ条件で値 0 を灰色に割付けた表示。単色(左)、カラー(右) 図 19 信号とディザの振幅を図 18 と同じ条件で周波数を 4 とした表示 備考 拡張版ではノイズの分布に M 系列(原始多項式は 32 ビット整数で実装が容易な x31 + x3 + 1 を使用し ており、周期は 231-1 である)が追加され、各分布は対応する OK ボタンの押下で選択する。ボタンは 上から正規乱数、一様乱数(起動時の既定) 、M 系列の順で、押下したボタンの右の LED が点灯する。 画素値の割付についても数値入力セレクタを排して同様に OK ボタンで選択する仕様に変更され、量子 化値 0 に対する割付を左から黒(既定) 、単色スケールの灰、カラースケールの灰としている。 M 系列ノイズはテキスト p.9 図 8 右下段に見る通り実効値と標本ピーク値が等しい、即ち全ての標本 の絶対値が等しく、垂直スライドで指定するディザ振幅では絶対値(かつ実効値)を示す。一様乱数と 正規乱数で同じ実効値に対するディザ効果の違いを見るには、基本版では垂直スライドを操作して振幅 を√3 倍だけ変更する必要があった。このため、拡張版では一様乱数の場合にもディザ振幅の数値とし て実効値を指定する垂直トグルスイッチ(ラベル rms in uniform:既定では OFF で最大絶対値を指定) を基本版でノイズ分布切替の垂直トグルスイッチがあった位置に配置している。その他の仕様は基本版 と同じである。起動時の既定の設定画面を p.10 図 20 に示す。 9 図 20 拡張版 LV_dither の起動時の既定の画面 p.4 で述べた様に、最大絶対値が 0.5 の一様乱数(実効値は 1/2√3≒0.2887)をディザとして用いる とき、ディザを付加して量子化した期待値は原信号の値に等しくなる。図 21、p.11 図 22、23 はこの実 効値のノイズに対する量子化平均がノイズ分布により異なる様子を示す。ここでは違いが分りやすい様 に正弦波信号振幅を 2、周波数を 0.5、初期位相を 90°としている。絶対値が全て等しく正負等確率(周 期が奇数であるため、正確には 1 周期の間で正が負よりも 1 個だけ多くなる)である M 系列では、p.10 図 22 右に見る様に平均操作(ここでは 256 例)をしても滑らかになることはなく離散値しか取り得な いことが分る。 図 21 原信号(左)と実効値 1/2√3 の一様乱数を加えた量子化平均(右)は一致する 10 図 22 図 21 と同じ実効値のノイズによる量子化平均 正規乱数(左) 、M 系列(右) 図 23 は、各分布での指標 0~20 の 21 サンプルの量子化平均を示す。 図 23 各分布での 21 サンプルの量子化平均 一様乱数(左)、正規乱数(中) 、M 系列(右) 11