(7)正弦波合成と音声ディザテキスト

正弦波合成と音声ディザテキスト
(最終改訂
2016/03/16)
実験の目的
CD 等のディジタルオーディオ(註)では、連続に変化する物理量である音声信号の電圧
を時間的に離散化(標本化)すると同時にその量の値を離散化(量子化)している。前者
では周波数帯域が制限され CD の規格では 20kHz を記録上限に設定している。後者では量
子化雑音の発生によりダイナミックレンジが制限されるが、音楽コンテンツはパッケージ
化するとき、最終的にディザを施して量子化しており、本課題では 8 ビットに制限したと
きのダイナミックレンジとディザの効果を聴感とスペクトルにより確認し、AD 変換につい
ての理解を深めることを目的とする。
ダイナミックレンジ、S/N 比(信号対雑音比:signal-to-noise ratio)等の値、更には音
圧レベル、騒音レベル等の単位には人間の感覚と整合した対数スケールであるデシベル(課
題②「交流信号と共振回路」テキスト p.8 註参照)が用いられるが、WaveGene の練習課
題として、デシベルに慣れる目的で簡単な周期波形の正弦波合成を併せて行う。本課題は
後期課題の「オシロスコープと信号処理」への準備課題としても位置付けられる。
註:日常用語では digital の日本語表記に「デジタル」を用いるが音響、電気分野では現在
も「ディジタル」が主流であり、本テキストでは「ディジタル」を用いる。
注意
本テキストでは実験を行う上で必要な項目について記述しており、フーリエ級数等の詳細
についてはディジタル信号処理の教科書に譲る。
本課題では PC のサウンド機能を使用しており、課題②と同様に Local PC を使用する。
(課題②テキストの注意参照)ログインで選択する OS を間違えないこと。
実験ノート以外に用意するもの
イヤホン(JIS 用語でヘッドホンを含む)
USB メモリ
事前準備
USB メモリに、本課題で使用する WaveGene/WaveSpectra(既に課題②で使用している
が、ヘルプファイルに目を通し使用法を十分に理解しておくこと)、ディザ効果の確認に使
用したい音楽・音声の wav ファイル(p.13 Ⅱ.音声ディザ編実験手順0節参照)、dither.zip
(作業用の 4 個の音声ファイルを圧縮したもの、57.2MiB:情報学実験のページからダウン
ロードする)を保存しておく。実験手順の最後まで目を通し、全体の作業の流れと意味に
ついて理解しておくこと。本課題は、3.5φステレオ音声ケーブル(秋葉原で¥150 程度)
があればカフェテリア PC、個人所有 PC でも全ての作業が可能である。
使用機器・部品類
3.5φステレオ音声ケーブル(両端が 3.5φ3 極プラグ)
【表紙の交付を受けた後、TA から
受取る。十分な準備には必要なものであり、再実験日には各自で用意すること】
1
情報科学研究教育センターPC Local PC でログインすることに注意。
使用ソフトウェア
WaveGene/WaveSpectra
http://efu.jp.net/
http://efu.jp.net/soft/wg/WG150.ZIP
(オーディオ帯域信号発生器)
http://efu.jp.net/soft/ws/WS151.ZIP (リアルタイムスペクトラムアナライザ)
表紙交付基準
以下の事項の全ての完成を確認して表紙を交付する。
「キャプチャ画像」は、それぞれを
単独の画像ファイル(拡張子は.png が望ましい)として保存しておくこと。元画像が存在
せずまとめて文書ファイルに貼られた物は、個別の保存時刻が確認できないことから作業
を行った証拠として不十分であり認めない。レポート作成については、実験手順中の記述
の他、本テキスト末尾の備考 p.20「レポート作成について」を参照のこと。
三角波、矩形波を合成した WaveGene の各「サイン波」の周波数、振幅(dB 値)、位相(三
●
角波の場合)
【級数展開の各項(M=1,3,5,…)を WaveGene の Wave1~Wave8 の何れに
設定したかを明記すること。実験ノートで確認する】
合成した三角波、矩形波を再生中の WaveGene のキャプチャ画像【この項目のみ PC の
●
ディスプレイに表示して確認する】
保存した三角波、矩形波を再生中の WaveSpectra のキャプチャ画像(左右両チャンネル)
●
【実験ノートで保存したファイル名(拡張子を含む)の確認】
2 種類のノイズファイル(「ホワイトノイズ」振幅 0dB、
「M 系列ノイズ」振幅 -10.88dB)の保
●
存【実験ノートで保存したファイル名(拡張子を含む)とファイルサイズ(プロパティで
表示されたバイト単位の値)を確認する】
前項の 2 種類のノイズファイルと uniform_m6_11dB_16b.wav(dither.zip 中にある)
●
を再生中の WaveSpectra のキャプチャ画像【実験ノートで保存したファイル名(拡張子
を含む)の確認】
音楽・音声ファイルの 2 種類の再生レベルと、それぞれが最も自然に聞き取れる一様雑
●
音(dither.zip 中にある uniform_0dB_16b.wav)のレベル【どの様に聞こえたかその印
象も記録すること。実験ノートで確認する】
Ⅰ.正弦波合成編
周期波形はフーリエ級数展開により正弦波(ここでは位相を含めた概念で sin と cos を総
称している)の重ね合せで得られる。本課題では、フリーの信号生成ソフト WaveGene を
用いて三角波と矩形波を合成し、不連続点の有無による収束の違いを確認する。周期の両
端を三角波では値が 0 の点、矩形波では値が不連続となる点に選べば、何れも奇関数とな
り cos を使用せず sin のみで合成できる。また関数を f (x )、周期を 2πとするとき f (x +π)
=-f (x )の形であり、基本波(sin x)と奇数次の高調波(sin 3x、sin 5x 等)のみから成る。
ただし、以下に見る様に係数が負の場合には WaveGene で位相の指定が必要となる。
興味のある人は MATLAB(情報学基礎セミナーで実習を行った。後期の情報学実験Ⅱ②
「オシロスコープと信号処理」でも使用する)の参考ファイル sq_and_triangle.m を情報
学実験のページからダウンロードして実行することを推奨する。
2
実験手順
1.フーリエ級数展開の各項の係数(各正弦波成分の振幅)をデシベルで表す。
WaveGene で生成する信号の振幅(WaveGene では絶対値の最大を意味)は、既定では
ディジタル値として表現可能な最大値を基準の 0dB として dB で指定する(これを dBFS:
decibels relative to full scale という。パラメータ指定の「dB」を右クリックして指定方法
を変更することで直接「数値」、または最大値に対する百分率「%」による入力を選ぶこと
もできるが、本実験は実験の目的に記した通り、デシベルの理解のため、「数値」、「%」で
はなく必ず「dB」で入力する)。
振幅 1、周期 2πの三角波の級数展開はプログラムの文の形式で示すと(BASIC での例。
PI は予約語で円周率πを意味する)N 次高調波までの和を S に代入する場合、
S=0
FOR M=1 TO N STEP 2
LET S=S+SIN(M*PI/2)*8/PI^2/M^2*SIN(M*X)
NEXT M
の様になり、SIN(M*X)の係数は絶対値が 1/M2 で減少するため収束は速く、ここでは最初の
5 項(M=1,3,5,7,9)のみを用いる。WaveGene の「サイン波」の振幅で指定する dB 値として
(振幅 1 を WaveGene の 0dB とするため)SIN(M*X)の係数の絶対値の常用対数の 20 倍を
求め、これを実験ノートに記録する。M=3,7 では係数が負であり、その絶対値を振幅とすれ
ば「サイン波」の位相はπとなる。
図 1 は和を取る項数を 1 から 5 まで変化させたときの収束の様子を MATLAB プログラム
sq_and_triangle.m で示したものである。sq_and_triangle.m に sin(m*x)の係数の絶対値
の常用対数(MATLAB での関数名は log10 である)の 20 倍を求める処理を追加すれば関
数電卓(PC のソフトウェアを含む)
に係数の絶対値を個別に入力する必要は無い。
MATLAB
の実行には Virtual Desktop でログインする必要がある。
図 1 1~5 項の正弦波による三角波の級数展開
同様に振幅 1、周期 2πの矩形波の級数展開をプログラムの文の形式で示すと(BASIC
での例)、
3
LET
S=0
FOR M=1 TO N STEP 2
LET S=S+4/PI/M*SIN(M*X)
NEXT M
の様になり、SIN(M*X)の係数(全て正)は 1/M で減少するのみであるため収束は遅く、こ
こでは、最初の 8 項(M=1,3,5, ... 15)を用いる。図 2 は和を取る項数を 1 から 8 まで変
化させたときの収束の様子を MATLAB プログラム sq_and_triangle.m で示したものである。
三角波の合成とは異なり合成結果の絶対値が 1 を超える部分があり、特に本来の矩形波で
は不連続となる 0、πの近傍で絶対値 1 を大きく超える部分は項の数を増やしても消えない
ことが分る。これは Gibbs 現象と呼ばれ、項の数を限りなく増やしたとき合成結果の絶対
値の最大は Si(π)*2 /π(≒1.17898)に収束する(Si は正弦積分)。
図 2 1~8 項の正弦波による矩形波の級数展開
従って、振幅 1 を WaveGene の 0dB としたのでは合成結果がレンジからあふれるため、
WaveGene の「サイン波」の振幅を SIN(M*X)の係数の常用対数の 20 倍よりも少し小さく取る
必要がある。次節の例では 3.01dB 小さく取っているが、図 2 からも明らかな通り、あふ
れさせないためには単純に SIN(M*X)の係数から 4/πを除いた 1/M の常用対数の 20 倍を求
めればよく、これを実験ノートに記録する。係数はすべて正なので位相は何れも 0 である。
2.WaveGene の「サイン波」を合成し、ファイルに保存する。
WaveGene の「ビット長」を 16(既定のまま)にする。WaveGene では Wave1 から Wave8
を用いて一度に 8 波を合成でき、矩形波ではそのすべてを用いて 8 項の合成が可能(p.6 図
4)であるが、位相を設定できるのは Wave1 と Wave5 だけであるため、三角波の場合は
Wave1~Wave5 を用いて最初の 5 項を合成する(p.5 図 3)。ここでは、周波数を WaveGene
の波形表示で時間軸目盛(単位は ms)が十進値で観察しやすい 50Hz とする(秒単位の時
間を t とすると、級数展開で SIN(M*X)の X が 100πt に相当する。説明の図では 60Hz とし
ており、図のパラメータをそのまま使用することはできない)。従って、三角波では 450Hz
4
(説明の図では 540Hz)、矩形波では 750Hz(同じく 900Hz)までの「サイン波」の合成とな
る。
各 Wave を順次 OFF から L+R に切替えて項を追加しながら比較してもよいが、両チャ
ンネルで合成の様子を対比できる様に、三角波の場合には最初の 1 項のみ L+R、矩形波の
場合には最初の 2 項のみ L+R として他の Wave は L のみに出力する設定とする。
各 Wave で「サイン波」を選び、周波数および前節で求めたデシベル値を各波の周波数(既
定では Hz 指定)振幅欄(既定では dB 指定)に入力する。Hz 値、dB 値には、メニューの
リストにはない 440.5、-12.34 の様な小数値も入力できる。三角波では Wave1 と Wave5
に位相を設定する。図 3 では位相と振幅、図 4 では振幅の値を赤でマスクしてある。
再生ボタン(►)をクリックして波形を確認(PrtSc でキャプチャを取ること)したら、
「Wave ファイルへ出力」
(
)でファイルに保存(既定では再生時間 10 秒)する。保存した
ファイルを Wave1 または Wave5 の「ユーザー波形」として読込み、「サイン波」を新たに加え、
これを反復することにより順次項の数を増やすこともできる(本テキスト末尾の備考 p.20
「レポート作成について」を参照)
。
註:WaveGene では波形の振幅を dB 値で指定するが、これは波形の絶対値の最大(標本化
されるため、例えば正弦波の最大値を取るディジタル標本値が存在するとは限らないが DA
変換後のアナログ波形では正しく正弦波の最大値が再現される)であり、異なる波形の波
の間では直接パワーの比を示すものではない。波形メニューの「矩形波」、「三角波」の振
幅 0dB のパワーは「サイン波」の振幅 0dB のパワーと比較してそれぞれ+3.01dB(10log102)、
-1.76dB(10log10(2/3))である。
図 3 WaveGene を用いた正弦波 5 波による三角波の合成
5
図4
WaveGene を用いた正弦波 8 波による矩形波の合成
3.保存した合成波形の音声ファイルを WaveSpectra で再生してスペクトルを観察する。
前節で保存した音声ファイルを WaveSpectra で再生して左右両チャンネルのスペクトル
(PrtSc でキャプチャを取ること)を観察する(図 5、図 6)。三角波と比べて矩形波では高
調波のパワーが次数を上げても大きなまま残り、収束が遅いことが分る。スペクトルがな
だらかな山型に見えるがこれは既定の設定(FFT のサンプルデータ数 4096)での周波数分
解能によるもので、サンプルデータ数を最大の 131072 に(同時に Wave の横軸倍率を×20
に変更)して確認すること(キャプチャは必須ではない)
。
図 5 WaveSpectra で再生した合成三角波(左は 5 波合成、右は基本波のみ)
6
図 6 WaveSpectra で再生した合成矩形波(左は 8 波、右は 2 波の合成)
Ⅱ.音声ディザ編
量子化(値の離散化)により表現可能な信号には絶対値の大きい方にも小さい方にも限
界を生じる。量子化ビット数(ビット深度)を N とするとき、ダイナミックレンジは N×
20 log102 dB とされる。これは、最大振幅の正弦波のパワー(註参照)と量子化誤差が一様
に分布する場合の量子化雑音のパワーとの比(S/N 比)で、1 ビットにつき約 6dB
(6.0206dB)、
16 ビットでは 96.33dB となる。実際には、最大振幅の正弦波に対しては量子化誤差の分布
は一様ではなくこれに 3/2 の常用対数の 10 倍(同じ振幅の正弦波と三角波のパワー比でも
ある)の 1.76 を加えた値が S/N 比となる。
註:音声信号のパワーを dB で表す場合(記号は標本値と同じ dBFS)、自乗の平均値の平
方根である実効値(rms 値:rms は root mean square の略で定義そのものを示している。
課題②テキスト p.1 註参照)を用いるが、基準に最大振幅の矩形波(全ての標本値が 0dBFS)
の実効値を用いる EBU 基準と最大振幅の正弦波(DA 変換された結果の最大値が 0dBFS)
の実効値を用いる AES 基準とは 3.01dB(3.01 は正確には 10log102)だけ異なる。表現可
能な波形の最大を基準とするか、基本波形である正弦波の最大を基準とするか優劣の議論
が分れる。現在は AES 基準が主流であるが、電波産業会(ARIB)では正弦波以外のディ
ジタル信号の実効値には dBFSrms を用い EBU 基準の値を使用している。WaveSpectra
のレベルメーター(黄色のバーが標本値、緑のバーが実効値を示し、赤のラインと右端の
数値は標本値のピークを示す)の設定では EBU 基準を既定としているが、Wave の「RMS
値」の設定で「フルスケール Sin 波の値を 0dB とする」にチェックを入れて AES 基準による表示
もできる。
実際の表現では(16、24 ビットでは 2 の補数表現、8 ビットではげたばき表現)最大振
幅は 2^(N-1)ではなく 2^(N-1)-1 である(註参照)。N =16 ではその違いは 0.000265dB
と無視できる値であるが、N =8 では 0.068dB の差があり、ダイナミックレンジは 48.165dB
ではなく 48.097dB となる。本編の実験(p.16 3節の作業)では正弦波の信号レベルを順
次下げて行くときに消失するレベルからその違いを確認できる。
7
註:負の値は、値としては-2^(N-1)まで表現可能であるが、この値は符号反転ができな
いため編集時に極性反転操作の可能性のあるディジタルオーディオでは使用しない。
信号と相関の無い雑音(ディザ)を加えることで、量子化ステップの限界を超えてより
小振幅の信号を記録再生できることを模式的に見る。振幅(Ⅰ.正弦波合成編では級数展
開の項の係数 1、4/πをそれぞれ三角波、矩形波合成の基準の 0dB としたが、ここでは量子
化の分解能を 1 とする)が 1/2 未満の正弦波を考える。これを単純に量子化すると全ての標
本値が 0 となり無音となるが、これに適当な値のランダムな雑音を加えることにより絶対
値が 1/2 以上となり量子化した値が 0 でない標本が現れる。その確率は元の信号の値を反映
しており、DA 変換後に(雑音と信号に相関が無い前提では)元の信号を明確に聞き取るこ
とができる。図 7 は、振幅 0.3 の正弦波の 1 周期を示し(太い赤)、これに±0.75 の範囲に
一様に分布する雑音(上下限を細い青で示す)を加えたとき、標本値が 0、+1、-1 とな
る確率をそれぞれ細い赤、太い青、太い緑で描いたものである。
図 7 振幅 0.3 の正弦波に絶対値最大 0.75 の一様な雑音を加えたときの各標本値の確率
一様な雑音は、与えられた範囲で値の区間当りの生成確率(確率密度関数)が一定で相
関の無い一様乱数(算術演算による疑似乱数では C 言語の rand、VB の rnd が相当)を用
いて簡単に作ることができ、通常の波形編集ソフトのツールで用意されている白色雑音
(white noise:註参照)はフリーの Wavosaur/Audacity 等はもとより定評のある高価な製
品版もこのタイプである。これに対し、今回使用する WaveGene の「ホワイトノイズ」は正規分
布に従う正規乱数を用いた正統的な(白色雑音の定義では必ずしも正規性まで要求しては
8
いないが)白色雑音である。ここでは、それぞれを「一様雑音」、「正規雑音」と区別する
ことにする。
註:可聴周波数全帯域で単位周波数当りのパワーが等しいノイズを可視光全波長の光を含
む白色光になぞらえてホワイトノイズと呼び、同様に低い周波数(色では赤)でパワーが
強い(周波数が 2 倍でパワーが半分、すなわち 10log102 dB だけ弱くなる)ノイズをピンク
ノイズ(pink noise)と呼ぶ。ピンクノイズは区間両端の周波数比を固定した場合(例えば
比を 2 としたオクターブ幅)、どの区間を取ってもその周波数範囲でのパワーが等しくなる
ため、音響機器の試験用信号としてよく用いられる。
図 8 左は、区間(-1, 1)の一様乱数(赤)と正規乱数(青)の確率密度関数を示す。真
の正規分布では確率密度関数が±∞まで裾を引き決して 0 にはならないが、絶対値の増大
と共に急激に減衰するので絶対値が分散の 3 倍強から上下を捨てても実用上は問題ない(図
の分散は WaveGene の「ホワイトノイズ」の最大標本値と実効値とから求めており、同じ分散の
真の正規分布で WaveGene の「ホワイトノイズ」の絶対値最大標本を超える値が生成される確率
は 1/2000 以下である)。
図 8 右は実効値(WaveSpectra のレベルメータでは緑のバーで示される)の等しい正規
雑音、一様雑音、M 系列雑音の波形の違いを示している(この 3 種類の雑音のスペクトル
ウィンドウを含む WaveSpectra の完全な画面キャプチャは本編 p.15 2節の課題である)。
M 系列雑音では、レベルメーターで緑と黄のバーが一致していることで分る通り、全ての
標本の絶対値が等しい。
図 8 左:確率密度関数
右:実効値の等しい雑音波形(上から正規、一様、M 系列)
p.10 図 9 は、図 7 の正弦波を周波数の 44 倍の標本化周波数で標本化した例で赤の点は信
号自身の標本値、茶色の点は加えた雑音、青の点は信号に一様雑音を加えて量子化した点
(値は 0、±1)を示す。
p.10 図 10 は、一様雑音を用いて実際に図 9 に相当する量子化を行った例で、WaveGene
で周波数 1kHz、振幅 0.3 の「サイン波」と最大値 0.75 の一様に分布する雑音(p.16 4節の
作業で使用する uniform_0dB_16b.wav を「ユーザー波形」で読込み、レンジを「数値」指定
で 0.75 に設定)を重ね「ビット長」8 で音声ファイルとして生成・保存したものを WaveSpectra
でスペクトル(
をクリックし 40 フレーム平均のみを表示し、
ーを読取っている)を観測した例である。
9
をクリックしてパワ
量子化ステップを 1 とした 8 ビット深度での振幅 0.3 の正弦波のパワーは-52.53dBFS
(20 log10 (0.3/127) )であるが、読みは-50.15dBFS と概ね再現されている。図 10 で
WaveGene の波形表示の縦軸は正しく 8 ビット深度の標本値を示しているが、WaveSpectra
の波形表示の縦軸は深度が 16 ビット以外の場合も 32767 を基準としているので図 10 右上
のウィンドウで 1500 の目盛は実際には 5.81 を意味することに注意する。
図 9 正弦波を周波数の 44 倍の標本化周波数で標本化した例
図 10 図 7 の信号、雑音に相当する 8 ビット量子化波形とスペクトル(1kHz-50.15dBFS)
10
図 11~13 は正規雑音を加えた例で、図 11、12 は WaveGene の「ホワイトノイズ」の最大値、
実効値をそれぞれ図 10 の一様雑音(最大値 0.75、実効値約 0.433)と一致させたもの、p.12
図 13 は実効値を 0.75(最大値は約 2.62)としたものである。加える雑音の振幅が小さい
図 11 では原信号周波数のパワー(カーソル位置に表示)が不足し高調波も目立っている。
一方、雑音の振幅の大きい図 13 では原信号のパワーは再現され高調波も目立たなくなるが
雑音のパワーも増大し S/N 比が悪化している。
図 11 図 10 と同じ最大値の「ホワイトノイズ」を加えた例(1kHz -58.67dBFS)
図 12 図 10 と同じ実効値の「ホワイトノイズ」を加えた例(1kHz -53.69dBFS)
11
図 13 図 10 の最大値と同じ実効値の「ホワイトノイズ」を加えた例(1kHz -52.61dBFS)
原信号のパワーを再現し高調波歪を抑えるためには雑音の振幅を大きくする必要がある
が、雑音のパワーも当然増加する。十分な振幅を確保した上で聴感上の S/N 比を悪化させ
ないためには、雑音のパワーを耳の感度が低い高域に集中させればよい。図 14 は 19kHz
以上にパワーを集中させた sample_dither_for8b.wav(p.17 5節の作業でその効果を確認
する。表紙交付基準には含まれていないがレポートには記述すること)を加えた例である。
sample_dither_for8b.wav を 8 ビットで適用した場合の実効値は約 1.56、最大値は約 3.41
と図 13 で加えた雑音よりもかなり大きいが 19kHz から上を除いて雑音レベルが低く保た
れていることが分る。
図 14
sample_dither_for8b.wav を加えた例(1kHz
12
-53.18dBFS)
実験手順
作業の各段階で WaveGene のパラメータ「ビット長」の指定を間違えないこと。以下で単
位 dBFS は WaveGene のパラメータとしてはメニューに合せ dB と表記している。
0.dither.zip を解凍し、PC のサウンドカードの標本化周波数・ビット深度を設定する。
情報学実験のページからダウンロードした dither.zip を解凍して適当な場所に置く。展開
した dither フォルダには次のファイル(何れも標本化周波数 44100Hz、16 ビット深度の
音声ファイル)が含まれている。
●
Cranes_In_Their_Nest.wav (註参照)
●
sample_dither_for8b.wav 音楽コンテンツのマスタリング作業での定番である Apogee
社のディザ UV22HR を模したもの(左右チャンネル独立)
。p.17 5節(表紙交付基準に
は含まれていないがレポートには記述すること)での作業用。
uniform_0dB_16b.wav
●
p.16 4節の作業で減衰させて使用する一様雑音(左右チャンネ
ル独立)
●
uniform_m6_11dB_16b.wav
WaveGene の 0dB「ホワイトノイズ」と実効値を揃えた一様雑
音(pp.14-15 1、2節の作業で使用する。WaveGene の信号に揃えてモノラル)
註:自分がどの様な曲を聴いているかをレポートで明らかにしたくない場合は、本ファイ
ルを4節の作業でディザ効果の確認に使用すること。0dBFS の基準は、標本値では絶対値
32767、実効値では最大振幅の正弦波(AES 基準)である。内容は尺八の独奏曲「巣鶴鈴
慕」(水野明哲前学長の尺八の師である人間国宝故山口五郎氏の演奏で、日本人の演奏デー
タとして唯一 NASA の惑星探査機 Voyager の Golden Record に搭載されたもの)である。
標本最大値
左
-7.99dBFS
右
-8.08dBFS
実効値最大値
左
-11.71dBFS
右
-12.86dBFS
これ以外にも曲が必要ならば後期情報学実験Ⅱ音声合成課題の伴奏 WAV ファイル(内容
は大学歌の伴奏用ファイル。学内のみ参照可)bansou.wav をダウンロードして使用のこと。
標本最大値
左
-4.24dBFS
右
-4.60dBFS
実効値最大値
左
-13.58dBFS
右
-13.03dBFS
前半のⅠ.正弦波合成編では、WaveGene は音声ファイルの生成、WaveSpectra は音声
ファイルのスペクトル表示にのみ用い、そこでは全て WaveGene/WaveSpectra 内部の演算
で完結し PC のサウンド機能は利用していない。以降の「WaveGene で再生し耳で聴く」、
「WaveGene で再生してリアルタイムに WaveSpectra で観測する」という作業では PC の
サウンド機能を使用するため、アプリケーションとサウンドカード(ここでは WaveGene
と「スピーカー」、WaveSpectra と「マイク」)のプロパティで標本化周波数・ビット深度
を合せる必要がある(課題②「交流信号と共振回路」テキスト p.4 既出)。
はじめに、コントロールパネル→個人設定→サウンド→再生→スピーカーのプロパティ
→詳細で既定の形式を「16 ビット,44100 Hz(CD の音質)」に変更する(図 15、ログイ
ン時の既定は「24 ビット、48000 Hz(スタジオの音質)」
)。録音側は、マイク(PC のマイ
クロホン入力端子にプラグを挿していない状態では認識されない)のプロパティの既定の
形式は既定で「2 チャネル、16 ビット、44100 Hz(CD の音質)」であり変更の必要は無い。
13
図 15 再生の「既定の形式」を CD 音質に設定する。
注意
サウンドカードの設定は PC をログオフした場合にはリセットされるので、実験の途中で
ログインし直した場合には再度本節の作業を行うこと。
1.各種のノイズを実効値を揃えて再生し聴感で比較する。
PC 前面のヘッドホン端子にイヤホンを挿し、コントロールパネルのレベルまたはタスク
バーのスピーカーアイコンで音量を最小の状態にしておく。
WaveGene の「ビット長」を 16(既定のまま)にする。Wave1 の波形メニューで「ユーザー
波形」を選び、
「ユーザー波形登録」で、uniform_m6_11dB_16b.wav(ピーク標本 -6.11dBFS
の一様雑音)を開く(図 16)。
図 16 Wave1 の「ユーザー波形」に uniform_m6_11dB_16b.wav を設定する。
最大振幅の「ピンクノイズ」
(-14.40dBFSrms)に実効値を揃えるため、Wave1~Wave4 の
波形と振幅のパラメータを以下の様に設定する。
●
Wave1 「ユーザー波形」 で振幅
-3.52dB
●
Wave2 「ホワイトノイズ」
で振幅
-3.52dB
●
Wave3 「ピンクノイズ」
で振幅
0dB
●
Wave4 「M 系列ノイズ」で振幅 -14.40dB
「ユーザー波形」では、振幅パラメータ 0dB の設定でファイルに記録されたレベルに再生さ
れることに注意する。ピーク標本 -6.11dBFS の一様雑音を 3.52dB 減衰させることで実
14
効値 -14.40dBFSrms に相当するピーク標本 -9.63dBFS の一様雑音として再生する。
「出力チャンネル」は1つのみを「L+R」、他(Wave5~Wave8 も「OFF」になっていること
を確認する)を「OFF」にして、WaveGene の再生ボタン(►)をクリックし、コントロ
ールパネルのレベルまたはタスクバーのスピーカーアイコンで音量を適切に調節し個々の
ノイズを切替えて聴く(図 17)。
図 17 実効値 -14.40dBFSrms の雑音(左:一様雑音
右:M 系列雑音)
実効値が等しくてもスペクトルが一様ではない「ピンクノイズ」の聞こえ方は他と異なるが、
帯域全体で単位周波数当りのパワーが等しい他の3つは同じ様に聞こえる。
2.ノイズをファイルに保存して波形とスペクトルを比較する。
前節で確認したノイズの内、
「ホワイトノイズ」と「M 系列ノイズ」を音声ファイルとして保存す
る。実効値を最大標本 0dBFS の「ホワイトノイズ」と揃えるため(uniform_m6_11dB_16b.wav
はその様に作られている)次の通り設定する。
●
Wave2 「ホワイトノイズ」
●
Wave4 「M 系列ノイズ」で振幅 -10.88dB
で振幅
0dB
WaveGene の「ビット長」を 16(既定のまま)にする。Wave2、Wave4 のそれぞれにつ
いて順次出力を L+R
(他の Wave は全て OFF にしておく)にして「Wave ファイルへ出力」
(
)
でファイルに保存する(図 18 は Wave4 を 30 秒間保存している例である)。
保存した 2 本のファイルと uniform_m6_11dB_16b.wav を WaveSpectra で再生し、比較
する(PrtSc でキャプチャを取ること。p.9 図 8 右は波形とレベルメータのみを示したもの
である)。
図 18 振幅、再生時間を指定して音声ファイルとして保存する。
15
3.小振幅正弦波の限界レベルと雑音付加の効果を確認する。
本節の作業は表紙交付基準には含まれていないが、レポートの記述には必ず含めること。
WaveGene を開き、「サンプリング周波数」を既定(44100)のままで、「ビット長」を既定の
16 から 8 に変更する。
コントロールパネルのレベルまたはタスクバーのスピーカーアイコンで音量を最小の状
態で WaveGene の再生ボタン(►)をクリックする。Wave1 を「サイン波」周波数 1000Hz、
振幅 0dB(出力は L+R)、Wave2~Wave8 を OFF にして、適当な音量に調節し、順次「サ
イン波」の振幅を下げ音量レベルを上げて行く。 -49dB で無音となることを波形と耳で確認
する。消える前後の振幅を細かく指定すると -48.09dB では音があり -48.10dB で無音
(p.7 下から 1-3 行を参照)となることが分る(WaveGene の再生画面を PrtSc でキャプチ
ャを取ること)。
注意
WaveGene の波形画面は縦横両軸の付近を右クリックすると拡大率を設定できるので適
切な倍率で拡大して表示すること。
「波形が直線になったから無音のはず」で済ませるので
はなく、必ず耳で聴いて確かめること。
Wave1 を「サイン波」
(出力は L+R)のままで、Wave2 に「ホワイトノイズ」
(出力は L+R、振幅
は -40dB)を指定し、単独の再生では無音となった 1kHz 振幅 -49dB の正弦波がノイズ
の中に正弦波として聞き取れることを確認する。Wave1(サイン波)の振幅を下げて 1kHz の
正弦波が聞き取れる限界の振幅(dB 値)を記録する(画面のキャプチャは任意)
。
4.小音量の音楽・音声ファイルを再生し、付加する雑音の適正レベルを確認する。
WaveGene の「ビット長」を 8(前節設定のまま)にする。前節で確認した通り、小振幅の
信号に雑音を付加することで S/N 比を改善することができる。音楽・音声ファイルと一様
雑音ファイルをそれぞれ「ユーザー波形」で指定し、
「ユーザー波形登録」で開く(Wave1/5 の指
定はこの逆でもよい)。
●
Wave1
各自の用意した音楽・音声ファイル(または Cranes_In_Their_Nest.wav)
●
Wave5
uniform_0dB_16b.wav(uniform_m6_11dB_16b.wav ではない)
Wave1 の 2 種類の小音量再生レベル(例えば振幅設定 -24dB と -36dB)について、
Wave5 の振幅を調節しそれぞれ音楽・音声が(当然ノイズに埋もれてはいるが)最も自然
に聞き取れる一様雑音のレベル(音楽・音声ファイルにより異なる)を確認する。
「ユーザー波形」の場合、再生中に dB の上下ボタン(
)によるパラメータの変更はで
きない(表示だけは変化するが出力には反映されない。プルダウンメニューでのパラメー
タ設定は再生中の変更も可能である)ことに注意する。上下ボタンを使う場合は一度停止
16
して設定すること。
時間に余裕があれば、Wave5 の登録波形を sample_dither_for8b.wav に切替え、同様に
して最も自然に聞き取れる適正なレベル(1 節で述べた通り、
「ユーザー波形」の振幅指定はフ
ァイルの記録レベルでの再生を基準の 0dB としており、実験ノートには +3dB、-5dB の様
に基準に対する値を記録する)を確認する。
5.ディザの効果をスペクトルにより確認する。
本節の作業は表紙交付基準には含まれていないが、レポートの記述には必ず含めること。
開いている WaveSpectra を閉じ、PC のヘッドホン端子とマイク端子を 3.5φステレオ音
声ケーブル(表紙の交付を受けた後、TA から受取ること)でつなぎ WaveSpectra を開く。
WaveGene の「ビット長」を 16 にして振幅 0dB 周波数 1000Hz の「サイン波」を再生し、
WaveSpectra を録音状態にして WaveSpectra のレベルメーターの表示が高調波歪の目立た
ない範囲でなるべく 0dB に近い値となる様に音量を調節する(図 19、課題②テキスト p.7
と同様)。録音側をコントロールパネル→個人設定→サウンドの録音→マイクのプロパティ
→レベルを「マイク 100 マイクブースト
0.0dB」に設定した場合、再生側の適正値はコ
ントロールパネル→個人設定→サウンドの再生→スピーカーのプロパティ→レベルで 45 程
度(個々の PC により値は異なる)である。
この例では WaveSpectra の Spectrum メニューでレンジを 100dB としており、課題②テ
キスト p.7 の図 9 とは異なり、ノイズも画面内に現れている。PC のマイク端子に 3.5φス
テレオ音声ケーブルをつながない状態で WaveSpectra を開いた場合、録音ボタンをクリッ
クすると「録音できません(No Wave Input device)」と表示されるので、一度 WaveSpectra
を閉じて開き直す。
図 19 再生、録音のレベル調節を終えた画面(16 ビット深度)リニアスケール
17
注意
再生の既定の形式が既定のままであると、録音・再生のレベルを調節しても図 20 の様に
ノイズが無視できないレベルで残るので、p.13 0節に示す通り必ず「16 ビット,44100 Hz
(CD の音質)」に設定する。
図 20 再生の形式が「24 ビット、48000 Hz(スタジオの音質)」の場合
WaveGene の「ビット長」を 8 に変更して 8 ビット量子化で限界の -48dBFS の正弦波を
再生すると、基本波の 1kHz と同程度の強度の高調波が見られる(図 21)が、これに振幅
が -40dB の「ホワイトノイズ」を加えると高調波が目立たなくなる(p.19 図 22)。
図 21 8 ビット深度再生限界の -48dBFS の正弦波の再生スペクトル(リニアスケール)
18
図 22 -40dBFS の正規雑音を加えた再生スペクトル(リニアスケール)
WaveGene の「ビット長」を 8 のまま、前節で使用した sample_dither_for8b.wav を「ユー
ザー波形」のレベル 0dB で(記録レベルそのままで再生される)加えた場合には、-70dBFS
の小振幅正弦波でもかすかながら聞き取ることができる(図 23)。図 19~22 では高調波を
見やすくリニアスケールで表示したが、図 23 は通常の周波数対数スケールとし、40 フレー
ムの平均を表示している。
図 23 -70dBFS の正弦波に sample_dither_for8b.wav を加えた例(40 フレーム平均表示)
19
備考
レポート作成について
本課題の作業は特別な機材と有償のソフトウェアを必要とせず、
(安価なステレオ音声ケ
ーブルがあれば 5 節の作業を含め)全て実験時間以外にカフェテリアの PC はもとより、個
人所有 PC でも行うことが可能である。レポートでは、実験手順で「本節の作業は表紙交付
基準には含まれていないが、レポートの記述には必ず含めること。」と記載された部分の他、
以下の項目について計算結果を添えて考察すること。
①または②の何れか必須
●
① 最大値(WaveGene のパラメータでは振幅)が同じである矩形波、正弦波、三角波のパ
ワーの関係について。【ヒント:自乗を 1 周期積分する。】
② 正弦波 15 波による矩形波の合成。
【8 波合成した音声ファイルを Wave1 の「ユーザー波形」
で読込み(振幅は 0dB)、Wave2~Wave8 で新たに 7 波を追加して再生保存する(図 24:
p.6 図 4 と同じく 60Hz での例であるがレポートでは 50Hz で合成すること)。】
図 24 WaveGene を用いた正弦波 15 波による矩形波の合成
●可能ならば
振幅 -48.1dB の「M 系列ノイズ」を単独で再生した場合には WaveGene の
波形スコープは無音の表示となるが、これに 1kHz -90dB の「サイン波」を加えたものは、
波形スコープでもイヤホンでもはっきりと認識できる。同じ振幅 -48.1dB の「ホワイトノイズ」
20
の場合と大きく異なるのは何故か。
【ヒント:振幅 -48.1dB の「M 系列ノイズ」を WaveGene
の「ビット長」を 16 に設定し、他の波を OFF にして 16 ビット wav ファイルとして保存し
たものをバイナリエディタで表示して標本値を確認する。なお WaveGene での内部演算
は全て倍精度浮動小数点演算(仮数精度 53 ビット)で行い、出力時に量子化(最近接値
への丸めを使用)をしている。】
バイナリエディタ
Stirling
http://www.vector.co.jp/soft/win95/util/se079072.html
定番のバイナリエディタ。
TSXBIN
http://www.vector.co.jp/download/file/win95/util/fh393756.html
編集画面全体を、語長、符号有無を指定して数値表示に切替えられるので、上記考察の
目的には適している。図 25 は sample_dither_for8b.wav を開いた画面で、
カーソル箇所は、
左はヘッダ部分最後の 4 バイト整数(音声データ部分のバイト数を示す)、右は音声データ
部分先頭の 2 バイト音声データ(第 1 標本の左チャンネル)の数値を示している。符号付
整数は 2 の補数表現と解釈されるので、本課題では保存対象ファイルとしていないが、げ
たばき表現を採用している 8 ビット音声ファイル(128 バイアスで 0x00 が -128、0xFF
が 127 を表す)を表示する場合には注意が必要である。
図 25 sample_dither_for8b.wav の表示例 (左:符号無 4 バイト、右:符号付 2 バイト)
wxHexEditor
http://sourceforge.jp/projects/sfnet_wxhexeditor/
テキストデータで 2 バイト文字の日本語表示には対応していない。TSXBIN と同様に数
値表示が可能で、編集対象全体ではなくカーソル位置をデータ中の先頭バイト(Intel 系の
little endian では重み最小のバイト)とする、1~8 バイトデータのみであるが、一方、図
26 の例に示す様に、指定データの全検索が可能で、ファイル中の特定の標本値(例では
+128)の個数を確認でき、より詳細な考察を目指す場合には有効である。検索結果で Offset
値が 4 の倍数のデータは左チャンネル、4 で割って 2 余るデータは右チャンネルである。語
21
境界を指定しての検索はできないので、
(小音量であるディザファイルには上位バイトが 80
となる標本は存在せず、標本値 +128 の検索では問題ないが)例えば標本値 0(0x0000)
を検索すると両チャンネルにまたがった 2 バイト(Offset 値は奇数となる)のデータも検
索結果に含まれるので注意を要する。検索結果の Copy/Paste はできないので、これを保存
して Excel 等で処理することはできない。
ファイル中の、任意の値の標本数が必要な場合は、音声ファイルフォーマットの規格に
基づき、好きな言語で処理プログラムを書けばよい。音声ファイルとテキストファイルの
相互変換のプログラムはウェブ上にも出回っているが、正しくないもの(極性が逆になる
もの、生成した音声ファイルのヘッダのファイルサイズを誤り、ヘッダをチェックするプ
レーヤでは再生できないもの)もあり、音声ファイルに興味のある人はこの機会に自分で
作成することを強く推奨する。
図 26 sample_dither_for8b.wav 中の、値 +128 の標本を全検索した例
音声ファイルフォーマット
解説
http://www-mmsp.ece.mcgill.ca/documents/audioformats/wave/wave.html
http://www.kk.iij4u.or.jp/~kondo/wave/
当初規格
http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf
アップデート規格
http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/RIFFNEW.pdf
22