駆け出しエンジニアの気ままにブログ

このブログでは、駆け出しエンジニアの私が興味をもったトピックについて不定期に発信しています。

スポンサーサイト  

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

category: スポンサー広告

tb: --   cm: --

【まとめ】DSPの勉強のため「DSP入門講座」の内容をまとめてみる。  

今回は、「DSP入門講座」(生駒伸一郎著)についてまとめていきます。

DSPfig001

DSP(Digital Signal Processor)は、デジタル信号処理に特化した処理を行うマイクロプロセッサで、CPUだけでは負荷が高くなってしまう画像処理や音響処理などの信号処理をサポートする際に用いられるモジュールです。

近年はIoTデバイスへのDSPの活用例も増えてきており、要注目テクノロジーの一つです。

ということで、今回はそんなDSPの基本を勉強するために「DSP入門講座」の内容を備忘録としてまとめていきたいと思います。

1)DSPとは?

デジタル信号処理とは、光、音、熱、圧力、磁気などから生まれる、絶え間なく変化する電気信号をデジタル回路で操作することであり、DSPはデジタル信号処理を実現するために開発されたマイクロプロセッサです。(マイクロプロセッサとは、コンピュータの心臓部にあたる半導体チップのこと)。

コンピュータは半導体技術の進歩とともに高性能化、小型化、低価格化が進み、現在ではパソコンのような汎用機として使われるだけでなく、特定用途向けの製品にコンピュータ組み込む「Embedded System(組込みシステム)」と呼ばれるものへ進化しています。DSPはこのようなコンピュータの進化の中で誕生した組込みシステム向けマイクロプロセッサです。

DSP内部では、CPU(中央演算処理装置)、メモリ、周辺機能といったブロックと、それらを接続するバスでできています。

DSPfig002

「積和演算」と「リアルタイム処理」
DSPの共通点をひも解くキーワードが「積和演算」と「リアルタイム処理」です。
積和演算とは文字通り、積(掛け算)と和(足し算)という計算を行うことです。デジタル信号処理で使われるアルゴリズム(計算手順)にはこの積和演算がたくさん出てきます。(例:FIRフィルタ)DSPに搭載されているCPUは積和演算を効率よく行う機能をもっています。
また、デジタル信号処理システムでは光、音、熱、圧力、磁気などから生まれる、絶え間なく変化する電気信号を入力として使います。つまりDSPには絶え間なく入ってくるデータに対してリアルタイムにアルゴリズムを実行する機能が必要なのです。

TI社のTMS320DM6437というチップを具体例として取り上げます。

DSPfig007
DSPfig008

このチップはC6000シリーズのCPU、64x+コアを搭載したDSPになります。

DSPfig003
DSPfig004

CPUはどんなものでも「メモリから命令を読み出す(fetch)」、「読み出した命令の内容を理解する(decode)」、「命令を実行する(execuse)」という基本動作をクロックに合わせて繰り返し行い、C64x+コアもこの動作を繰り返しますが、他のCPUと大きく異なるところは1クロックで実行できる命令の数が最大8個であるという点にあります。
8この箱それぞれが命令を実行できる独立した演算器で、機能ユニットと呼びます。この複数の機能ユニットにより複数の命令を同じクロックで実行できるのです。
各機能ユニットが演算に使う元データや演算結果は、A0...A31、B01...B31レジスタにおきます。例えば信号処理アルゴリズムでよく使う積和演算については、乗算命令を.Mユニット、加算命令を.Lユニットで実行しますが、それぞれの機能ユニットは演算に使う元データ二つをレジスタからもってきて乗算なり加算を実行し、得られた結果もレジスタに置くのです。

DSPを使ったシステムでは演算に使う元データや演算結果はメモリや周辺機能などCPUの外に置く必要があるので、CPUの内と外でデータのやり取りをする機能が必要です。この機能を担うのが.Dユニット(.D1、.D2)で、メモリ/周辺機能からレジスタへのデータよみ出し(ロード)や、レジスタからメモリ/周辺機能へのデータ書き込み(ストア)を行います。
またデジタル信号処理のアルゴリズムの多くはFIRフィルタのようにたくさんの積和演算を行うので、プログラムは乗算命令や加算命令を繰り返し実行するループ処理になります。ループ処理は分岐命令を使いプログラムの一定の場所を繰り返し実行することになるのでDSPに搭載されるCPUには分岐命令を効率よく実行する機能も欠かせません。C64x+コアでは、.Sユニット(.S1、.S2)を使って分岐命令を実行できるのでデータのロード/ストアや積和演算と分岐命令を並列実行できるのです。


2)DSPプログラミングと開発環境

DSPはデジタル信号処理に適したアーキテクチャをもつ組込みシステム向けマイクロプロセッサです。つまりDSPはプログラムの実行に独自の機械語を使っています。そして独自の機械語のプログラムを作成するためには、そのDSP専用のコード生成ツールが必要です。

コード生成ツールとはプログラミング言語で記述されたファイルからCPUが実行可能な機械語のプログラムファイルを作成するツールで、コンパイラ、アセンブラ、リンカで構成されています。

最近ではDSP用のコンパイラが、組込みシステム開発向けに広く普及しているC言語に対応しており、プログラミングにはC言語を使用するのが主流になっています。


3)AD/DAコンバータとDSP

デジタル信号処理システムでは、光や音を電気信号にして処理を行います。電気信号は途切れなくつづくアナログ信号ですが、これをデジタル信号へ変換(AD変換)してから処理を行います。デジタル信号へ変換することにより、以下のメリットが生まれます。

DSPfig005

・温度変化による精度の劣化が少ない。
・部品の誤差やばらつきをデジタル処理で補正できる
・データを長時間保存できる(遅延が簡単に作れる)
・データ通信を行いやすい
・機能の修正(デバッグ)、追加、変更、が容易


アナログ信号をデジタル信号に変換するというのは連続信号を細切れの値の列にすることです。ADコンバータは入力されたアナログ信号に標本化と量子化を同時に行い、変換したデジタル値を次々と出力してくれます。

DSPfig006

・標本化:一定時間ごとに値を測ること標本化(サンプリング)といいます。
・量子化:値を測るときに、一定間隔にメモリのふられた物差しにより(値を)測ることを量子化といいます。

標本化を行う際、一定時間ごとに値の測定を行います。この測定の周期は一般に標本化周波数(サンプリング周波数)で表します。例えば、標本化周波数48kHzの場合、1秒を4万8千等分した時間(約21μs)ごとに値を測ることになります。

標本化を行ったことによって、もとの信号とはまったく異なる周期の信号が得られる現象をエイリアシングと呼びます。エイリアシングを起こさないためには標本化周波数が元信号の周波数の2倍以上でなければならないことが知られています。(標本化定理)

例えば、電話機など人の声を扱うシステムでは、8kHz〜10kHzの標本化周波数が使われます。これは人の話し声がもつ信号成分の周波数は、大部分が4kHz未満であるという特徴から決まっています。また、音楽CDで使われている標本化周波数44.1kHzは、人の耳で感じ取れる周波数が、個人差はあるにせよ、一般に20Hz〜20kHzであることから決まっています。

多くの場合、アナログ信号には必要ない範囲の信号成分まで含まれています。例えば携帯電話のマイクは周囲の音も拾います。すると、話声にあわせて標本化周波数を決めても、周囲の音に高周波の信号が含まれエイリアシングが発生してしまう可能性がでてきます。ADコンバータは、標本化周波数の2分の1よりも低い周波数の信号だけを通過させるローパスフィルタをつけることで、エイリアシングを防いでいます。

デジタル信号をアナログ信号にするには細切れの値の列を途切れのない連続信号にする必要があります。そこで、DAコンバータは標本化周波数の1周期の間は値を維持するようにして、途切れ途切れの値をつなげます。つぎに、ガタガタの波形をならすためにローパスフィルタを用います。ローパスフィルタにより、標本化周波数の2分の1よりも高い周波数の余分な信号を取り除くことができ、なめらかなアナログ信号を出力することができます。


4)オーディオ信号処理プログラムを作る

DM6437EVMでは、オーディオ向けAD/DAコンバータ(AIC33)がDSP(DM6437)と接続されています。

デジタル信号処理アルゴリズムの実行はDM6437の中のCPUで行います。AIC33からDM6437に入ってくるデータをCPUへ渡し、処理した結果をAIC33へ出ろくするというデータの流れを作ります。AIC33とDM6437の間は同期式シリアルポートで接続されており、AIC33はデジタルデータの入出力を、クロック、フレームシンク、データ信号を使い、1クロックサイクルに1ビットずつ行います。

クロック及びフレームシンクはAIC33から出力されます。相手となるDM6437もこれらの信号でデータのやりとりを行うMcBP(Multi Channel Buffered Serial Port)という周辺機器を内蔵しています。DM6437ではMcBSPを2つ内蔵していて、ボード上ではMcBSP1とAIC33が配線されています。McBSPはAIC33からのデータをDM6437の中へ取り込む(受信)機能と、DM6437からAIC33へデータを送る(送信)機能をもっています。


5)画像処理プログラムを作る

DM6437EVMへの画像入出力にはNTSC方式のコンポジット信号というアナログ信号を使います。

コンポジット信号はビデオを映し出すために必要な情報を1本の信号で伝えられるように工夫されたアナログ信号で、DVDプレイヤーとテレビの接続など映像機器間での伝送を行えるように規格化された信号であり、NTSC方式はその規格の一つです。
NTSCコンポジット信号をデジタル信号に変換するデバイスは1本のアナログ信号から明るさや色合いなどの映像情報を複合しデジタル信号へ変換するため、単にADコンバータではなくビデオコーダーと呼ばれます。またその逆、デジタル信号をNTSCコンポジット信号へ変換するデバイスをビデオエンコーダと呼びます。

DM6437EVMでは、TVP5146M2ビデオコーダとDM6437内蔵のビデオエンコーダを使い、画像処理システムを実現しています。

NTSC方式では、1秒間に30枚のペースで次々に画像を表示するように規格化されています。1枚の画像は、最小単位である画素が平面にたくさん並んだもので、NTSC方式で伝送される画像をデジタル変換すると画像の大きさは720画素x480ラインになります。
多くの民生機器では、画像データを扱う際、RGBのデータではなくYCbCrと呼ばれるデータを使います。各画素のデータを明るさ(Y)、色の差(Cb, Cr)で表し、さらに色の差については間引いたデータを使うことでデータ量を減らす工夫をしています。 今回作成する画像処理システムでもYVbCrをそれぞれ8bitで表したyCbCr 4:2:2の画像データを使います。1枚の画像データの量はYの分720x480byte, Cbの分360x480byte, Crの分360x480byteの合計になりますから約690kbyte(720x480x2byte)になります。

DVM6437では、TVP5146M2からのデータの取り込みやビデオ信号の出力をVPSS(Video Processing Sub System)という周辺機器で行います。

VPSSは、受け取ったビデオデータを容量のある外部メモリ(DDR2-SDRAM)へ書き込み、出力するビデオデータは外部メモリから読み出すように設計されています。VPSSの中には画像処理に関する複数の周辺機能が内蔵されており、入力側の周辺機能をまとめてVPFE(Video Processing Front End)、出力側の周辺機能をまとめてVPBE(Video Processing Back End)と呼びます。
VPFEやVPBEの中はさらにいくつかの周辺機能に分かれており、本書では、VPFE内のCCDC(CCD Controller)、VPBE内のOSD(On Screen Display)とVENC(Video Encoder)を使います。
CCDCは、ITU-R BT.656規格にそった形で画像データの取り込みを行い、外部メモリへ書き込みます。OSDは、外部メモリにある画像データを読み出し、最終的に表示する1枚の画像イメージにしてVENCへ渡します。そしてVENCは受け取った画像データをNTSCコンポジット信号にエンコードし、出力します。
CCDC, OSD, VENCはそれぞれに設定レジスタをもっており、入出力の種類や画像の大きさ、画像データの書き込みや読み出しを行う外部メモリのアドレスなどを設定します。

DSPを使いこなせると開発の幅は、格段に広がるので、ぜひとも使いこなしたいものです。

ということで、簡単ですが今回は以上です。


category: その他

tb: 0   cm: 0

【まとめ】Amazon Echo vs Google Home についてまとめてみる。  

Fig_GoogleHomeVSAmazonEcho

今回は、Amazon Echo と Google Home についてまとめていきます。

日本ではまだ発売されていませんが、Voice control Device として、海外では広く普及しているデバイスです。

音楽を聞くことはもちろん、ニュースや天気、簡単なQAを聞いたり、アラームやタイマーの利用、さらにはWiFiでつながったライトやスイッチの制御をしたりUBER経由で配車手配、ピザの注文まで、できることは盛りだくさん。
また、Amazo Echoでは、Amazoの商品が注文できたり、Google Homeでは、Chromecastとの連携ができたりします。


Amazon Echoでできること

まずは、紹介動画。



Echo は、すでに数百万台以上を販売しており、skill(※)も10,000以上とたくさんあります。
※ スマホでいうアプリのようにSkillをインストールすることで機能が増えていきます。

ロボスタさんの記事にスキル数についての情報がまとめられており、トップ3は以下の通りとのこと。

 ・Game, Trivia & Accessories
 ・Education & Reference
 ・News

この3カテゴリで半分以上を占めています。基本の使い方に加え、ちょっとした質問やゲーム利用といった感じですね。


Google Homeでできること

こちらも、まずは紹介動画。



Google I/O では、以下4つの機能が紹介されていました。

 ・Enjoy your music
 ・Get answers from Google
 ・Manage everyday tasks
 ・Control devices home

Googleのサービスとの連携が主体になりそうですが、音声で「Manage everyday tasks」がどこまでできるのか?は、興味深いポイントです。

Google Home は、Amazon Echo より後発ですが、Googke Assistant 連携をはじめ、既存のGoogle Serviceとの強力な連携が魅力的ですね。

どちらのデバイスも100ドルを切る価格帯で購入でき(会員になるともらえるとか)、お手軽感もかなり高い。
日本での発売も待ち遠しいですが、Voice Controlはまだまだ始まったばかりの技術のため、今後が楽しみですね。

初音ミクとのコラボ版とかできたら、面白そうだなー。

ということで、簡単ですが今回は以上です。


category: その他

tb: 0   cm: 0

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。