プリエンファシス - みる会図書館


検索対象: Introduction to Lossless Audio Codec ロスレス音声コーデック -基本理論と実装-
7件見つかりました。

1. Introduction to Lossless Audio Codec ロスレス音声コーデック -基本理論と実装-

62 return ALAPRED 工 CTOR_AP 工 RESULT_OK ; 変換処理部分の実装をリスト 2.10 に示す。 528 529 } 第 2 章 実装編 522 523 524 525 リスト 2.10 LR 復元処理部分 (ala-predictor. c) side = data[l] [smpl] ; mid = (dataC0] [smpl] くく 1 ) ー (side & 1 ) ; (int32-t) ALAUT 工 L 工 TY-SH 工 FT—RIGHT—AR 工 THMET 工 C (mid ー side data[l] [smpl] (int32—t) ALAUTIL 工 TY—SH 工 FT—RIGHT—AR 工 THMET 工 C (mid + side data [ 0 ] Csmp1] まず S チャンネル成分の下位 lbit の情報を使って MS 成分を復元してから、後は式 2.5 , 2.6 によって LR チャンネル成分を復元している。 2.3.5 プリエンファシス / デ工ンファシス 線形予測の前処理として、プリエンファシスという処理が行われる事が多い [ 1 , 11 ] 。プ リエンファシスは、音声の高周波数成分を強調する処理であり、しばしばタップ数 1 の FIR フィルターで実現される。具体的に処理を式に起こしてみると、時刻〃における出 カリ ( れ ) は、現在の入力ェ ( れ ) と直前時刻の入力ェ ( れ一 1 ) を用いて式 2.7 で定義される。 ( 2.7 ) はプリエンファシスとは逆に低周波数成分を強調する処理であり、次の式 2.12 で定義さ プリエンファシス処理を施したデータを元に戻す処理にデ工ンファシスがある。これ ため、直流成分を完全に打ち消す効果を持つ。 ″ 1 の範囲に設定される。もし″ = 1 ならば式 2.7 は入力データの差分計算に該当する こでは FIR フィルターの係数であり、プリエンファシス処理においては 0.9 れる。 ( 2 ・ 8 ) プリエンファシスフィルター処理の実装をリスト 2.11 に示す。 プリエンファシスフィルター処理 予測で得られる係数が安定 ( 発散しにくい状態 ) になりやすいとの結果を示している。 いう説明が多くなされる。 [ 11 ] では実験的に、プリエンファシスを使用した場合は、線形 数成分が相対的に持ち上がり、スペクトラムが平坦になるのが良い分析結果をもたらすと なされていない。一般に、プリエンファシス処理によって、収録時に失われがちな高周波 何故プリエンファシス処理が上手くいくのか、筆者が調べた限り、その定性的な説明は

2. Introduction to Lossless Audio Codec ロスレス音声コーデック -基本理論と実装-

52 bit 幅 16 不定 第 2 章 実装編 内容 0xFFFF PARCOR 係数 表 2.2 ALA のプロックフォーマット 補足 プロック先頭を示す同期コード 1 チャンネル目残差、 2 チャンネル目残差、 の順序で記録 1 チャンネル目係数列、 2 チャンネル目係数列、 ェ = 16 x PARCOR 係数次数 x 波形チャンネル数 の順序で記録 工ンコード済みの残差 タのチェックサム値や巡回冗長検査 (CRC16 、 CRC32 等 ) の計算結果をプロックに記録 しておき、デコード時に検査する対策がとられる [ 28 , 32 , 16 , 33 ] 。 ALA では実装の簡略 化のため、シグネチャと同期コード以外にデータの正しさをチェックする機能を省いて いる。 2.3 ala—predictor. c ala-predictor. c には、予測と合成処理を行う関数群が集められている。 ・ PARCOR 係数計算 ・ PARCOR 予測 / 合成フィルター プリエンファシス / デ工ンファシス ・チャンネル間相関除去 ()S 処理 ) 本節では、これらの計算処理について説明する。計算処理は全て固定小数演算により実 現されているため、コードの説明の前置きとして固定小数演算についての補足説明を入れ る。また、プリエンファシス / デ工ンファシスと、チャンネル間相関除去については基本 理論で触れていない為、本節で簡易に補足を入れる。なお、 PARCOR 係数計算について は、リスト 1.1 ( 1.1.3 節 ) で既に取り上げているため説明を省略する。 2.3.1 固定小数演算 固定小数 (fixed-point float) とは、小数点が固定された bit 位置にある小数の表現法 である。一方、 C 言語で float, double 等の型を持っ浮動小数点数は、指数部の値によ り小数点が移動する。固定小数点は整数によって表すことができ、また、固定小数同士の 演算も整数演算によって実行できる。 , こでは、 [ 24 , 25 ] を参考にしながら固定小数演算

3. Introduction to Lossless Audio Codec ロスレス音声コーデック -基本理論と実装-

86 第 2 章 実装編 ALA のエンコード処理手順 (main. c の do-encode 関数 ) 1. 入力の wav ファイルデータを取得する。 2. ヘッダ情報を書き出す。 に達するまで繰り返す。 3. プロックのエンコード処理を行う。以下の処理を wav ファイルデータの末尾 (f) 残差をエンコードする。 (e) 同期コードと PARCOR 係数をエンコードする。 出する。 (d) 整数データに PARCOR 格子型フィルターによる予測を行い、残差を算 (c) 整数データにプリエンファシスを適用する。 COR 係数を計算する。 double 形式のデータにプリエンファシスと窓掛けを行ってから、 PAR- (a) wav のチャンネル数がステレオ ( 2 ) 以上であれば、 S 処理を行う。 (b) ている ( リスト 2.38 ) 。 入力 wav データは整数型で取得すると同時に、解析用に高精度な double 型に変換し 入力 wav データの取得 大まかな処理内容は上記内容で十分と思われるため、細かい補足について触れていく。 既に 2.6.1 節で注意したが、 WAVFi1e 構造体に含まれる波形データは 32bit 整数型で記 ー 31 ) ; input-int32 [ch] [smpl] > > = ( 32 ー in-wav->format. bits-per_sample) ; / * 情報が失われない程度に右シフト * / input-int32 [ch] [smpl] = WAVFiIe-PCM (in-wav , smpl , (h) ; input [ch] Csmp1] = WAVFi1e—PCM (in—wav , smpl , (h) * pow ( 2 , 0 ; smpl く num—samples ; smpl + + ) { 土 0 て (smpl fO て ()h = 0 ; ch く num_channels; c れ + + ) { / * 入力データ取得 * / リスト 2.38 wav データ取得 (main. c 108 107 106 105 104 103 102 101 100 から離れるに従って精度が落ちる [ 38 ] 。 * 10 IEEE 754 の規格に従う浮動小数点数は、 0 近傍に多くの数値が含まれるため数値表現精度が高いが、 0 工ンコードするサンプル数は、リスト 2.39 に示す式で決定している。 工ンコードするサンプル数の決定 型データに 2 ー 31 を乗じた double 型のデータとして記録する。 きくなり過ぎてしまい、精度落ちの可能性がある * 10 。そのため、解析用のデータは、整数 録されている。このまま PARCOR 係数の解析を行うと ( 特に自己相関関数の ) 数値が大

4. Introduction to Lossless Audio Codec ロスレス音声コーデック -基本理論と実装-

104 索引 。符号 , 41 一意に復号可能な符号 , 28 後ろ向き誤差 , 18 MS 処理 , 59 工ンコード , 27 工ントロピー , 34 工ントロピー符号 , 9 工ントロピー符号化 , 27 符号 , 41 格子型フィルター , 20 固定小数 , 52 Golomb 符号 , 43 残差 , 9 自己相関 , 13 情報 , 27 情報源 , 27 情報量 , 31 線形予測 , 12 デコード , 28 PARCOR 係数 , 18 標本自己相関 , 18 復号 , 28 符号 , 27 符号化 , 27 プリエンファシス , 62 前向き誤差 , 18 マクミランの不等式 , 29 窓関数 , 87 無記憶情報源 , 37 Rice 符号 , 43 Levinson-Durbin 再帰法 , 14

5. Introduction to Lossless Audio Codec ロスレス音声コーデック -基本理論と実装-

. 欠 0 0 0 0 0 一 1 ワ ~ っ 4 っ一 4 - りラー -8 ) -8 0 ワ ~ ワ 1 り -4 4 -4 0 っ 1 っ 4 っ一り一り一り 4 4 -4 一り一り一り一り一り - り一りり 1 り一り一り一り一り一り一り一りっ 6 っ 6 っ 6 ー「ーー冖ー「ー冖ー「ー 目 6 第 2 章実装編 ALA コマンドラインツールの使用方法 . 2.1.1 ビルド方法 . 2.1.2 実行 工ンコード デコード 2.1 ALA ファイルフォーマット . 2.2.1 ファイルヘッダフォーマット 2.2.2 プロックフォーマット ala—predictor. c 2.3.1 固定小数演算 . 固定小数による小数の表記 . 固定小数演算 . 2.3.2 PARCOR 予測フィルター 乗算時の右シフト対策の定数 前向き誤差計算 後ろ向き誤差計算 2.3.3 PARCOR 合成フィルター 2.3.4 MS 処理 MS 処理の実装解説 2.3.5 プリエンファシス / デ工ンファシス プリエンファシスフィルター処理 デ工ンファシスフィルター処理 2.3.6 残差のエントロピー観察 . 元の信号と残差の分布 . 残差計算前後でのエントロピーの変化 . bit_stream . c 2.4.1 bit 単位の出力処理 . lbit 出力処理 複数 bit 出力処理 2.4.2 bit 単位の取得処理 . lbit 取得処理 複数 bit 取得処理 ala_coder . C . 2.5.1 Rice 符号 . Rice 符号化処理 2.2 2.3 2.4 2.5

6. Introduction to Lossless Audio Codec ロスレス音声コーデック -基本理論と実装-

2.3 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 ala—predictor. c リスト 2.11 プリエンファシスフィルター処理 ( ala ー p て edicto て . c ) / * プリエンファシス ( t32 , マ ce ) */ ALAPredictorApiResu1t ALAEmphasisFi1ter—PreEmphasisInt32 ( int32—t* data, uint32—t num—samples , int32—t coef—shift) uint32—t smpl ; int32-t prev—int32, tmp-int32; const int32—t coef—numer = (int32-t) ( ( 1 くく coef-shift) / * 引数チェック * / if (data = = NULL) { return ALAPRED 工 CTOR—AP 工 RESULT—INVAL 工 D-ARGUMENT ; / * フィルタ適用 * / prev—int32 0 ; smpl く num-samples ; smpl + + ) { for (smpl tmp—int32 = data Csmp1] ; (int32—t) ALAUTIL 工 TY-SHIFT—RIGHT—AR 工 T}NET 工 C (prev—int32 * data [smpl] coef—numer, coef—shift) ; prev—int32 tmp—int32 ; return ALAPRED 工 CTOR—APIRESULT—OK ; 63 入力データ data をその場で ( ⅲ - place で ) 書き換える関数である。フィルター計算は固 定小数乗算を使用しており、式 2.7 の″に該当する係数との乗算を、 ( 1 くく coef-shift) 1 との乗算処理と、 coef-shift の右シフト処理に分けて実現している。 ALA バージョ ン 1.0.0 では、 coef-shift は 5 に設定されているため、フィルター係数″の値は ″ = ( 25 ー 1 ) / 25 = 31 / 32 = 0.96875 に相当する。 デ工ンファシスフィルター処理 デ工ンファシスフィルター処理の実装をリスト 2.12 に示す。 408 409 410 411 412 413 414 415 416 417 418 419 リスト 2.12 デ工ンファシスフィルター処理 (ala_predictor. c) / * デ工ンファシス ( をれ t32 , をれマ乙 ace ) * / ALAPredictorApiResu1t ALAEmphasisFilter—DeEmphasisInt32 ( int32—t* data, uint32—t num—samples , int32—t coef—shift) uint32—t smpl ; const int32-t coef—numer = (int32-t) ( ( 1 くく coef-shift) / * 引数チェック */ if (data = = NULL) { return ALAPRED 工 CTOR_AP 工 RESULT_ 工 NVAL 工 D—ARGUMENT ;

7. Introduction to Lossless Audio Codec ロスレス音声コーデック -基本理論と実装-

64 420 421 422 423 424 425 第 2 章 / * フィルタ適用 */ for (smpl 1 ; smpl く num-samples ; smpl + + ) { 実装編 data [smpl] + = (int32—t) ALAUT 工 LITY—SHIFT—R 工 GHT—ARITHMET 工 C (data [smpl return ALAPRED 工 CTOR-APIRESULT_OK ; 1 ] * coef—numer, coef—shift) ; 426 } にフィルター係数を乗じ、現在のサンプル値に加算するだけで良い。 2.3.6 残差のエントロピー観察 デ工ンファシスフィルター処理は簡単である。式 2.8 で示したように、前のサンプル値 本節では MS 処理、プリエンファシス、 PARCOR 予測の 3 つの予測手法によって、 れほど音声データのエントロピーが変化するかを観察する。 元の信号と残差の分布 ど 信号の分布は、入力 wav の元の信号 ( 残差計算前 ) とその残差の計算結果に対して PCM 値の出現頻度を計測することで観察した。頻度の絶対値は音源により異なるため、出現頻 度の総和を取って出現頻度を割ることで経験確率を算出した。 表 1.5 で挙げた 8 個の wav ファイルに対して信号の分布を計測した結果を図 2.4-2.11 に示す。グラフにおいて、横軸 (PCM の値 ) の範囲は -2048 から 2048 に制限し、縦軸 ( 経験確率 ) は差を見やすくするために対数軸を用いている。 全体的に、残差計算後の分布の方が 0 における頻度ピーク値が大きく、また、分布の 0 から離れたところの頻度 ( 裾野 ) が鋭く減少している事が読み取れる。これは、図 1.48 で 見た幾何分布の概形に近く、よりエントロピー符号化に適した分布に変換できていること を意味する。 ファイル個別に気になる点を述べる。 1 ー 01 火焔太鼓 . wav の元の信号の分布は奇特で ある。 0 にピークはあるものの、次の緩やかなピークが一 100 周辺に存在する。これは、 収録時に発生している背景ノイズと、直流成分 ( オフセット ) の影響を受けているもの と考えられる。振幅値の振れ幅が大きい 4 ー 02 Let' s アイカッ ! ( s 巨 0 て t サイズ ) . wav と 5 ー 02 カレンダーガール (TV-size) . wav では、他の分布と異なり残差の減衰が緩やか ( 裾野が広い ) だが、減衰が早いためグラフの横軸をト 4000 , 4000 ] まで広げた時に残差の 頻度の方が小さくなっていることを確認した。 残差計算前後でのエントロピーの変化 残差計算前後でのエントロピーの計算結果を表 2.4 に示す。表 1.5 の計測を行った際は データを 1 バイト (8bit ) に区切って計測していたが、 こでは PCM の bit 幅 (16bit)