LabVIEW によるディザ効果参考プログラム
(最終改訂 2018/01/10)
書庫ファイル内容
LV_dither.zipには本解説ファイル(ファイル名LV_dither.pdf)とLabVIEWによるディザ効果確認 用 の 参 考 プ ロ グ ラ ム LV_dither.vi の LabVIEW2013 版 ソ ー ス と 実 行 プ ロ グ ラ ム ( 実 行 に は
LabVIEW2013版ランタイムエンジンが必要)が含まれている。実行プログラムを開く場合は同梱の設
定ファイル(拡張子.ini)を同じ場所に置く。
LV_ditherについて
音声信号に信号とは相関の無いノイズを付加することにより小振幅の正弦波信号の高調波歪を減ら し量子化ステップの1/2未満の小振幅の正弦波信号をも表現できる(旧情報学実験Ⅰ課題⑦テキスト:
原理は例えば、テキストp.8図7、p.10図9を参照)。LV_ditherは、音声信号の値を画素値に対応させ て可視化し、パラメータを変化させてノイズの振幅、分布の違い、平均操作によりディザの効果を直感 的に確認するものである。ここではビット深度3ビットの7階調(表現可能な範囲はディジタルオーデ ィオと同様に正負対称の-3~+3)としている。
参考:旧情報学実験Ⅰ課題⑦「正弦波合成と音声ディザ」テキスト
http://www.ns.kogakuin.ac.jp/~ct13050/johogaku/1-7.Sine_wave_synthesis_and_dithering.pdf
図 1 LV_dither起動時の既定のフロントパネル画面
表示内容
LV_ditherの起動時既定のフロントパネルをp.1図1に示す。中央の正方形の2Dピクチャ(表示サ
イズ256×256)に正弦波(縦方向を時間として、秒単位で上端を 0、下端を 1とすれば標本化周波数
は256Hzとなる)の量子化された信号を表示し、縦のライン 1本がノイズを付加した信号の量子化結
果で、これを横に256例並べディザによるばらつきの様子を示している。右の縦長の2Dピクチャ(表
示サイズ32×256)には、γ=2.2で計算した横方向の平均画素値を表示し、下の横長の2Dピクチャ(表
示サイズ256×32)には量子化された("overlay”で”original”が ONのときは原信号)信号レベルと表 示色の対応スケール(左端が-3、右端が+3)と256例の量子化値の範囲(対応する整数のゾーン全体:
p.3図4左右比較参照)をプロットする。
これらの表示は、フロントパネル上方のトグルSW、右下のオーバレイ選択の排他押しボタンSWの 設定により異なり、各2Dピクチャ上の文字列表示器にその内容が表示される。フロントパネル右上の 水平トグルスイッチ ”mean/sample”(既定は OFF)ON ではオーバレイの対象は画面上部に表示され る水平スライドまたは数値ボックスで設定した指標の列となり、“mean/sample” OFFの状態でフロン トパネル左上の水平トグルスイッチ ”mean range”(既定はOFF)をONにすると、縦長の2Dピクチ ャに表示される平均対象は正方形の2D ピクチャ左端(指標0)から水平スライドで設定した指標の列 までの範囲(個数は指標値+1個)となる。水平スライドを表示して指標を入力するモードでは信号値 0のライン(時間軸に相当)は消え、同色のラインは指標を示すカーソル表示に充てる(p.3図3参照)。
押しボタンSW ”HOLD” をONではノイズを更新せず表示を固定(ノイズの種類を変更した場合は 新たに生成)する。
正弦波信号の設定
中央2Dピクチャ左右の数値スライドまたは上部の数値ボックスで振幅(範囲0~3:起動時既定は1)、 周波数(対数スケールで範囲0.5~8:起動時既定は1)および初期位相(単位度、起動時既定は0)を それぞれ設定する。
ノイズの選択
ノイズの種類は、フロントパネル左の3個の排他式押しボタンSWで一様雑音(”UNIFORM”:既定)、 正規雑音("NORMAL”:Box-Muller 法で生成)、M 系列(M-sequence:32 ビット整数で実装が容易 な原始多項式x31 + x3 + 1を使用)を切替え、ノイズの強度(振幅)は数値スライドまたは上部の数値ボ ックスで指定する(既定値は0.5)。指定値は、正規雑音(分散の平方根)、M系列(絶対値)ではその まま実効値となるが、一様雑音の既定では分布の最大絶対値(実効値はその 1/√3)を示す。雑音の実 効値を揃えて分布によるディザ効果の違いを比較するため、”UNIFORM”が ON のときは押しボタン SW ”rms in uniform”(ONで指定数値を実効値とする:起動時既定OFF)を表示している。
図2 表示色の選択による量子化レベル0と平均レベルの表示色の違い
表示色の選択
無音信号(レベル0)に対応する感覚的な表示色は黒(0x00)で、一方で音声信号は極性を(両耳受
聴の場合は左右同時に)反転しても音圧の刺激は変化せず、正負の信号には補色(例えば負を青、正を 黄)を割当てるのが適当と考えられる。このとき、無音信号にディザを加えた平均値が0となるのに対 し、画素の平均は灰色となりレベル0の黒には対応しない。LV_ditherではレベル0を黒、負を青、正 を黄とする既定の表示(正負の平均が信号値0の画素とは一致しないが視認性のためこれを起動時の既 定としている)の他に50%グレー(γ=2.2として0xBABABA)をレベル0に割当てる黒~灰~白の単 色(”MONOCHROME”)、シアン~灰~赤(絶対値が等しい正負の値に補色を割当てるためスペクトル の色順とは異なる)のカラー(”COLOR”)の2モードを設けている。p.2図2に各設定でのスケール、
無信号で最大絶対値 1 の一様雑音を付加した場合の平均色を示す。信号 0 の画素に 50%グレー 0xBABABAを割付ける設定では平均色のRGB各成分は、ほぼ0xBAに等しくなるが、信号0の画素 に黒を割付ける設定では0x3E~0x4B程度となる。
図3 水平スライドを表示した表示設定例 指標50の列(左) 指標0~5の6列の平均(右)
高調波歪低減のデモ
図4は、付加ノイズ無しの既定信号(振幅が量子化ステップに等しい正弦波)の原信号と量子化後の 波形の違いを示している。p.4図5は、WaveGeneで振幅1の「サイン波」を再生し、これをWaveSpectra を録音状態にして表示(オーディオインタフェースのループバック機能を使用してディジタル入力して いる)した例で図4右の波形に対する高調波歪の実際を示している。
図4 付加ノイズ無しの既定信号のオーバレイ 原信号(左)、 量子化後(右)
図5 図4右の条件に相当するWaveGeneとWaveSpectraの画面
既定の絶対値最大0.5の一様雑音をノイズとして加えた場合、量子化の期待値は(従って平均すれば)
原信号と一致する。起動時の既定と同じ条件に設定したWaveGene(WaveGeneのメニューにある正規 乱数による「ホワイトノイズ」ではなく、旧情報学実験Ⅰ課題⑦「正弦波合成と音声ディザ」で使用し た ”uniform_0dB_16b.wav” を「ユーザー波形」に登録して再生する)とWaveSpectraの画面で見る通り 高調波歪は大幅に低減している(図6)。”uniform_0dB_16b.wav”は、次のURLにある。
http://www.ns.kogakuin.ac.jp/~ct13050/johogaku/dither.zip
図6 図1の設定条件に相当するWaveGeneとWaveSpectraの画面
図6の分析では標本化周波数44.1kHz の1kHz正弦波は、分析区間4096サンプルに約93周期含ま
れTHDは約6.3%と表示されているが、最大絶対値が0.5の一様雑音をディザとして用いるとき分析区
間を限りなく長くすれば理論上は THD は 0 に収束する。実際、WaveSpectra で設定可能な最大の 131072サンプルでは約1.2%(もちろんTHD+Nは減らない)と小さくなる。逆に分析区間を短くすれ ばTHDは増え(WaveSpectra で設定可能な最小の1024サンプルではTHDは約13%と大きくなる。
同じくTHD+N が増えることはない)、ディザの効能が平均操作に由来することが分る。既定の設定で
付加されたディザによる個別の量子化結果、少数(6サンプル)の平均波形(p.3図3)が正弦波から程 遠いことに見る通りである。
ディザの付加による歪の低減は、視覚的には階調が滑らかになることに対応している。正弦波振幅3
(設定可能な最大)、周波数0.5、位相90°で付加ノイズ無し(左)、絶対値最大0.5の一様雑音付加(右)
の階調の違いを単色表示(図7)、カラー表示(図8)のそれぞれについて示す。
図7 単色表示最大振幅信号、周波数0.5位相90°の付加ノイズ無し(左)、既定ノイズ付加(右)
図8 信号とノイズが図7と同じ条件でのカラー表示
備考
● LabVIEW2013ランタイムエンジンは下記のURLにある。
http://ftp.ni.com/support/softlib/labview/labview_runtime/2013/Windows/LVRTE2013std.exe
● ソースVI、実行プログラム(スタンドアロンアプリケーション)は何れも情報科学研究教育センタ ー前システムのVirtual Desktop(OSはWindows 7であるがシステムフォントはWindows XPと
同じMS UI Gothicを採用)に合せて作成されており、設定ファイルには以下の4行が書かれてい
る。
[VIファイル名(拡張子無し)]
appFont="MS UI Gothic" 12 dialogFont="MS UI Gothic" 12 systemFont="MS UI Gothic" 12