FreeDVを理解するために(その1:開発史)

1. はじめに

このブログの目的はFreeDVはなぜ

  1. D-Starで採用されているAMBE等を使わないのか?
  2. Codec2と2020の2つの異なるモードがあるのか?
  3. Codec2と2020を比較すると圧縮レートと占有帯域は技術的進歩と逆じゃない?
  4. GPU内蔵ハイエンドCPUを必要とする2020は何をCodec2より良くしようとするのか目的がよくわからない。
  5. 携帯で使われている4.8〜16kbpsレベルのコーデックをなぜ使えないの?
  6. コーデックの開発技術はアマチュア無線家の領域なの?

などの素朴な疑問の答えのヒントにと思い書きました。

2.CODEC2

FreeDVの主要技術「コーデック」に関して英語のWikipediaのCodec2の「History」の部分をGoogle翻訳したものである。

この部分はCodec2のVK5GDRのみならずもう一方のコーデック技術である2020モードであるLPCNet開発者であるJean-Marc Valin の関係も記述されておりかつ背後にK6BP Bruce Perensの存在が記述されており開発紀元は2009年であり四半世紀の歴史があることがわかるが実際には2人の研究者しかプログラミングを含めて開発に関与していないことがわかる。簡潔であるが貴重な歴史が記述されている。


筆者注1.FreeDVの「Noise Suppresion」(Mic Audio Pre-Processing)にSpeexの名がある。筆者の経験ではWindowsのMedia Techものに較べてあまり良い性能ではないと思っている。しかし、最近ではSpeexに代わってRNNoiseという高性能のNoise Suppressiong技術を提案している。これはLPCNetと同じ技術を使っているようで2020への導入は容易に見える。


筆者注2.Mobilesatは豪州で1990年代初頭に開発されている。


筆者注3.2010年には2400bps程度であったCodec2の圧縮速度は2012年頃の1400bpsを経て2017年の700Cで700bpsが達成されて現在にいたっている。700D、700Eも同じ700bpsのCodec2である。また450bpsが実験レベルである。


-----------------------------------------------------------------------------------------------------------------------

著名なフリー ソフトウェア擁護者でアマチュア無線家の ブルース ペレンスは、5 kBit/s 未満で動作するフリー スピーチ コーデックの作成を求めて活動しました。彼自身には背景がなかったため、2008 年に Jean-Marc Valin にアプローチし、Valin と何度か Speex で協力した主任開発者の David Grant Rowe を紹介しましRowe 自身もアマチュア無線家 (アマチュア無線のコールサインVK5DGR) であり、音声コーデックや音声信号用のその他の信号処理アルゴリズムの作成と使用の経験がありました。彼は 1990 年代に音声コーディングの博士号を取得し、最初の衛星電話システムの 1 つ ( Mobilesat )の開発に携わりました
彼はその任務に同意し、2009 年 8 月 21 日にフォーマットに取り組む決定を発表しました。彼は博士論文の研究と発見に基づいて構築しました。[14] [15]基礎となる正弦波モデリングは、1980 年代半ばの Robert J. McAulay と Thomas F. Quatieri (MIT リンカーン研究所) による開発に遡ります。
2010 年 8 月に、David Rowe はバージョン 0.1 アルファを公開しました。[16]バージョン 0.2 は 2011 年末にリリースされ、1,400 ビット/秒のモードと量子化の大幅な改善が導入されました。
2012 年 1 月、 Jean-Marc Valin はlinux.conf.auで、Rowe にはあまり馴染みのない線スペクトル ペアの量子化の改善に貢献しました。[17] 2011/2012 年の冬と春に利用可能なビット レート モードにいくつかの変更が加えられた後、その年の 5 月以降は 2,400、1,400、および 1,200 bit/s モードが利用可能になりました。
ビット レート 700 bit/s の新しいモードである Codec 2 700C は、2017 年初めに完成しました。[18]

2018 年 7 月に、エアランゲン大学ニュルンベルク大学の修士論文の一部として開発された実験的な 450 bit/s モードがデモンストレーションされました。ベクトル量子化の賢いトレーニングにより、700C モードの原理に基づいてデータ レートをさらに下げることができます。[19]


-----------------------------------------------------------------------------------------------------------------------

3.LPCNet

次に2020モードのLPCNetの歴史であるがこれは2018年4月21日のDavid RoweのBlog、Wavenet based low rate speechcoding: https://www.researchgate.net/publication/321511578_Wavenet_based_low_rate_speech_codingをGoogle翻訳してみた。これはJean-Marc Valinからのメールでニューラルネット(Net)という全く新しい技術でCodec2の技術が使われているとの内容です。


-----------------------------------------------------------------------------------------------------------------------

WaveNet とコーデック 2
昨日、私の友人でオープンソースのスピーチコーダー仲間であるJean-Marc Valin (Speex と Opus で有名) が、いくつかのエキサイティングなニュースを電子メールで送ってきました。W. Bastiaan Kleijn とその友人たちは、「 Wavenet based low rate speechcoding 」という論文を発表しました。基本的に、2400 ビット/秒で実行される Codec 2 のビット ストリームを取得し、Codec 2 デコーダーを WaveNet 深層学習生成モデルに置き換えます。

驚くべきはその品質です。8000 ビット/秒の広帯域音声コーデックと同じくらい優れた音質です。彼らは、狭帯域コーデック モデル パラメーターから広帯域オーディオを生成しました。サンプルは次のとおりです。「Parametrics WaveNet」と Codec 2 を比較してください。

これは、低ビット レートの音声コーディングの革新的な製品です。

また、Codec 2 が学術研究に役立っていること (やったー、オープンソース) と、論文の MOS スコアが 2400 bit/s で MELP に近いことを示していることもうれしく思います。昨年、私たちはCodec 2 が 600 bit/s で MELP よりも優れていることを発見しました。(多かれ少なかれ) 一人の人間によって書かれたオープンソース コーデックとしては悪くありません。

今度はディープラーニングに関する本を読む必要があります。


-----------------------------------------------------------------------------------------------------------------------


上記のWaveNetはハイエンドの外付けGPUが必修なほど処理量が多いためにJean-Marc Valinは更に改良を加えたLPCNetを開発し、結果的に処理量は数百 GFLOPSからGPUなしの3GFLOPSまで減少させて、FreeDVの2020モードのLPCNetとなるのです。この事情は以下の「LPCNet: DSP-Boosted Neural Speech Synthesishttps://jmvalin.ca/demo/lpcnet)のパーフォーマンスの章に詳しく書かれています。

David Grant Roweにとっては彼の大学時に研究した「正弦波モデリング」のCodec2ではなく従来もあった「線形予測符号化」Codecと最新のニューラルネットの合体となりました。そしてChatGPTに代表されるAI技術の急激な発展を背景に鮮烈なハイエンドのGPUの性能向上競争は超圧縮コーデック技術にとって膨大な処理量は足かせにならない時代はもうすぐ到来する可能性があるように思えます。

以上

-----------------------------------------------------------------------------------------------------------------------
パフォーマンス
ニューラル音声合成は、非常に CPU を集中的に使用する可能性があります。昨年の ICASSP で、Bastiaan Kleijn と Google/DeepMind の同僚は、 codec2 ビットストリームを使用する2.4 kb/s WaveNet ベースのコーデックを発表しました。素晴らしいように聞こえますが、その複雑さは数百 GFLOPS に達するため、ハイエンドの GPU と 多大な努力がなければリアルタイムで実行する方法はありませんでした。
対照的に、この 1.6 kb/s LPCNet ベースのコーデックの複雑さはわずか 3 GFLOPS で、よりアクセスしやすいハードウェア上でリアルタイムで実行できるように設計されており、実際に今日のアプリケーションに搭載可能です。良好なパフォーマンスを得るには、AVX2/FMA および Neon コード (組み込みのみ、アセンブリなし) を記述する必要がありました。これにより、PC だけでなく、最近の携帯電話でも音声をリアルタイムでコーディング (特にデコード) できるようになりました。x86 と ARM CPU の両方で得られたパフォーマンスを以下に示します。
パフォーマンス
CPU時計1コアの%リアルタイム
AMD 2990WX (スレッドリッパー)3.0GHz*14%7.0倍
インテル Xeon E5-2640 v4 (ブロードウェル)2.4GHz*20%5.0倍
Snapdragon 855 ( Galaxy S10の Cortex-A76 )2.82GHz31%3.2倍
Snapdragon 845 ( Pixel 3の Cortex-A75 )2.5GHz68%1.47倍
AMD A1100 (Cortex-A57)1.7GHz102%0.98倍
BCM2837 (Raspberry Pi 3 上の Cortex-A53)1.2GHz310%0.32倍
*ターボ有効
-----------------------------------------------------------------------------------------------------------------------

4.所感

誤解を恐れずに簡単にLPCNetの目標性能を表現すると有線電話の音声品質の音声帯域が4kHz以下であったのを8kHz帯域に広げてさらにハイファイ化したものと言えます。そしてLPCNetと同じく人間の聴覚は大きな音の歪にはあまり敏感ではない事を利用して「信号レベルが小さいときに量子化雑音を低減するため(i.e. 音量が小さいときのノイズを少なくするため)、非直線量子化が行われている」有線電話のu-law圧縮技術(1960年頃)のみであれば64kbps x 2 =128kbpsの伝送帯域が必要で、とてもSSBの帯域3kHzで送ることはできなかったのですが、2020年にはニューラルネット技術を加味してわずか1.6kbps(すなわち80倍)に再圧縮して無線電話でもデジタル化が可能になったことを意味しています。

ただし、実際に1.6kbpsのLPCnetのサンプル原音を聞き実際に劣悪な電離層伝搬路を経た復調音を聞くとコーデック以外の本来のアマチュア無線家の技術分野(誤り訂正、変復調、送受信機、アンテナ等)に多くの改善余地が多くあることに気づきますので挑戦しがいのある分野だと確信しています。

コメント

このブログの人気の投稿

RedPitayaを使ったSDR構成のまとめ

Thetis完全対応:sdr-transceiver-hpsdr-ananxd(3月1日改定)

DAIWA CNW-518 アンテナチューナのフィルター特性