LabVIEW によるリサンプリング参考プログラム
(最終改訂 2018/01/16)
書庫ファイル内容
LV_resampling.zipには本解説ファイル(ファイル名LV_resampling.pdf)とLabVIEWによるリサ ンプリング効果確認用の参考プログラムLV_resampling.viのLabVIEW2013版ソースと実行プログラ ム(実行には LabVIEW2013 版ランタイムエンジンが必要)が含まれている。実行プログラム(拡張 子.exe)を開く場合は同名の設定ファイル(拡張子.ini)および実行時ライブラリ lvanlys.dll を格納し た同梱のdataフォルダを同じ場所に置く。
LV_resamplingについて
ディジタルオーディオでは標本値を単に折線で結んだ波形を聞いていると誤解して「デジタルはカク カクで音が悪い」と評する人が少なくないが、実際には標本化された信号はDACでサンプルホールド と低域通過フィルタ(LPF)の処理により、図1(旧情報学実験Ⅱ課題②「オシロスコープと信号処理」
ガイダンススライド p.15掲載:ヘッドホンアンプ SONY PHA-1 の再生波形を USB オシロスコープ PicoScope4224で計測)に示す様にNyquist周波数未満では忠実に波形を再現している。
LV_resamplingは、正弦波と雑音を原信号としてリサンプリング条件を様々に変えてその変化を見る
ことによりサンプルホールドとLPF、真ピーク、補間の意味を確認するデモVIである。
図1 20kHz 0dBFS正弦波の標本化周波数44100Hz標本値とDACの再生波形
実行プログラム起動時(停止状態で開く設定でビルドしている)のフロントパネルをp.2図2に示す。
図2 LV_resampling.vi起動時のフロントパネル
表示内容
設定された信号の指定した標本列(起動時既定は4種全て)を、画面上部に時間軸、下部に周波数軸 でプロットしてグラフウィンドウに表示する。標本列は標本化周波数Fsによる原標本(”original”:白)、 リサンプル標本("resampled”:赤)、それぞれのLPF処理標本(”filtered”:緑、”filtered resampled”:
シアン)の4種で、時間軸グラフウィンドウの上には押しボタンSW(排他式:起動時既定は”original”)
で選択した標本の計測結果が表示される。LPF設定(窓関数、遮断周波数)とプロット指定の制御器は 時間軸、周波数軸両グラフの間に配置されている。プロットの色、ラインスタイル等は両ウィンドウ右 上の凡例を右クリックして項目を指定して変更できるが、起動時のプロット既定色に揃えている押しボ タンSWの色は変更できない。
時間軸プロットではリサンプリング処理による遅延のため、同じフレームのリサンプル標本と原標本 とが対応しない区間を生じる(図2上部で時間軸目盛 ”Time (in sampling period)” が0~38.75および 64以降の部分)。遅延量はリサンプリング時の補間設定により異なり、時間軸グラフウィンドウ右上に サンプリング周期1/Fsを単位として表示される(既定の設定では39)。
時間軸グラフウィンドウ下の押しボタン SW “HOLD” を押下すると(正弦波信号以外を選択時に絶 対値が設定閾値以上であるリサンプル標本が現れた場合も同様)信号のフレーム更新を停止して時間軸 グラフのパレットを表示し、グラフ上のカーソル移動、ズームイン等の操作が可能となる。"HOLD"状 態では、処理対象の原標本が(したがってリサンプル標本も同時に)固定されるのみで、LPF設定を変 更すればフィルタ処理された2種の標本列のプロットと計測結果は変化する。"HOLD"状態は"RESET"
の押下または画面左方の信号、リサンプリングの設定変更により解除される。
信号の設定
振幅1の正弦波と実効値1の3種類のノイズ(最大絶対値が√3の一様分布、絶対値1のM系列、
標準正規分布)から選択する。正弦波では、周波数(単位は標本化周波数 Fs:起動時既定は 1/4)、初 期位相(単位はπ:起動時既定は1/4)を数値スライドもしくは数値ボックスまたは垂直トグルSWを 間に挟んだ上の文字列制御器に数式で指定する(垂直トグル SW で式と値を選択する)。起動時の既定
リサンプリングの設定
リサンプリング周波数を文字列制御器に数式で(単位はFs:起動時既定は4、p.5図5では96/44.1 を指定)、表示標本数(1フレームの原標本数で最大値1024:起動時既定64)を数値ボックスにそれぞ れ入力する。補間の起動時既定の設定は、FIR フィルタ、エイリアス抑止 100dB(LabVIEW 既定の
120dBではタップ数が増え原標本とリサンプル標本の時間差が46/Fsに拡大し既定の表示標本数を大き
く取る必要があるため)、帯域0.4536Fs(20/44.1に相当するLabVIEWの既定値)としている。
サンプルホールド
図3は周波数Fs/8、初期位相0の正弦波をリサンプリング周波数16Fsの補間なし(原標本の値に強
制)の設定でリサンプリングしてサンプルホールドとLPF処理の過程を模式化した例である。
LabVIEWの歪率計測VIでは分析対象周波数の周期の10倍の長さの標本ブロックを必要としており
(正弦波信号を選択して表示標本数と周波数(Fs 単位)の積が 10 未満のとき計測結果表示右の警告 LED ”insufficient samples” を点灯させている)ここでは表示標本数を256としている。図は、”HOLD”
を押下し(時間軸グラフのパレットが表示される)、カーソルを第 2 波(註参照)の先頭に移動し、ズ ーム操作で 1 周期分を拡大表示した画面で、原標本(白の点)、サンプルホールド(補間無しの赤のリ サンプル標本)、LPF処理した出力(シアン)の関係を示している。
図3 補間無しのオーバーサンプリングによるサンプルホールド・LPFのシミュレーション
註:リサンプル標本のLPF処理(タップ数25のFIRフィルタ)では標本列の前後に各12標本が追加 される。時間軸表示グラフではこの追加標本を削除してプロットしているが、削除後の標本列(標本数 はリサンプル標本と同じ)にも影響が残るため図3では第1波ではなく第2波を拡大表示している。LPF 処理後のリサンプル標本列の両端各12標本(グラフにはプロットされている)は歪率計測VIへの入力 からは除いている(上方にスクロールすると表示される配列表示には含めている)。
真ピーク
周波数の整数倍が標本化周波数である正弦波信号では1周期分の標本列が固定され反復するため、標 本が0dBFS以下であってもサンプルホールド・LPF処理した出力は標本間(inter-sample)で0dBFS 相当のアナログ電圧を大きく超えDACが過大入力で歪む可能性がある。「音量を0dB近くまで上げて ノーマライズしたwavファイルをmp3に変換するとクリップして歪む」等の原因でもある。
標本間ピーク(ISP:Inter-Sample Peak)と0dBFSとのパワー比をdBスケールでdBTP(dB True
Peak)と表すとき、Nyquist周波数未満に帯域制限された信号では最大値は既定画面(p.2図2)の設
定条件での約3.01dBTPとなる(註参照)。
註:簡略化されたピークレベルメーターでは正または負の標本のみを使用して表示しているものがあり、
この場合、メーター表示0dBFSに対して最大では2倍(周波数Fs/3で、正側表示では初期位相π/6、
負側表示では初期位相 -π/6のとき)の約6.02dBTPとなる。
EBU(欧州放送連合)では放送用プログラム制作時のレベル管理を4倍オーバーサンプリングした真 ピークレベルメーターにより行い(真のピーク値とは理論上dB値で最大20log10 {sec (π/8) } ≒ 0.688 の誤差を生じるため)ピークを-1dBTPに抑えることを推奨している。
図4 値が±1のみであるM系列信号を4Fsでリサンプリングした例
Nyquist周波数未満に制限されていない信号では、真ピークは√2倍ではなく更に大きくなる。図4 はM系列雑音を選択して絶対値が既定閾値の2.4を超えるリサンプル標本が同一フレームに対応する原 標本のある区間(Timeが39以上)に現れた例で、このリサンプル標本(2.516204:約8dBTP)にカ ーソルを移動して付近を拡大して上方にスクロール(各標本列の内容の配列表示とカーソル位置の指標
補間精度
Windowsのオーディオエンジンの標本化周波数変換(SRC)はごく初期のDAC程度の精度であるた
め、旧情報学実験の音声ファイルを使用する課題では、サウンドカードの標本化周波数を使用する音声 ファイルの記録標本化周波数に合せていた。
SRCの精度は補間方法に関っている。標本化周波数44100Hzで既定設定の信号に相当する11025Hz、
初期位相π/4、0dBFSの正弦波をWaveGeneでwavファイルに保存し、これを商用波形編集ソフトウ ェア WaveLab、SoundForge により標本化周波数 96000Hz でリサンプリングした wav ファイルを WaveSpectraで計測するとTHD+Nが0.002%程度で実効値も-3.01dBFS(EBU基準)と正確である。
一方、内外のフリーの波形編集ソフトウェアでリサンプリングした結果は THD+N が 0.01%の
Audacityを除き十分とは言えず、中にはオプションで最高精度を選択しても実効値の誤差が2dB近く
THD+Nは15%を超えるものもある。
図 5 は、起動時既定の信号を 96/44.1Fs でリサンプリングして LPFを通した標本列の計測結果(1 フレームの原標本数、LPF 設定は起動時既定)を補間方法を変えて比較したものである。Windowsの オーディオエンジンのTHD+Nはこの中では線形とスプラインの中間に相当する。
図5 補間方法による変換誤差の違い:上から無し、線形、スプライン、FIRフィルタ
備考
● 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