lynxeyedの電音鍵盤

MBDとFPGAと車載で使うデバイスの備忘録

ポータブルな可逆圧縮オーディオフォーマットの高圧縮率化をめざしました

C○I ミドルウェアさんが組み込み向け「非可逆圧縮」オーヂオフォーマットを出してるそうですね。
ナルホドネー(調査中)


で、このブログのメインタイトルとなっている可逆圧縮です。ハイ。

可逆圧縮オーディオは、圧縮されたデータからもとのデータを100%取り出すことができるフォーマットで、MP3などに代表される非可逆圧縮オーディオと異なり人間の感性、感覚に基づいた誤差を一切許容しません。

例えば、文字データでも同じ事が言えて
「ぼうずがたくはつ」(坊主が托鉢)
を圧縮して、復元したら
「ぼうしがばくはつ」(帽子が爆発)
なんてなったら明日の新聞に載っちゃう訳ですよ。


これは可逆なので100%復元できるのは当然の事です。
『でもオーディオに可逆圧縮ってイラネ。』
『容量大きいんでしょ、』

当然都心の騒然としたエントロピー増大しまくりの人ごみの中で出力の小さいポケットサイズのオーディオプレーヤで通勤途中に一定リズム刻むだけの音楽試聴に使うだけなら、要りません。いや、ホントに。だって非可逆の方が沢山曲入れられて、毎日毎日同じ通勤通学路通る単調動作の中でも1ヶ月聞き続けても同じ曲が出てこない方がストレス無くていいじゃないですか。


ここら辺は、いわゆる電気系エンジニアが脳内シミュレーションで語る事より、演奏家、サウンドディレクター、DJミキサー、指揮者の語る事のほうが定性的ではあるものの真理を述べています。彼らは大体このように言う事が多いです

「MP3,AACとかのデジタルオーディオは録音した時と同じ音量で再生すると酷い」

可逆はプロユース、ということなんでしょうかねぇ。でも、贅沢な音楽しむのも良いモノです。DJされる方はとても実感があるのではないでしょうか?(音量上げると音歪んじゃいますよね)

で、圧縮率は非可逆に比べるとかなり悪いです。例えば出現率が均等なデータを圧縮する事は不可能に近いようです。この出現パターンに法則があれば別です。フレームを使って圧縮出来るからです。
文字データを圧縮する時も同じですが何らかのパターン(性質・法則)が必要になります。もちろん使用するプロセッサの処理性能に見合ったフォーマットを利用する必要があります。
自分はRice-Golomb(ライス・ゴロム/ゴロム・ライス)符号化を利用しています。

mbed祭りのときにちょっと説明はしましたが、ある数値k(難しい言い方すると符号語長)を定めてデータと割り算をします。→ (データ/(2^k)) の商と剰余(あまり)を求めます。あるいはデータをkビット右シフトします。(はみ出した数値が余り(kビット分あるはず)、残った数値が商)。
例えばデータ幅が8ビットのとき、10進数の+25(=00011001)をk=4ビットで圧縮したい場合。

商の値+1unary符号化します。
で、この場合だと、1bit分圧縮出来ました。

でも、ライスゴロムは万能じゃない。
例えば、こんなデータが来たら圧縮はおろか膨張します。

+120(=01111000)をk=4で圧縮

時々刻々と変化する音声データで、少しでも膨張するデータがある場合、1%も圧縮出来ない可能性があります。

前回mbedに実装した時は前後のデータの差分を圧縮する事によりこの状況に対処しようと努力してました。

でもまだ甘い。ハードロックは圧縮が殆ど出来てませんでした。差分を使っても変化が激しいので値の小さい符号語長では膨張してしまうのです。
そこで編み出したのが
動的ライス・ゴロム符号化圧縮

続きは、6月25日発売のInterface誌で。MATLABシミュレーションもあるよ
うん、宣伝だね!(ねむいさん風に



(基板付の5月号↓)