(57)【要約】【課題】小さな回路規模で効率的にビットストリームを処理し得る信号処理装置を提供する。【解決手段】信号処理装置１００は、ビットストリームを格納している入力バッファ１５０と、入力バッファ１５０に格納されているビットストリームからＡ信号を取り出し、そのＡ信号に含まれている、Ｂ信号に関する少なくとも１つの関連信号を用いることで、そのＡ信号に対応するＢ信号を処理するための処理プログラムを生成する第１プロセッサ１１０と、第１プロセッサ１１０により生成された処理プログラムを取得して実行することにより、そのＡ信号に対応するＢ信号を処理する第２プロセッサ１２０とを備える。【選択図】図１
2008257221.tif 000002
【特許請求の範囲】
【請求項１】
第１の信号と前記第１の信号に対応する第２の信号とが交互にパッキングされている入力信号を処理する信号処理装置であって、
前記入力信号を格納している格納手段と、
前記格納手段に格納されている入力信号から第１の信号を取り出し、前記第１の信号に含まれている、第２の信号に関する少なくとも１つの関連信号を用いることで、前記第１の信号に対応する第２の信号を処理するためのプログラムを生成する第１のプロセッサと、
前記第１のプロセッサにより生成されたプログラムを取得して実行することにより、前記第１の信号に対応する第２の信号を処理する第２のプロセッサと
を備えることを特徴とする信号処理装置。
【請求項２】
前記第１のプロセッサは、前記入力信号から前記第１の信号を取り出すごとに、当該第１の信号に対応する第２の信号を処理するためのプログラムを生成し、
前記第２のプロセッサは、前記第１のプロセッサからプログラムを取得するごとに、前記プログラムを実行するとともに、実行済みのプログラムを消去する
ことを特徴とする請求項１記載の信号処理装置。
【請求項３】
前記第２のプロセッサは専用命令を備え、
前記第１のプロセッサは前記専用命令を含む前記プログラムを生成し、
前記専用命令は、当該専用命令によって第２のプロセッサが実行する処理と同一の処理を第１のプロセッサに実行させるための命令よりも少ない記述量で記述される
ことを特徴とする請求項１記載の信号処理装置。
【請求項４】
前記第１のプロセッサは、複数の前記専用命令を含み、複数の前記専用命令を分岐することなく順次実行させる前記プログラムを生成する
ことを特徴とする請求項３記載の信号処理装置。
【請求項５】
前記第２の信号には、複数の固定長符号がパッキングされ、
前記第１の信号には、前記第２の信号に含まれている固定長符号の符号長に関する前記関連信号と、前記第２の信号に含まれている固定長符号の個数に関する前記関連信号とが含まれ、
前記専用命令は、固定長符号の符号長が設定されるフィールドと、固定長符号の個数が設定されるフィールドとを有する、固定長符号のアンパッキングを指示する命令であり、
前記第１のプロセッサは、複数の前記関連信号に応じて、前記第２の信号に含まれている固定長符号の符号長および個数を特定するとともに、前記符号長および個数が設定された、固定長符号のアンパッキングを指示する前記専用命令を生成し、
前記第２のプロセッサは、前記専用命令を実行することにより、前記専用命令に設定された符号長の固定長符号を、前記専用命令に設定された個数だけ前記第２の信号からアンパッキングする
ことを特徴とする請求項４記載の信号処理装置。
【請求項６】
前記第２の信号には、複数のハフマン符号がパッキングされ、
前記第１の信号には、前記第２の信号に含まれているハフマン符号を復号するためのコードブックの識別子に関する前記関連信号と、前記第２の信号に含まれているハフマン符号の個数に関する前記関連信号とが含まれ、
前記専用命令は、コードブックの識別子が設定されるフィールドと、ハフマン符号の個数が設定されるフィールドとを有する、ハフマン符号のアンパッキングを指示する命令であり、
前記第１のプロセッサは、複数の前記関連信号に応じて、前記第２の信号に含まれているハフマン符号のコードブックの識別子およびハフマン符号の個数を特定し、前記識別子および個数が設定された、ハフマン符号をアンパッキングするための前記専用命令を生成し、
前記第２のプロセッサは、前記専用命令を実行することにより、前記専用命令に設定されたコードブックの識別子を用い、前記専用命令に設定された個数のハフマン符号を前記第２の信号からアンパッキングする
ことを特徴とする請求項４記載の信号処理装置。
【請求項７】
前記第２の信号には、複数のライス符号がパッキングされ、
前記第１の信号には、前記第２の信号に含まれているライス符号の固定長部分の符号長に関する前記関連信号と、前記第２の信号に含まれているライス符号の個数に関する前記関連信号とが含まれ、
前記専用命令は、ライス符号の固定長部分の符号長が設定されるフィールドと、ライス符号の個数が設定されるフィールドとを有する、ライス符号のアンパッキングを指示する命令であり、
前記第１のプロセッサは、複数の前記関連信号に応じて、前記第２の信号に含まれているライス符号の固定長部分の符号長およびライス符号の個数を特定し、前記符号長および個数が設定された、ライス符号をアンパッキングするための前記専用命令を生成し、
前記第２のプロセッサは、前記専用命令を実行することにより、前記専用命令に設定された符号長の固定長部分を含むライス符号を、前記専用命令に設定された個数だけ前記第２の信号からアンパッキングする
ことを特徴とする請求項４記載の信号処理装置。
【請求項８】
前記専用命令は、連続する０または１の数の検出と信号出力とを指示する命令であり、
前記第２のプロセッサは、前記専用命令を実行することにより、前記第２の信号に含まれる連続する０または１の数を検出し、検出した数に応じた信号を出力する
ことを特徴とする請求項４記載の信号処理装置。
【請求項９】
前記第２の信号には、複数の処理対象符号および極性符号がパッキングされ、
前記第１のプロセッサは、処理対象符号のアンパッキングと、極性符号の検出と、符号極性の変換とを指示する前記専用命令を生成し、
前記第２のプロセッサは、前記専用命令を実行することにより、前記第２の信号から処理対象符号を順次アンパッキングし、前記処理対象符号をアンパッキングするごとに、当該処理対象符号に対応する極性符号を前記第２の信号の中から検出し、検出した極性符号の示す符号極性に当該処理対象符号の符号極性を変換する
ことを特徴とする請求項４記載の信号処理装置。
【請求項１０】
前記第２の信号には、複数の量子化符号がパッキングされ、
前記第１のプロセッサは、量子化符号のアンパッキングと逆量子化とを指示する前記専用命令を生成し、
前記第２のプロセッサは、前記専用命令を実行することにより、前記第２の信号から量子化符号を順次アンパッキングして逆量子化する
ことを特徴とする請求項４記載の信号処理装置。
【請求項１１】
第１の信号と前記第１の信号に対応する第２の信号とが交互にパッキングされている入力信号を処理する信号処理方法であって、
第１のプロセッサが、格納手段に格納されている入力信号から第１の信号を取り出し、前記第１の信号に含まれている、第２の信号に関する少なくとも１つの関連信号を用いることで、前記第１の信号に対応する第２の信号を処理するためのプログラムを生成するプログラム生成ステップと、
第２のプロセッサが、前記第１のプロセッサにより生成されたプログラムを取得して実行することにより、前記第１の信号に対応する第２の信号を処理する処理ステップと
を含むことを特徴とする信号処理方法。
【請求項１２】
第１の信号と前記第１の信号に対応する第２の信号とが交互にパッキングされている入力信号を処理するためのプログラムであって、
第１のプロセッサが、格納手段に格納されている入力信号から第１の信号を取り出し、前記第１の信号に含まれている、第２の信号に関する少なくとも１つの関連信号を用いることで、前記第１の信号に対応する第２の信号を処理するための処理プログラムを生成する処理プログラム生成ステップと、
第２のプロセッサが、前記第１のプロセッサにより生成された処理プログラムを取得して実行することにより、前記第１の信号に対応する第２の信号を処理する処理ステップと
を前記第１および第２のプロセッサに実行させることを特徴とするプログラム。
【請求項１３】
第１の信号と前記第１の信号に対応する第２の信号とが交互にパッキングされている入力信号を処理する集積回路であって、
格納手段に格納されている入力信号から第１の信号を取り出し、前記第１の信号に含まれている、第２の信号に関する少なくとも１つの関連信号を用いることで、前記第１の信号に対応する第２の信号を処理するためのプログラムを生成する第１のプロセッサと、
前記第１のプロセッサにより生成されたプログラムを取得して実行することにより、前記第１の信号に対応する第２の信号を処理する第２のプロセッサと
を備えることを特徴とする集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メインプロセッサとサブプロセッサを用いた信号処理装置に関し、特に、圧縮符号化信号を取得して復号する信号処理装置に関する。
【背景技術】
【０００２】
近年、ＤＶＤ（Digital Versatile Disk）や、ＢＤ（Blu-ray Disc）を記録媒体として用い、その記録媒体にＡＶ（Audio Video）信号を記録したり、その記録媒体からＡＶ信号を読み出して再生したりする装置が開発されている。さらに、このような記録媒体を用いた記録および再生とともに、放送波により送信されたＡＶ信号の受信や、ネットワークなどを介したＡＶ信号の送受信も同時に行うような機器が開発されている。このような装置や機器で用いられる、ビデオコーデック、オーディオコーデック、または通信処理などの信号処理には、多大の演算量が必要である。
【０００３】
つまり、近年のオーディオ符号化技術は多大の演算量を必要とする。例えば、ＭＰＥＧ（Moving Picture Experts Group）規格ＡＡＣ（Advanced Audio Coding）方式においては、圧縮符号化信号は、多様なハフマンコードブックを用いて圧縮されたものであり、且つ、多様な制御によって構造化された信号であるので、その信号に対する処理には多大の演算量を必要とする。
【０００４】
また、近年開発された新しいオーディオ符号化技術は、さらに多大の演算量を要する（例えば、非特許文献１参照）。
【０００５】
図１４は、上記非特許文献１のオーディオ符号化技術によりＰＣＭ（Pulse Code Modulation）信号をエンコードする信号処理装置の構成を示すブロック図である。なお、上記非特許文献１は、ＤＴＳ社から発表されたものであり、以下、この文献に記載のオーディオ符号化方式をＤＴＳ方式という。
【０００６】
この信号処理装置３００は、コアエンコーダ３０１、コアデコーダ３０２、残差生成部３０３、遅延部３０４、ロスレスエンコーダ３０５、およびパッキング部３０６を備えている。
【０００７】
コアエンコーダ３０１は、まず、ＰＣＭ信号を取得して通常のエンコードを行うことにより、符号化ＰＣＭ信号を生成する。ここで、通常のエンコードとは、所謂ロッシー（ロッシーエンコード）といわれる非可逆エンコードである。このロッシーは高い圧縮率のエンコードであるため、ロッシーによりエンコードされたＰＣＭ信号がデコードされても、そのデコードにより生成された再生信号は、完全には元のＰＣＭ信号に戻らない。このようなロッシーは、例えば、ＭＰＥＧオーディオのＡＡＣやＭＰ３（MPEG Audio Layer-3）など、現在最も広く利用されているエンコード方法である。
【０００８】
コアデコーダ３０２は、上記の符号化ＰＣＭ信号をローカルデコードすることにより復号化ＰＣＭ信号を生成する。つまり、コアデコーダ３０２は、信号処理装置３００内のエンコード過程において、コアエンコーダ３０１によるエンコード結果をデコードする。
【０００９】
残差生成部３０３は、復号化ＰＣＭ信号と、遅延部３０４により遅延されたＰＣＭ信号との差分を算出することにより残差信号を生成する。
【００１０】
ロスレスエンコーダ３０５は、その残差信号を圧縮符号化することにより符号化残差信号を生成する。ここでの圧縮符号化は、符号化後の信号を符号化前の信号に完全に元に戻すことができる、所謂ロスレスエンコードである。
【００１１】
パッキング部３０６は、上述のようにして生成されたロスレスエンコード結果である符号化残差信号と、ロッシーエンコード結果である符号化ＰＣＭ信号とをパッキングすることにより、ビットストリーム（圧縮符号化信号）を生成して出力する。
【００１２】
図１５は、非特許文献１のオーディオ符号化技術により生成されたビットストリームをデコードする信号処理装置の構成を示すブロック図である。
【００１３】
この信号処理装置４００は、分離部４０１、コアデコーダ４０２、ロスレスデコーダ４０３、および残差組込部４０４を備えている。
【００１４】
分離部４０１は、上述の信号処理装置３００により生成されたビットストリームを取得して、そのビットストリームを符号化ＰＣＭ信号と符号化残差信号とに分離する。
【００１５】
コアデコーダ４０２は、その符号化ＰＣＭ信号をデコードすることにより復号化ＰＣＭ信号を生成する。ロスレスデコーダ４０３は、符号化残差信号をデコードすることにより残差信号を生成する。
【００１６】
残差組込部４０４は、復号化ＰＣＭ信号に残差信号を加算することにより、ビットストリームを元の完全なＰＣＭ信号に復元する。
【００１７】
ところで、従来、多大な演算量が必要とされる信号処理を低い動作周波数で行うために、複数のプロセッサを用いた信号処理装置が提案されている（例えば、特許文献１参照）。
【００１８】
図１６は、上記特許文献１の複数のプロセッサを備えた信号処理装置の構成を示すブロック図である。
【００１９】
この信号処理装置２００は、２つのＤＳＰ（Digital Signal Processor）であるＤＳＰ２００ａとＤＳＰ２００ｂとを備えている。ＤＳＰ２００ａは、プログラムＲＡＭ（Random Access Memory）２０１ａ、プログラムＲＯＭ（Read Only Memory）２０２ａ、およびデータＲＡＭ２０３ａを用いて信号処理を行い、ＤＳＰ２００ｂは、プログラムＲＡＭ２０１ｂ、プログラムＲＯＭ２０２ｂ、およびデータＲＡＭ２０３ｂを用いて信号処理を行う。共有データＲＡＭ２０４は、双方のＤＳＰから共通にアクセスできるメモリである。
【００２０】
プログラムＲＡＭ２０１ａ，２０１ｂおよびプログラムＲＯＭ２０２ａ,２０２ｂのそれぞれには、各ＤＳＰの信号処理に必要なプログラムが予め格納されている。例えば、信号処理装置２００がオーディオデコード処理を実行する場合であれば、ＤＳＰ２００ａは、そのオーディオデコード処理の前半の処理として、所謂パーシング（ｐａｒｓｉｎｇ）などを行う。このパーシングは、符号化されたオーディオ信号の構成を解析してその中から所定の信号を取り出して中間信号に変換する処理である。このような処理により生成された中間信号は、共有データＲＡＭ２０４を介して、ＤＳＰ２００ｂ側に渡され、ＤＳＰ２００ｂに処理される。例えば、ＤＳＰ２００ａからＤＳＰ２００ｂに渡される中間信号は、デコード過程の周波数スペクトルの係数であり、ＤＳＰ２００ｂは、その周波数スペクトルの係数を時間軸信号に変換する。
【特許文献１】米国特許第６０８１７８３号明細書
【非特許文献１】Ｚｏｒａｎ  Ｆｅｊｚｏ，“ＤＴＳ−ＨＤ：Ｔｅｃｈｎｉｃａｌ  Ｏｖｅｒｖｉｅｗ  ｏｆ  Ｌｏｓｓｌｅｓｓ  Ｍｏｄｅ  ｏｆ  Ｏｐｅｒａｔｉｏｎ”，ｐｒｅｓｅｎｔｅｄ  ａｔ  ｔｈｅ  １１８ｔｈ  Ｃｏｎｖｅｎｔｉｏｎ  ｏｆ  ｔｈｅ  Ａｕｄｉｏ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｓｏｃｉｅｔｙ，Ｐｒｅｐｒｉｎｔ  ６４４５，Ｍａｙ．２００５．
【発明の開示】
【発明が解決しようとする課題】
【００２１】
しかしながら、図１６に示す従来の信号処理装置２００に、上述のＡＡＣ方式による圧縮符号化信号のデコードや、ＤＴＳ方式による圧縮符号化信号のデコードを実行させようとすると、その信号処理装置２００の回路規模を大きくしなければならないという課題が生じる。
【００２２】
具体的には、ＭＰＥＧ規格ＡＡＣ方式のデコードのうちの可変長復号化は、大規模で複雑なハフマンデコードを要する。
【００２３】
つまり、ＡＡＣ方式の圧縮符号化信号であるビットストリームは複数のハフマンコード群により複雑に構成されている。また、このビットストリームのシンタックスは、例えば３重のｆｏｒループやｉｆによる分岐などによって複雑に表現されている。したがって、そのビットストリームに対するパーシングの処理、すなわち、ビットストリームを解析し、そのビットストリームからハフマンコードを取り出してハフマンデコードを実行する処理に多大の演算量が必要とされる。詳しくは、非特許文献であるＭＰＥＧ（ＡＡＣ方式）規格書（ＩＳＯ／ＩＥＣ１３８１８−７：２００３）を参照されたい。
【００２４】
このようなパーシングには、多様なハフマンコードブックを用いる必要があり、且つ、多様な制御によって構造化されたデータ構造を紐解く必要がある。そのため、上記特許文献１のようなマルチプロセッサを有する信号処理装置２００において、仮に、一方のＤＳＰであるＤＳＰ２００ａにパーシング処理だけを行わせた場合であっても、ＤＳＰ２００ａは、複雑な処理が実行可能な高性能なＤＳＰでなければならない。さらに、この場合、ＤＳＰ２００ｂも、オーディオデコード処理の後半の処理を実行するだけの高性能なＤＳＰでなければならない。その結果、回路規模が大きくなり、コストダウンの妨げにもなっている。
【００２５】
また、ＤＴＳ方式のデコードのうちの可変長復号化は、多種多様な可変長符号化方式で符号化された信号に対応しなければならない。
【００２６】
ＤＴＳ方式の圧縮符号化信号であるビットストリームには、複数種の可変長符号化方式で符号化された信号が混在している。即ち、図１４に示すコアエンコーダ３０１とロスレスエンコーダ３０５とはそれぞれ、複数種の可変長符号化方式を切り換え、切り換えられた可変長符号化方式で信号をエンコードしている。複数の可変長符号化方式には、ハフマンコーディングの他、バイナリーコーディングやライスコーディングなどがある（非特許文献１の３．２節  Ｅｎｔｒｏｐｙ  Ｃｏｄｉｎｇ参照）。なお、ＡＡＣやＭＰ３の可変長符号化方式としては、ハフマンコーディングだけがある。
【００２７】
このようなＤＴＳ方式のビットストリームのデコードを、図１６に示すような従来のマルチプロセッサを有する信号処理装置２００で処理しようとすると、デコード過程の前半の処理、即ち、ビットストリームをパーシングする処理のために、信号処理装置２００は多種多様なプログラムを備えなければならない。その結果、ＤＳＰ２００ａによるパーシングのために、信号処理装置２００は非常に大規模なプログラムメモリを備えなければならない。これにより、信号処理装置２００の回路規模が大きくなってしまうのである。
【００２８】
なお、ハフマンコードやライスコードなどをビットストリームから取り出してデコードするプロセスは、それ自身が煩雑であり、信号処理装置の大規模化や動作周波数の上昇を招く。例えば、前述の非特許文献１の３．２節（Ｅｎｔｒｏｐｙ  Ｃｏｄｉｎｇ）に開示されているように、ＤＴＳ方式のライスコードのデコードには、ビットサーチや符号極性処理などの、判断および分岐を伴う処理が多く含まれている。なお、ビットサーチは、ビットストリームにおいて何ビット“０”が連続するかを検出する処理であり、符号極性処理は、所定の１ビットを検出してそのビットの値に応じて符号極性を反転させる処理である。したがって、ライスコードをデコードする処理には、多大の演算量を必要とする。
【００２９】
そこで、本発明は、このような問題に鑑みてなされたものであって、小さな回路規模で効率的にビットストリームを処理し得る信号処理装置を提供することを目的とする。
【課題を解決するための手段】
【００３０】
上記目的を達成するために、本発明に係る信号処理装置は、第１の信号と前記第１の信号に対応する第２の信号とが交互にパッキングされている入力信号を処理する信号処理装置であって、前記入力信号を格納している格納手段と、前記格納手段に格納されている入力信号から第１の信号を取り出し、前記第１の信号に含まれている、第２の信号に関する少なくとも１つの関連信号を用いることで、前記第１の信号に対応する第２の信号を処理するためのプログラムを生成する第１のプロセッサと、前記第１のプロセッサにより生成されたプログラムを取得して実行することにより、前記第１の信号に対応する第２の信号を処理する第２のプロセッサとを備えることを特徴とする。つまり、前記第１のプロセッサは、前記入力信号から前記第１の信号を取り出すごとに、当該第１の信号に対応する第２の信号を処理するためのプログラムを生成し、前記第２のプロセッサは、前記第１のプロセッサからプログラムを取得するごとに、前記プログラムを実行するとともに、実行済みのプログラムを消去する。
【００３１】
例えば、入力信号はオーディオ信号（ＰＣＭ信号）が符号化されたビットストリームであり、第１および第２の信号から１つのフレームが構成されている。その入力信号がＡＣＣ方式のビットストリームであれば、そのビットストリームの第２の信号には、多種多様なハフマンコードブックによる符号化により生成された複数のハフマンコードがパッキングされている。また、その入力信号がＤＴＳ方式のビットストリームであれば、例えばフレームごとに、ハフマン符号化やライス符号化などの多種多様な可変長符号化方式（ＶＬＤ）が適用されている。また、第１の信号には、どのように符号化された信号がどのように第２の信号に格納されているかといった第２の信号の構成などを示す制御信号を導出するための関連信号が含まれている。
【００３２】
そこで本発明では、２つのプロセッサが備えられ、一方の第１のプロセッサにより、第２の信号を処理するためのプログラムが生成され、他方の第２のプロセッサにより、そのプログラムが実行されて第２の信号が処理される。また、このようなプログラムは順次消去される。つまり、第２の信号を処理するための適切なプログラムが動的に生成されて、プログラムの実行後には、そのプログラムが消去される。したがって、本発明では、複数のプロセッサの処理により処理速度を高速化することができるとともに、多種多様なハフマンコードブックや可変長符号化方式に応じた多種多様なプログラムを信号処理装置に予め保持させておく必要がなく、信号処理装置のプログラムメモリのサイズを小さくすることができる。その結果、小さな回路規模で効率的にビットストリームを処理することができる。
【００３３】
また、前記第２のプロセッサは専用命令を備え、前記第１のプロセッサは前記専用命令を含む前記プログラムを生成し、前記専用命令は、当該専用命令によって第２のプロセッサが実行する処理と同一の処理を第１のプロセッサに実行させるための命令よりも少ない記述量で記述されることを特徴としてもよい。
【００３４】
これにより、プログラムサイズを小さくすることができる。その結果、信号処理装置の回路規模をさらに小さくすることができるとともに、処理速度をさらに高速化することができる。
【００３５】
また、前記第１のプロセッサは、複数の前記専用命令を含み、複数の前記専用命令を分岐することなく順次実行させる前記プログラムを生成することを特徴としてもよい。
【００３６】
例えば、プログラムにはｉｆなどの条件分岐が含まれていない。これにより、第２のプロセッサはプログラムを直線的に処理することができ、第２のプロセッサの回路構成を簡素にすることができ、コスト低減を図ることができる。
【００３７】
また、前記第２の信号には、複数の固定長符号がパッキングされ、前記第１の信号には、前記第２の信号に含まれている固定長符号の符号長に関する前記関連信号と、前記第２の信号に含まれている固定長符号の個数に関する前記関連信号とが含まれ、前記専用命令は、固定長符号の符号長が設定されるフィールドと、固定長符号の個数が設定されるフィールドとを有する、固定長符号のアンパッキングを指示する命令であり、前記第１のプロセッサは、複数の前記関連信号に応じて、前記第２の信号に含まれている固定長符号の符号長および個数を特定するとともに、前記符号長および個数が設定された、固定長符号のアンパッキングを指示する前記専用命令を生成し、前記第２のプロセッサは、前記専用命令を実行することにより、前記専用命令に設定された符号長の固定長符号を、前記専用命令に設定された個数だけ前記第２の信号からアンパッキングすることを特徴としてもよい。
【００３８】
これにより、第２のプロセッサは、第２の信号から複数の固定長符号（バイナリーコード）を適切に取り出してデコードすることができる。さらに、１つの専用命令で、固定長符号のアンパッキングと、その固定長符号の符号長と、固定長符号の個数、つまり固定長符号のアンパッキングの回数とを指示することができるため、固定長符号のデコードのためのプログラムのサイズを小さくすることができる。さらに、固定長符号のデコードを高速化することができる。
【００３９】
また、前記第２の信号には、複数のハフマン符号がパッキングされ、前記第１の信号には、前記第２の信号に含まれているハフマン符号を復号するためのコードブックの識別子に関する前記関連信号と、前記第２の信号に含まれているハフマン符号の個数に関する前記関連信号とが含まれ、前記専用命令は、コードブックの識別子が設定されるフィールドと、ハフマン符号の個数が設定されるフィールドとを有する、ハフマン符号のアンパッキングを指示する命令であり、前記第１のプロセッサは、複数の前記関連信号に応じて、前記第２の信号に含まれているハフマン符号のコードブックの識別子およびハフマン符号の個数を特定し、前記識別子および個数が設定された、ハフマン符号をアンパッキングするための前記専用命令を生成し、前記第２のプロセッサは、前記専用命令を実行することにより、前記専用命令に設定されたコードブックの識別子を用い、前記専用命令に設定された個数のハフマン符号を前記第２の信号からアンパッキングすることを特徴としてもよい。
【００４０】
これにより、第２のプロセッサは、第２の信号から複数のハフマン符号を適切に取り出してデコードすることができる。さらに、１つの専用命令で、ハフマン符号のアンパッキングと、コードブック（ハフマンコードブック）の識別子と、ハフマン符号の個数、つまりハフマン符号のアンパッキングの回数とを指示することができるため、ハフマン符号のデコードのためのプログラムのサイズを小さくすることができる。さらに、ハフマン符号のデコードを高速化することができる。
【００４１】
また、前記第２の信号には、複数のライス符号がパッキングされ、前記第１の信号には、前記第２の信号に含まれているライス符号の固定長部分の符号長に関する前記関連信号と、前記第２の信号に含まれているライス符号の個数に関する前記関連信号とが含まれ、前記専用命令は、ライス符号の固定長部分の符号長が設定されるフィールドと、ライス符号の個数が設定されるフィールドとを有する、ライス符号のアンパッキングを指示する命令であり、前記第１のプロセッサは、複数の前記関連信号に応じて、前記第２の信号に含まれているライス符号の固定長部分の符号長およびライス符号の個数を特定し、前記符号長および個数が設定された、ライス符号をアンパッキングするための前記専用命令を生成し、前記第２のプロセッサは、前記専用命令を実行することにより、前記専用命令に設定された符号長の固定長部分を含むライス符号を、前記専用命令に設定された個数だけ前記第２の信号からアンパッキングすることを特徴としてもよい。
【００４２】
これにより、第２のプロセッサは、第２の信号から複数のライス符号を適切に取り出してデコードすることができる。さらに、１つの専用命令で、ライス符号のアンパッキングと、そのライス符号の固定長部分の符号長と、ライス符号の個数、つまりライス符号のアンパッキングの回数とを指示することができるため、ライス符号のデコードのためのプログラムのサイズを小さくすることができる。さらに、ライス符号のデコードを高速化することができる。
【００４３】
また、前記専用命令は、連続する０または１の数の検出と信号出力とを指示する命令であり、前記第２のプロセッサは、前記専用命令を実行することにより、前記第２の信号に含まれる連続する０または１の数を検出し、検出した数に応じた信号を出力することを特徴としてもよい。
【００４４】
これにより、例えば、第２の信号にライス符号が含まれている場合、第２のプロセッサはそのライス符号の連続する０の数を検出してその数を２進数で出力することで、そのライス符号を適切にデコードすることができる。また、入力信号がＡＡＣ方式のビットストリームである場合には、ＡＡＣ方式におけるエスケープ符号（エスケープシーケンス）を適切に処理することができる。さらに、これらのデコードなどの処理を高速化することができる。
【００４５】
また、前記第２の信号には、複数の処理対象符号および極性符号がパッキングされ、前記第１のプロセッサは、処理対象符号のアンパッキングと、極性符号の検出と、符号極性の変換とを指示する前記専用命令を生成し、前記第２のプロセッサは、前記専用命令を実行することにより、前記第２の信号から処理対象符号を順次アンパッキングし、前記処理対象符号をアンパッキングするごとに、当該処理対象符号に対応する極性符号を前記第２の信号の中から検出し、検出した極性符号の示す符号極性に当該処理対象符号の符号極性を変換することを特徴としてもよい。
【００４６】
例えば、極性符号「０」が符号極性「正」を示し、極性符号「１」が符号極性「負」を示す場合、第２のプロセッサは、極性符号「１」を検出すると、アンパッキングした処理対象符号の符号極性を「負」にする。具体的には、第２のプロセッサは、ビット列で示される処理対象符号の各ビットを反転させる。これにより、第２の信号にパッキングされている処理対象符号に対して適切な符号極性を与えることができる。さらに、このような符号極性の処理を高速化することができる。
【００４７】
また、前記第２の信号には、複数の量子化符号がパッキングされ、前記第１のプロセッサは、量子化符号のアンパッキングと逆量子化とを指示する前記専用命令を生成し、前記第２のプロセッサは、前記専用命令を実行することにより、前記第２の信号から量子化符号を順次アンパッキングして逆量子化することを特徴としてもよい。
【００４８】
これにより、第２の信号にパッキングされている量子化符号を適切且つ高速に逆量子化することができる。
【００４９】
なお、本発明は、このような信号処理装置として実現することができるだけでなく、信号処理方法やプログラム、そのプログラムを格納する記憶媒体、集積回路としても実現することができる。
【発明の効果】
【００５０】
本発明の信号処理装置は、小さな回路規模で効率的にビットストリームを処理し得るという作用効果を奏する。つまり、本発明によれば、複数のプロセッサを用いて分散処理する際、最適なサイズのプログラムを逐次生成し実行することができるので、高速でありながら回路規模を小さくすることができる。
【発明を実施するための最良の形態】
【００５１】
以下、本発明の実施の形態１における信号処理装置について図面を参照しながら説明する。
【００５２】
図１は、実施の形態１における信号処理装置の構成を示すブロック図である。
信号処理装置１００は、ビットストリームをデコードする装置であって、小さな回路規模で構成されている点に特徴がある。
【００５３】
この信号処理装置１００は、第１プロセッサ１１０、第２プロセッサ１２０、セレクタ１３０、データメモリ１４０、および入力バッファ１５０を備えている。
【００５４】
入力バッファ１５０は、入力信号であるビットストリームを取得して格納する。このビットストリームは、例えば、オーディオ信号がＭＰＥＧ規格のＡＡＣ方式により符号化された圧縮符号化信号であって、Ａ信号（第１の信号）とＢ信号（第２の信号）とが交互に配列して構成されている。つまり、このビットストリームには、Ａ信号とＢ信号とが交互にパッキングされている。また、Ａ信号とＢ信号とにより１つのフレームが構成されている。Ｂ信号には、可変長符号化された複数のオーディオ信号が含まれており、Ａ信号は、そのＡ信号に対応するＢ信号の可変長符号化の条件や構成などを示している。
【００５５】
セレクタ１３０は、第１プロセッサ１１０からの制御に基づいて、入力バッファ１５０の接続先を第１プロセッサ１１０と第２プロセッサ１２０とに切り換える。つまり、セレクタ１３０は、入力バッファ１５０に格納されているビットストリームのＡ信号が第１プロセッサ１１０に出力され、Ｂ信号が第２プロセッサ１２０に出力されるように、接続先を切り換える。
【００５６】
第１プロセッサ１１０は、セレクタ１３０を制御することにより、入力バッファ１５０に接続し、その入力バッファ１５０に格納されているビットストリームのフレーム中のＡ信号を読み出す。そして、第１プロセッサ１１０は、その読み出したＡ信号に応じた処理を実行する。また、第１プロセッサ１１０は、その処理が終了すると、セレクタ１３０を制御することにより、入力バッファ１５０と第２プロセッサ１２０とを接続させる。さらに、第１プロセッサ１１０は、後述する完了信号を第２プロセッサ１２０から取得すると、再び、セレクタ１３０を制御することにより入力バッファ１５０に接続し、次のフレームに対して、上述のようなＡ信号の読み出しとそのＡ信号に応じた処理を実行する。
【００５７】
このように、第１プロセッサ１１０は、セレクタ１３０を制御することにより、ビットストリームに含まれている複数のＡ信号を、そのビットストリームの先頭側から順次読み出し、Ａ信号ごとに、そのＡ信号に応じた処理を実行する。
【００５８】
このような第１プロセッサ１１０は、第１プログラムメモリ１１１と、第１演算回路１１２を備えている。第１プログラムメモリ１１１は、第１演算回路１１２により実行されるプログラムを記憶している。第１演算回路１１２は、第１プログラムメモリ１１１に記憶されているプログラムを読み出して実行することにより、上述のようなＡ信号の読み出しと、そのＡ信号に応じた処理を行う。
【００５９】
ここで、第１演算回路１１２は、プログラム生成部１１２ａを備えている。このプログラム生成部１１２ａは、Ａ信号が読み出されるごとに、その読み出されたＡ信号を解析することにより、そのＡ信号と同一のフレーム内に格納されているＢ信号の可変長符号化の条件や構成などを特定する。そして、プログラム生成部１１２ａは、その特定された内容に基づいて、Ｂ信号に対するパーシングを第２プロセッサ１２０に実行させる、第２プロセッサ１２０専用のプログラム（以下、処理プログラムという）を生成する。プログラム生成部１１２ａは、このような処理プログラムを生成すると、その処理プログラムを第２プロセッサ１２０に出力する。
【００６０】
第２プロセッサ１２０は、セレクタ１３０を介して入力バッファ１５０に接続されるごとに、入力バッファ１５０に格納されているビットストリーム中のＢ信号を読み出す。つまり、第２プロセッサ１２０は、ビットストリームの先頭側からＢ信号を順次読み出す。そして、第２プロセッサ１２０はそのＢ信号に含まれる各信号（符号）を可変長復号化する。さらに、第２プロセッサ１２０は、そのＢ信号の読み出し、または可変長復号化などの処理が終了するごとに、上述の完了信号を第１プロセッサ１１０に出力する。
【００６１】
このような第２プロセッサ１２０は、第２プログラムメモリ１２１と、第２演算回路１２２とを備えている。第２プログラムメモリ１２１は、第１プロセッサ１１０のプログラム生成部１１２ａにより生成された処理プログラムを記憶するためのメモリである。
【００６２】
第２演算回路１２２は、第２プログラムメモリ１２１に記憶されている処理プログラムを読み出して実行することにより、Ｂ信号をパーシングする。つまり、第２演算回路１２２は、Ｂ信号に含まれる各信号を取り出して（つまりアンパッキングして）可変長復号化する。そして、第２演算回路１２２は、その可変長復号化により生成された各信号をデータメモリ１４０に格納する。
【００６３】
図２は、ビットストリームに含まれる主要な信号のシンタックスを示した図である。なお、この図２に示すシンタックスは、ＭＰＥＧ（ＡＡＣ方式）規格書（ＩＳＯ／ＩＥＣ１３８１８−７：２００３）に記載されたシンタックス“Ｔａｂｌｅ１−Ｓｙｎｔａｘ  ｏｆ  ｉｎｄｉｖｉｄｕａｌ＿ｃｈａｎｎｅｌ＿ｓｔｒｅａｍ（）”と同じものである。
【００６４】
図２に示すシンタックスのうち“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”以外の部分（図２上部の、Ａ信号に対応付けて記載された範囲）によってＡ信号が構成され、“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”の部分（図２下部の、Ｂ信号に対応付けて記載された範囲）によってＢ信号が構成されている。
【００６５】
なお、ＭＰＥＧ規格ＡＡＣ方式のビットストリームは、この図２のシンタックスで示される信号以外の信号も含んでいるが、本実施の形態では、説明を簡単にするために、それらの信号についての説明を省略する。
【００６６】
図３は、図２のシンタックス中のＡ信号対応部分に含まれる“ｓｅｃｔｉｏｎ＿ｄａｔａ（）”の詳細なシンタックスを示す図である。なお、この“ｓｅｃｔｉｏｎ＿ｄａｔａ（）”は、Ａ信号の中の主要な信号であり、図３に示すシンタックスは、ＭＰＥＧ（ＡＡＣ方式）規格書（ＩＳＯ／ＩＥＣ１３８１８−７：２００３）に記載されたシンタックス“Ｔａｂｌｅ２−Ｓｙｎｔａｘ  ｏｆ  ｓｅｃｔｉｏｎ＿ｄａｔａ（）”と同じものである。
【００６７】
このような図２および図３に示すシンタックスにより構成されるＡ信号は、Ｂ信号に含まれている複数の信号の可変長符号化条件や構成など、すなわち、Ｂ信号に含まれている複数の信号がどのような信号で、どのような順番で、何個格納されているかを示す。
【００６８】
図４は、図２のシンタックス中のＢ信号対応部分“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”の詳細なシンタックスを示す図である。なお、この“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”の詳細なシンタックスは、ＭＰＥＧ（ＡＡＣ方式）規格書（ＩＳＯ／ＩＥＣ１３８１８−７：２００３）に記載されたシンタックス“Ｔａｂｌｅ２０−Ｓｙｎｔａｘ  ｏｆ  ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”と同じものである。
【００６９】
Ｂ信号は、この図４に示す“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”のシンタックスに基づいて構成されている。また、この図４のシンタックス中に示される信号のうち、下線を付して記述されている信号、つまり“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｗ］［ｘ］［ｙ］［ｚ］”、“ｑｕａｄ＿ｓｉｇｎ＿ｂｉｔｓ”、“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｙ］［ｚ］”、“ｐａｉｒ＿ｓｉｇｎ＿ｂｉｔｓ”、“ｈｃｏｄ＿ｅｓｃ＿ｙ”、および“ｈｃｏｄ＿ｅｓｃ＿ｚ”が、第２プロセッサ１２０により取り出される信号（以下、取り出し対象信号という）である。なお、取り出し対象信号以外の、図４のシンタックスにより示される信号や、そのシンタックスの制御構成を示す信号などを、以下、制御信号という。そして、その制御信号は、Ａ信号に含まれている信号（関連信号）と同一であるか、その関連信号から導出可能な信号である。
【００７０】
例えば、図４に示すように、“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”のシンタックス中、冒頭の“ｇ”で制御されるｆｏｒループは、Ｂ信号である“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”に、“ｎｕｍ＿ｗｉｎｄｏｗ＿ｇｒｏｕｐｓ”で与えられる値の個数分だけの信号群が含まれていることを示している。ここで、“ｎｕｍ＿ｗｉｎｄｏｗ＿ｇｒｏｕｐｓ”の値は上述の制御信号であって、図２で示した“ｉｎｄｉｖｉｄｕａｌ＿ｃｈａｎｎｅｌ＿ｓｔｒｅａｍ（ｃｏｍｍｏｍ＿ｗｉｎｄｏｗ）”のシンタックス中の３行目で示されている“ｉｃｓ＿ｉｎｆｏ（）”によってＡ信号内に格納されている関連信号から得られるものである。詳しくはＭＰＥＧ（ＡＡＣ方式）規格書（ＩＳＯ／ＩＥＣ１３８１８−７：２００３）に記載されている。
【００７１】
また、図４に示すように、“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”のシンタックス中の２行目の“ｉ”で制御されるｆｏｒループは、Ｂ信号に含まれる上述の信号群ごとに、その信号群には、“ｎｕｍ＿ｓｅｃ［ｇ］”の個数分だけのサブ信号群が格納されていることを示している。この“ｎｕｍ＿ｓｅｃ［ｇ］”の値は上述の制御信号であって、図２で示した“ｉｎｄｉｖｉｄｕａｌ＿ｃｈａｎｎｅｌ＿ｓｔｒｅａｍ（ｃｏｍｍｏｍ＿ｗｉｎｄｏｗ）”のシンタックス中の４行目で示されている“ｓｅｃｔｉｏｎ＿ｄａｔａ（）”によってＡ信号内に格納されている関連信号から得られるものである。つまり、図３に示すように、“ｓｅｃｔｉｏｎ＿ｄａｔａ（）”のシンタックス中の最終行によって、Ａ信号に“ｎｕｍ＿ｓｅｃ［ｇ］”の値が関連信号として格納されている。
【００７２】
また、図４に示すように、“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”のシンタックス中の３〜４行目のｉｆの分岐判断は、“ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］”によって確定される。この“ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］”も上述の制御信号であって、図３に示す“ｓｅｃｔｉｏｎ＿ｄａｔａ（）”のシンタックス中の１０行目によってＡ信号に関連信号として格納されている。その他の制御信号も全て同様に、Ａ信号に関連信号として含まれているか、関連信号から生成可能な信号である。
【００７３】
従って、本実施の形態におけるプログラム生成部１１２ａは、図２に示すシンタックスのＡ信号に対応する部分、および図３に示すシンタックスに基づいて、Ａ信号を解析することにより、図４に示す“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”のシンタックス制御構造（制御信号）を特定する。つまり、プログラム生成部１１２ａは、Ｂ信号に、どのような信号が、何個、どのような順番で格納されているかということを、図４に示すＢ信号のシンタックスを用いることなく特定する。そして、プログラム生成部１１２ａは、Ｂ信号に含まれる各取り出し対象信号を取り出して処理するための処理プログラムを、ループ構造やｉｆの構文による分岐の構造を排除した、直線的に実行可能なプログラムとして生成する。
【００７４】
以下、図２〜図４のシンタックスにより構成されたビットストリームに対する信号処理装置１００の詳細な動作について説明する。
【００７５】
まず、第１プロセッサ１１０の第１演算回路１１２は、処理の開始時点で、Ａ信号を入力バッファ１５０から取得するために、前記セレクタ１３０を制御し、入力バッファ１５０を第１プロセッサ１１０に接続させる。
【００７６】
第１プロセッサ１１０の第１演算回路１１２は、図２に示すシンタックスのＡ信号対応部分に基づいて、ＭＰＥＧ規格ＡＡＣ方式に則ってＡ信号に含まれている信号を取り出す。つまり、第１演算回路１１２はＡ信号を解析してそのＡ信号に含まれている信号を取り出す（パーシングする）。なお、このＡ信号のパーシングの方法は、ＭＰＥＧ（ＡＡＣ方式）規格書（ＩＳＯ／ＩＥＣ１３８１８−７：２００３）に詳しく記載されている。
【００７７】
第１演算回路１１２のプログラム生成部１１２ａは、そのようにしてＡ信号から取り出された関連信号に基づいて、Ｂ信号に含まれている信号を取り出して処理するための処理プログラムを生成する。この処理プログラムは、第２プロセッサ１２０で実行可能な命令群によって構成されたプログラムである。
【００７８】
つまり、プログラム生成部１１２ａは、上述のＡ信号から関連信号を取り出して、その関連信号を制御信号として用いたり、関連信号を使って制御信号を導出する。この制御信号は、Ｂ信号に含まれる信号が、どのような信号で、どのような順番で、何個格納されているかを示す。プログラム生成部１１２ａは、このような制御信号を用いることにより、第２プロセッサ１２０に対して、取り出し対象信号をＢ信号から取り出して処理させる処理プログラムを生成する。
【００７９】
図５は、第２プロセッサ１２０が備えている命令ビットフィールドを示す図である。
この命令ビットフィールドＦは、左側の４ビットにより命令の種類を与える命令種類フィールドＦ１と、右側の１４ビットによりその命令の種類に特有の引数を与える引数フィールドＦ２とから構成されている。例えば、命令が、第２プロセッサ１２０から出力される信号（以下、出力信号という）が格納される先頭アドレスを指定するような命令（以下、出力アドレス指定命令という）の場合には、命令種類フィールドＦ１の４ビットに“００００”が設定される。また、命令がハフマンデコード命令の場合には、命令種類フィールドＦ１の４ビットに“０００１”などが設定される。
【００８０】
なお、以下、説明を簡単にするため、ハフマンデコード命令を、ハフマンコードブック検索によって出力値を得る所謂狭義の意味でのハフマンデコードの実行を指示する命令として説明する。つまり、このハフマンデコード命令は、図４に示すシンタックスに含まれる取り出し対象信号のうち、信号“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｗ］［ｘ］［ｙ］［ｚ］”または信号“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｙ］［ｚ］”をＢ信号から取り出し、その取り出した信号に対して上記狭義の意味でのハフマンデコードを実行することを指示する。
【００８１】
プログラム生成部１１２ａは、処理プログラムを生成する場合、まず、処理プログラムの１行目の命令として、上述の出力アドレス指定命令を生成する。
【００８２】
図６は、出力アドレス指定命令が設定された命令ビットフィールドＦの一例を示す図である。
【００８３】
例えば、図６に示すように、プログラム生成部１１２ａは、命令ビットフィールドＦの命令種類フィールドＦ１に“００００”が設定され、引数フィールドＦ２に“０１００００００００００００”が設定されるように、出力アドレス指定命令を生成する。つまり、このように設定された命令種類フィールドＦ１“００００”は、この命令ビットフィールドＦにより示される命令が出力アドレス指定命令であることを指示し、引数フィールドＦ２“０１００００００００００００”は、出力信号の先頭アドレスが“２５６”であることを指示する。
【００８４】
つぎに、プログラム生成部１１２ａは、処理プログラムの２行目以降の命令として、複数のハフマンデコード命令を生成する。各ハフマンデコード命令は、既にＡ信号を取得することによって得られている関連信号“ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］”が示すハフマンコードブックを用いてハフマンデコードを“Ｎ［ｇ］［ｉ］”回実行させるための命令である。
【００８５】
ここで、プログラム生成部１１２ａは、既にＡ信号を取得することによって得られている関連信号を使って、“（ｓｅｃｔ＿ｓｆｂ＿ｏｆｆｓｅｔ［ｇ］［ｓｅｃｔ＿ｅｎｄ［ｇ］［ｉ］］−ｓｅｃｔ＿ｓｆｂ＿ｏｆｆｓｅｔ［ｇ］［ｓｅｃｔ＿ｓｔａｒｔ［ｇ］［ｉ］］）／ＴＵＰＰＬＥ”を算出することによって“Ｎ［ｇ］［ｉ］”の値を導出している。また、上記において、プログラム生成部１１２ａは、既にＡ信号を取得することによって得られている“ｕｎｓｉｇｎｅｄ＿ｃｂ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］”が真である場合は、定数“ＱＵＡＤ＿ＬＥＮ”（具体的には４）を“ＴＵＰＰＬＥ”とし、偽である場合は、定数“ＰＡＩＲ＿ＬＥＮ”（具体的には２）を“ＴＵＰＰＬＥ”とする。つまり、この“Ｎ［ｇ］［ｉ］”の値は、図４に示す“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”のシンタックス内の３重のｆｏｒループのうち、最も内側のｆｏｒループが実行される回数である。
【００８６】
プログラム生成部１１２ａは、“ｉ”を０以上“ｎｕｍ＿ｓｅｃｔ［ｇ］”未満の範囲で変化させ、“ｇ”を０以上“ｎｕｍ＿ｗｉｎｄｏｗ＿ｇｒｏｕｐｓ”未満の範囲で変化させながら、上述のハフマンデコード命令の生成を繰り返す。なお、上述のように、“ｎｕｍ＿ｗｉｎｄｏｗ＿ｇｒｏｕｐｓ”および“ｎｕｍ＿ｓｅｃｔ［ｇ］”はそれぞれＡ信号に含まれている関連信号である。
【００８７】
より具体的には、プログラム生成部１１２ａは、処理プログラムの２行目の命令として、ｇ＝０およびｉ＝０に対応するハフマンデコード命令を生成する。このハフマンデコード命令は、既にＡ信号を取得することによって得られている“ｓｅｃｔ＿ｃｂ［０］［０］”が示すハフマンコードブックを用いてハフマンデコードを“Ｎ［０］［０］”回実行させるための命令である。ここで、プログラム生成部１１２ａは、既にＡ信号を取得することによって得られている関連信号を使って、“（ｓｅｃｔ＿ｓｆｂ＿ｏｆｆｓｅｔ［０］［ｓｅｃｔ＿ｅｎｄ［０］［０］］−ｓｅｃｔ＿ｓｆｂ＿ｏｆｆｓｅｔ［０］［ｓｅｃｔ＿ｓｔａｒｔ［０］［０］］）／ＴＵＰＰＬＥ”を算出することによって“Ｎ［０］［０］”の値を導出している。また、上記において、プログラム生成部１１２ａは、既にＡ信号を取得することによって得られている“ｕｎｓｉｇｎｅｄ＿ｃｂ［ｓｅｃｔ＿ｃｂ［０］［０］］”が真である場合は、定数“ＱＵＡＤ＿ＬＥＮ”を“ＴＵＰＰＬＥ”とし、偽である場合は、定数“ＰＡＩＲ＿ＬＥＮ”を“ＴＵＰＰＬＥ”とする。つまり、この“Ｎ［０］［０］”の値は、図４に示す“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”のシンタックス内の３重のｆｏｒループのうち、最も内側のｆｏｒループが、ｇ＝０で且つｉ＝０の際に実行される回数である。
【００８８】
図７は、ハフマンデコード命令が設定された命令ビットフィールドＦの一例を示す図である。
【００８９】
例えば、図７に示すように、プログラム生成部１１２ａは、命令ビットフィールドＦの命令種類フィールドＦ１に“０００１”が設定され、引数フィールドＦ２の左側の４ビットからなるコードブック指定フィールドＦ２ａに“０１０１”が設定され、引数フィールドＦ２の右側の１０ビットからなる実行回数指定フィールドＦ２ｂに“００００００１１００”が設定されるように、ハフマンデコード命令を生成する。つまり、このように設定された命令種類フィールドＦ１“００００”は、この命令ビットフィールドＦにより示される命令がハフマンデコード命令であることを指示し、コードブック指定フィールドＦ２ａ“０１０１”は、ハフマンコードブックの値として“ｓｅｃｔ＿ｃｂ［０］［０］”により示される“５”を指定している。つまり、そのコードブック指定フィールドＦ２ａは、ハフマンコードブック５番を指定している。実行回数指定フィールドＦ２ｂ“００００００１１００”は、そのハフマンコードブックによるハフマンデコードを実行する回数として、“（ｓｅｃｔ＿ｓｆｂ＿ｏｆｆｓｅｔ［０］［ｓｅｃｔ＿ｅｎｄ［０］［０］］−ｓｅｃｔ＿ｓｆｂ＿ｏｆｆｓｅｔ［０］［ｓｅｃｔ＿ｓｔａｒｔ［０］［０］］）／ＴＵＰＰＬＥ”により示される“１２”を指定している。つまり、その実行回数指定フィールドＦ２ｂは、１２回の処理の実行を指定している。
【００９０】
さらに、プログラム生成部１１２ａは、処理プログラムの３行目の命令として、上記と同様に、ｇ＝０およびｉ＝１に対応するハフマンデコード命令を生成する。このハフマンデコード命令は、既にＡ信号を取得することによって得られている“ｓｅｃｔ＿ｃｂ［０］［１］”が示すハフマンコードブックを用いてハフマンデコードを“Ｎ［０］［１］”回実行させるための命令である。ここで、上述と同様、プログラム生成部１１２ａは、既にＡ信号を取得することによって得られている関連信号を使って、“（ｓｅｃｔ＿ｓｆｂ＿ｏｆｆｓｅｔ［０］［ｓｅｃｔ＿ｅｎｄ［０］［１］］−ｓｅｃｔ＿ｓｆｂ＿ｏｆｆｓｅｔ［０］［ｓｅｃｔ＿ｓｔａｒｔ［０］［１］］）／ＴＵＰＰＬＥ”を算出することによって、“Ｎ［０］［１］”の値を求めている。
【００９１】
プログラム生成部１１２ａは、上述のような命令の生成を、“ｇ”が０以上“ｎｕｍ＿ｗｉｎｄｏｗ＿ｇｒｏｕｐｓ”未満、“ｉ”が０以上“ｎｕｍ＿ｓｅｃｔ［ｇ］”未満の範囲で繰り返すことで、第２プロセッサ１２０で実行される処理プログラムを生成する。また、プログラム生成部１１２ａは、処理プログラムを生成するときには、上述のように、“ｎｕｍ＿ｗｉｎｄｏｗ＿ｇｒｏｕｐｓ”および“ｎｕｍ＿ｓｅｃｔ［ｇ］”の値を、既にＡ信号から得ている。さらに、このとき、プログラム生成部１１２ａは、図４のシンタックス中にあるｉｆの条件を構成する制御信号や、ｉｆ−ｅｌｓｅの分岐によりどちらが選択されるかということも、Ａ信号から全て明らかにしている。そこで、プログラム生成部１１２ａは、ループの構造やｉｆによる分岐の構造を持たない直線的なプログラムとして処理プログラムを生成する。
【００９２】
本実施の形態では、このように、処理プログラムを直線的なプログラムにできることによって、第２プロセッサ１２０のハードウエア規模を小さくすることができる。
【００９３】
図８は、上記のように生成された処理プログラムと第２プロセッサ１２０の処理動作の一例を示す図である。
【００９４】
この処理プログラムは、１フレーム分のＢ信号をパーシングするためのプログラムである。この処理プログラムの１行目の命令は、出力信号が格納される先頭アドレスを指定する出力アドレス指定命令である。２行目以降には、“ｎｕｍ＿ｗｉｎｄｏｗ＿ｇｒｏｕｐｓ”により示される個数分（Ｎ個）の命令群たるセクションプログラムがある。それぞれのセクションプログラムは、“ｎｕｍ＿ｓｅｃｔ［ｇ］”（０＜＝ｇ＜ｎｕｍ＿ｗｉｎｄｏｗ＿ｇｒｏｕｐｓ）により示される数の命令からなるプログラムである。なお、このセクションプログラムに含まれる各命令は一行で記述され、上述したように、主に、ハフマンデコード命令である。
【００９５】
つまり、第２プロセッサ１２０の第２演算回路１２２は、セクションプログラムを実行することによって、Ｂ信号に含まれる同一空間上の信号を処理し、各セクションプログラムを逐次実行することによって、Ｂ信号に含まれる時間軸上の信号を逐次処理する。
【００９６】
具体的に、第２演算回路１２２は、処理プログラムの１行目の出力アドレス指定命令を実行することにより、出力信号を格納する先頭アドレスを“２５６”に設定する（ステップＳ１００）。
【００９７】
次に、第２演算回路１２２は、処理プログラムに含まれる最初（ｇ＝０）のセクションプログラムを実行する。つまり、第２演算回路１２２は、処理プログラムの２行目のハフマンデコード命令を実行することにより、定数“ＱＵＡＤ＿ＬＥＮ”（具体的には４）または定数“ＰＡＩＲ＿ＬＥＮ”（具体的には２）の符号長の信号（ハフマンコード）をＢ信号から取り出し、その取り出した信号に対してハフマンコードブック５番を用いたハフマンデコードを実行することを、１２回繰り返す（ステップＳ１０２）。第２演算回路１２２は、このようなハフマンデコードを繰り返す場合、同一の符号長の信号をＢ信号から順次取り出し、ハフマンデコードを１回実行するごとに、出力信号が格納されるアドレス（以下、出力アドレスという）を増進する。また、第２演算回路１２２は、図４のシンタックスに示すように、“ｓｅｃｔ＿ｃｂ［０］［０］”が“ＦＩＲＳＴ＿ＰＡＩＲ＿ＨＣＢ”（ＡＡＣの場合には、５を示す）よりも小さいか否かに応じて、上述の符号長を定数“ＱＵＡＤ＿ＬＥＮ”にすべきか定数“ＰＡＩＲ＿ＬＥＮ”にすべきかを決定している。
【００９８】
さらに、第２演算回路１２２は、処理プログラムの３行目のハフマンデコード命令を実行することにより、定数“ＱＵＡＤ＿ＬＥＮ”または定数“ＰＡＩＲ＿ＬＥＮ”の符号長の信号（ハフマンコード）をＢ信号から取り出し、その取り出した信号に対してハフマンコードブック７番を用いたハフマンデコードを実行することを、１６回繰り返す（ステップＳ１０４）。このときにも、第２演算回路１２２は、同一の符号長の信号をＢ信号から順次取り出し、ハフマンデコードを１回実行するごとに、出力アドレスを増進する。また、第２演算回路１２２は、上述のように、“ｓｅｃｔ＿ｃｂ［０］［１］”が“ＦＩＲＳＴ＿ＰＡＩＲ＿ＨＣＢ”よりも小さいか否かに応じて、上述の符号長を定数“ＱＵＡＤ＿ＬＥＮ”にすべきか定数“ＰＡＩＲ＿ＬＥＮ”にすべきかを決定している。
【００９９】
このように、第２演算回路１２２は、そのセクションプログラムに含まれているハフマンデコード命令を順次実行する。そして、第２演算回路１２２は、そのセクションプログラムに含まれている最後の出力命令を実行することにより、６４回“０”を出力する（ステップＳ１０６）。なお、この出力命令については後述する。
【０１００】
その後、第２演算回路１２２は、処理プログラムに含まれる２番目（ｇ＝１）のセクションプログラムを実行する。つまり、第２演算回路１２２は、そのセクションプログラムの１行目のハフマンデコード命令を実行することにより、定数“ＱＵＡＤ＿ＬＥＮ”または定数“ＰＡＩＲ＿ＬＥＮ”の符号長の信号（ハフマンコード）をＢ信号から取り出し、その取り出した信号に対してハフマンコードブック１番を用いたハフマンデコードを実行することを、４８回繰り返す（ステップＳ１０８）。このときにも、第２演算回路１２２は、同一の符号長の信号をＢ信号から順次取り出し、ハフマンデコードを１回実行するごとに、出力アドレスを増進する。また、第２演算回路１２２は、上述のように、“ｓｅｃｔ＿ｃｂ［１］［０］”が“ＦＩＲＳＴ＿ＰＡＩＲ＿ＨＣＢ”よりも小さいか否かに応じて、上述の符号長を定数“ＱＵＡＤ＿ＬＥＮ”にすべきか定数“ＰＡＩＲ＿ＬＥＮ”にすべきかを決定している。
【０１０１】
さらに、第２演算回路１２２は、そのセクションプログラムの２行目以降のハフマンデコード命令を上述と同様に順次実行する。そして、第２演算回路１２２は、そのセクションプログラムの“ｎｕｍ＿ｓｅｃｔ［１］”行目（最終行）のハフマンデコード命令を実行する。これにより、第２演算回路１２２は、定数“ＱＵＡＤ＿ＬＥＮ”または定数“ＰＡＩＲ＿ＬＥＮ”の符号長の信号をＢ信号から取り出し、その取り出した信号に対してハフマンコードブック３番を用いたハフマンデコードを実行することを、１６回繰り返す（ステップＳ１１０）。このときにも、第２演算回路１２２は、同一の符号長の信号をＢ信号から順次取り出し、ハフマンデコードを１回実行するごとに、出力アドレスを増進する。
【０１０２】
このように、第２演算回路１２２は、処理プログラムに含まれるセクションプログラムを順次実行し、最後に、処理プログラムに含まれるＮ番目（ｇ＝Ｎ−１）のセクションプログラムを実行する。つまり、第２演算回路１２２は、そのセクションプログラムの１行目のハフマンデコード命令を実行することにより、Ｂ信号から上述と同様の符号長の信号を取り出し、ハフマンコードブック１１番を用いたハフマンデコードを実行することを、４回繰り返す（ステップＳ１１２）。さらに、第２演算回路１２２は、そのセクションプログラムの２行目以降のハフマンデコード命令を順次実行する。そして、第２演算回路１２２は、そのセクションプログラムの“ｎｕｍ＿ｓｅｃｔ［Ｎ−１］”行目（最終行）のハフマンデコード命令を実行することにより、Ｂ信号から上述と同様の符号長の信号を取り出し、ハフマンコードブック１０番を用いたハフマンデコードを実行することを、１６回繰り返す（ステップＳ１１４）。なお、ステップＳ１１２〜Ｓ１１４においても上述と同様、第２演算回路１２２は、ハフマンデコードを１回実行するごとに出力アドレスを増進する。
【０１０３】
ここで、処理プログラムに含まれる最初（ｇ＝０）のセクションプログラムの最後の行にある出力命令ついて説明する。この出力命令は、命令種類フィールドＦ１に“００１０”が設定されることによって、パーシングをしないで０を出力することを指示する。さらに、この出力命令は、引数フィールドＦ２に設定された値の回数だけ処理を繰り返すことを指示する。プログラム生成部１１２ａは、Ａ信号に含まれている関連信号を用い、“ｓｅｃｔ＿ｓｆｂ＿ｏｆｆｓｅｔ［ｇ］［ｓｅｃｔ＿ｅｎｄ［ｇ］［ｉ］］−ｓｅｃｔ＿ｓｆｂ＿ｏｆｆｓｅｔ［ｇ］［ｓｅｃｔ＿ｓｔａｒｔ［ｇ］［ｉ］］”を算出することにより、出力命令の引数フィールドＦ２に設定される値を決定している。この出力命令による処理は、図４に示す“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”のシンタックスにおける、３行目のｉｆの構文において、“ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］”が“ＺＥＲＯ＿ＨＣＢ”であった場合に対応する処理、あるいは“ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］”が“ＥＳＣ＿ＨＣＢ”より大きい値であった場合に対応する処理に該当する。第２演算回路１２２は、このような出力命令を実行する場合、ハフマンデコードは行わず、出力値として０を生成し、例えば６４回、その０を出力する。
【０１０４】
図９は、本実施の形態の信号処理装置１００の動作を示すフローチャートである。
まず、信号処理装置１００の第１プロセッサ１１０は、ビットストリームの未処理のフレームの中から、Ａ信号を取得する（ステップＳ２００）。そして、第１プロセッサ１１０は、その取得したＡ信号から複数の関連信号を取り出し、取り出した何れかの関連信号を制御信号として用い、他の何れかの関連信号から他の制御信号を生成する。信号処理装置１００は、それらの制御信号を用いて処理プログラムを生成して第２プロセッサ１２０に送信する（ステップＳ２０２）。
【０１０５】
次に、信号処理装置１００の第２プロセッサ１２０は、上述のフレームの中からＢ信号を取得する（ステップＳ２０４）。そして、第２プロセッサ１２０は、第１プロセッサ１１０から送信された処理プログラムを受信し、その処理プログラムを実行することにより、Ｂ信号に含まれる複数の信号をそのＢ信号から取り出してデコードする（ステップＳ２０６）。このとき、第２プロセッサ１２０は、デコードにより生成された各信号をデータメモリ１４０に順次格納する。また、第２プロセッサ１２０は、データメモリ１４０への格納が完了すると、完了信号を第１プロセッサ１１０に送信する。
【０１０６】
第２プロセッサ１２０から完了信号を受信した第１プロセッサ１１０は、ビットストリームに次の未処理のフレームがあるか否かを判別し（ステップＳ２０８）、あると判別したときには（ステップＳ２０８のＹ）、再びステップＳ２００からの処理を繰り返し実行する。また、第１プロセッサ１１０は、未処理のフレームがないと判別したときには（ステップＳ２０８のＮ）、そのビットストリームに対する処理を終了する。
【０１０７】
このように、本実施の形態では、第１プロセッサ１１０は、ビットストリームに含まれるフレームごとに、そのフレームに含まれるＡ信号に基づいて、そのフレームに含まれるＢ信号をパーシングするための処理プログラムを生成し、第２プロセッサ１２０に出力する。したがって、第２プロセッサ１２０は、多種多様なＢ信号をパーシングするための多種多様なプログラムを予め第２プログラムメモリ１２１に格納しておく必要がなく、第２プログラムメモリ１２１のサイズを小さくすることができる。また、第２プロセッサ１２０は、第１プロセッサ１１０から処理プログラムを取得するごとに、先に使用されていた実行済みの処理プログラムを消去することができる。その結果、第２プロセッサ１２０の第２プログラムメモリ１２１のサイズを、特定のＢ信号をパーシングするための処理プログラムだけを格納し得るサイズに抑えることができる。
【０１０８】
また、本実施の形態では、処理プログラムに含まれる出力アドレス指定命令やハフマンデコード命令などの各命令は、複数種の命令を１つの命令に置き換えた高機能命令であって、第２プロセッサ１２０に備えられた第２プロセッサ１２０専用の命令である。例えば、ハフマンデコード命令は、その１つの命令で、ハフマンデコードの実行と、その実行に要するハフマンコードブックと、その実行回数とを指示する高機能命令である。また、プログラム中１行で表現される高機能命令によって第２プロセッサ１２０が実行する処理と同一の処理を、第１プロセッサ１１０などの他のプロセッサに対して命令する場合、プログラム中複数行に渡って記述される命令が必要となる。つまり、処理プログラムに含まれる高機能命令は、記述量が少なく、第２プロセッサ１２０に対してコンパクトに構成された専用命令である。
【０１０９】
したがって、ＡＡＣやＭＰ３などの近年のオーディオデコード処理において多大の演算量を必要とするパーシングを実行させるためのプログラムを、記述量の少ない命令で、且つ少ない命令数で構成することができる。その結果、プログラムサイズをコンパクトにすることができるとともに、そのパーシングを高速に実行することができる。
【０１１０】
さらに、本実施の形態では、処理プログラムが、ループ構造やｉｆの構文による分岐構造を有しておらず直線的に実行可能なプログラムとして簡素に構成されているため、第２演算回路１２２の構成を簡単にすることができる。
【０１１１】
したがって、本実施の形態では、プログラムメモリおよびプログラムサイズを小さくすることができ、且つ、第２演算回路１２２の構成を簡単にすることができるため、信号処理装置１００全体の回路規模を小さくすることができる。
【０１１２】
ここで、説明を簡単にするため、上述のハフマンデコード命令は、図４のシンタックスに示す信号“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｗ］［ｘ］［ｙ］［ｚ］”または信号“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｙ］［ｚ］”をＢ信号から取り出して狭義の意味でのハフマンデコードを第２プロセッサ１２０にさせた。しかし、図４のシンタックスにより構成されるＢ信号には、“ｑｕａｄ＿ｓｉｇｎ＿ｂｉｔｓ”や、“ｐａｉｒ＿ｓｉｇｎ＿ｂｉｔｓ”、“ｈｃｏｄ＿ｅｓｃ＿ｙ”、“ｈｃｏｄ＿ｅｓｃ＿ｚ”などの信号が含まれている場合がある。そして、これらの信号がＢ信号に含まれている場合には、それらの信号も取り出して処理する必要がある。
【０１１３】
そこで、本実施の形態におけるプログラム生成部１１２ａは、図４に示すシンタックスにより構成されるＢ信号を効率的に処理するため、ハフマンコードブック検索によって出力値を得る狭義の意味でのハフマンデコードだけでなく、その得られた出力値に基づいた後処理のプロセスも包含している所謂広義の意味でのハフマンデコードを指示するハフマンデコード命令を生成してもよい。
【０１１４】
なお、プログラム生成部１１２ａは、ハフマンデコード命令を、図７に示す命令ビットフィールドＦと異なるフォーマットで生成することによって、第２プロセッサ１２０の第２演算回路１２２に、そのハフマンデコード命令を、広義の意味でのハフマンデコードを指示する命令と解釈させてもよい。この場合、第２演算回路１２２は、図７に示す命令ビットフィールドＦと異なるフォーマットで表される命令を、広義の意味でのハフマンデコードを指示する命令として備えている。また、プログラム生成部１１２ａは、ハフマンデコード命令を、図７に示す命令ビットフィールドＦと同一のフォーマットで生成することによって、第２プロセッサ１２０の第２演算回路１２２に、そのハフマンデコード命令を、広義の意味でのハフマンデコードを指示する命令と解釈させてもよい。この場合、第２演算回路１２２は、図７に示す命令ビットフィールドＦと同一のフォーマットで表される命令を、広義の意味でのハフマンデコードを指示する命令として備えている。
【０１１５】
このようなハフマンデコード命令を実行する第２プロセッサ１２０の第２演算回路１２２は、ハフマンコードブック検索によって出力値を得る狭義の意味でのハフマンデコードに加え、その得られた出力値に基づいた後処理も実行する。
【０１１６】
例えば、プログラム生成部１１２ａは、ハフマンコードブック“ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］”が“ＦＩＲＳＴ＿ＰＡＩＲ＿ＨＣＢ”（ＡＡＣの場合には、５を示す）より小さい場合は、“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｗ］［ｘ］［ｙ］［ｚ］”を取り出してハフマンコードブック検索によって出力値を得る狭義の意味でのハフマンデコードと、その後に、“ｑｕａｄ＿ｓｉｇｎ＿ｂｉｔｓ”を取り出して処理することとを包含する広義の意味でのハフマンデコードを指示するハフマンデコード命令を生成する。
【０１１７】
また、プログラム生成部１１２ａは、ハフマンコードブック“ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］”が“ＦＩＲＳＴ＿ＰＡＩＲ＿ＨＣＢ”以上の場合は、“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｙ］［ｚ］”を取り出してハフマンコードブック検索によって出力値を得る狭義の意味でのハフマンデコードと、その後に、“ｐａｉｒ＿ｓｉｇｎ＿ｂｉｔｓ”を取り出す処理と、さらに、“ｈｃｏｄ＿ｅｓｃ＿ｙ”または“ｈｃｏｄ＿ｅｓｃ＿ｚ”を取り出す処理である所謂エスケープシーケンスを取得する処理とを包含した広義の意味でのハフマンデコードを指示するハフマンデコード命令を生成する。なお、これらの処理の詳細については、ＭＰＥＧ（ＡＡＣ方式）規格書（ＩＳＯ／ＩＥＣ１３８１８−７：２００３に記載されているので、ここでは省略する。
【０１１８】
このように、本実施の形態では、上述の複数の処理を一括して実行させる高機能命令を生成することで、その高機能命令を実行する第２プロセッサ１２０の処理を高速化できると同時に、専用プログラムをコンパクトにすることができる。
【０１１９】
さらに、ＡＡＣ方式においては、例えば、狭義の意味のハフマンデコード結果である、パーシングされた“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｙ］［ｚ］”の示す値は、“ｙ”と“ｚ”とがグループ化されたものである。そして、極性符号である“ｐａｉｒ＿ｓｉｇｎ＿ｂｉｔｓ”は、“ｙ”および“ｚ”のそれぞれが０でない場合、“ｙ”と“ｚ”との符号極性を表す。そこで、本実施の形態におけるプログラム生成部１１２ａは、グループ化された“ｙ”および“ｚ”を元の“ｙ”と“ｚ”に分離し、さらに“ｐａｉｒ＿ｓｉｇｎ＿ｂｉｔｓ”により示される符号極性を“ｙ”および“ｚ”のそれぞれに適用する処理までも実行させるような広義のハフマンデコード命令を生成してもよい。
【０１２０】
第２プロセッサ１２０の第２演算回路１２２は、このような広義のハフマンデコード命令を実行することにより、“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｙ］［ｚ］”をＢ信号から取り出して狭義の意味のハフマンデコードを行い、その結果を“ｙ”と“ｚ”に分離する。そして、第２演算回路１２２は、Ｂ信号から“ｐａｉｒ＿ｓｉｇｎ＿ｂｉｔｓ”を検出し、その“ｐａｉｒ＿ｓｉｇｎ＿ｂｉｔｓ”が“１”を示す場合には、“ｙ”および“ｚ”の符号極性を例えば「負」に変換する。
【０１２１】
同様に、狭義の意味のハフマンデコード結果である、パーシングされた“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｗ］［ｘ］［ｙ］［ｚ］”の示す値は、“ｗ”、“ｘ”、“ｙ”および“ｚ”がグループ化されたものである。そして、極性符号である“ｑｕａｄ＿ｓｉｇｎ＿ｂｉｔｓ”は、“ｗ”、“ｘ”、“ｙ”および“ｚ”のそれぞれが０でない場合、“ｗ”、“ｘ”、“ｙ”および“ｚ”の符号極性を表す。そこで、本実施の形態におけるプログラム生成部１１２ａは、グループ化された“ｗ”、“ｘ”、“ｙ”および“ｚ”を分離し、さらに“ｑｕａｄ＿ｓｉｇｎ＿ｂｉｔｓ”により示される符号極性をそれぞれ“ｗ”、“ｘ”、“ｙ”および“ｚ”に適用する処理までも実行させるような広義のハフマンデコード命令を生成してもよい。
【０１２２】
第２プロセッサ１２０の第２演算回路１２２は、このような広義のハフマンデコード命令を実行することにより、“ｈｃｏｄ［ｓｅｃｔ＿ｃｂ［ｇ］［ｉ］］［ｗ］［ｘ］［ｙ］［ｚ］”をＢ信号から取り出して狭義の意味のハフマンデコードを行い、その結果を“ｗ”、“ｘ”、“ｙ”および“ｚ”に分離する。そして、第２演算回路１２２は、Ｂ信号から“ｑｕａｄ＿ｓｉｇｎ＿ｂｉｔｓ”を検出し、例えば、その“ｑｕａｄ＿ｓｉｇｎ＿ｂｉｔｓ”が“１”を示す場合には、“ｗ”、“ｘ”、“ｙ”および“ｚ”の符号極性を例えば「負」に変換する。
【０１２３】
さらに、本実施の形態におけるプログラム生成部１１２ａは、符号極性の適用により得られた結果に対し、逆量子化、例えば４／３乗の処理（ｗ＾（４／３）、ｘ＾（４／３）、ｙ＾（４／３）、ｚ＾（４／３））も実行させるような広義のハフマンデコード命令を生成してもよい。
【０１２４】
つまり、第２プロセッサ１２０により実行される命令は、Ｂ信号を取り出す際、狭義の意味でのハフマンデコード処理のみならず、その後処理としての符号極性の処理や逆量子化の処理をも指示する高機能命令であって、第２プロセッサ１２０に対して専用の命令である。したがって、このような場合には、信号処理装置１００の処理をさらに高速化できると同時に、生成するプログラムを直線的に処理可能なプログラムとしつつ、よりコンパクトにすることができる。
【０１２５】
（変形例）
上記実施の形態では、処理対象のビットストリームがＭＰＥＧ規格ＡＡＣ方式の信号であるため、プログラム生成部１１２ａは、主にハフマンデコード命令と出力命令とを含む処理プログラムを生成したが、他の命令を含む処理プログラムを生成してもよい。例えば、ＤＴＳ方式では、非特許文献１で示されているように、バイナリーコード（固定長符号）とライスコード（可変長符号）とが併用されている。
【０１２６】
したがって、本変形例に係るプログラム生成部１１２ａは、処理対象のビットストリームがＤＴＳ方式の信号の場合には、バイナリーコードをデコードする命令（以下、バイナリーデコード命令という）や、ライスコードをデコードする命令（以下、ライスデコード命令という）を含む処理プログラムを生成する。
【０１２７】
バイナリーコードは、予め符号長が定められた固定長符号である。このようなバイナリーコードを含むフレームのＡ信号には、何個のバイナリーコードがＢ信号に格納されているかを示す個数情報と、１個あたりのバイナリーコードの符号長を示す符号長情報とがそれぞれ関連信号として格納されている。つまり、そのフレームのＢ信号には、そのＡ信号中の符号長情報によって示される符号長のバイナリーコードが、そのＡ信号中の個数情報により示される個数だけ格納されている。
【０１２８】
図１０は、バイナリーデコード命令が設定された命令ビットフィールドＦの一例を示す図である。
【０１２９】
例えば、図１０に示すように、プログラム生成部１１２ａは、命令ビットフィールドＦの命令種類フィールドＦ１に、“００１１”が設定され、引数フィールドＦ２の左側の４ビットからなる符号長指定フィールドＦ２ｃに“０１０１”が設定され、引数フィールドＦ２の右側の１０ビットからなる実行回数指定フィールドＦ２ｄに“００００１０１１００”が設定されるように、バイナリーデコード命令を生成する。つまり、このように設定された命令種類フィールドＦ１“００１１”は、この命令ビットフィールドＦにより示される命令がバイナリーデコード命令であることを指示し、符号長指定フィールドＦ２ｃ“０１０１”は、バイナリーコードの符号長が“５”であることを指定している。さらに、実行回数指定フィールドＦ２ｄ“００００１０１１００”は、処理すべき信号（バイナリーコード）の個数が“４４”であること、つまり、バイナリーコードのデコードを４４回すべきことを指示している。
【０１３０】
したがって、このようなバイナリーデコード命令を実行する第２プロセッサ１２０の第２演算回路１２２は、Ｂ信号から５ビット長のバイナリーコードを取り出してデコードすることを４４回繰り返し実行する。
【０１３１】
次に、ライスコードについて説明する。
図１１は、ライスコードを含むビットストリーム（Ｂ信号）の一例を示す図である。
【０１３２】
例えば、図１１に示すように、ビットストリームは、左側から“０００００１１００１０１０１１１…”によって構成されている。図１１中、一番左のビットは、ビットストリームの現在の先頭位置、つまり、１個目のライスコードの先頭位置である。
【０１３３】
その１個目のライスコードをデコードする場合、最初に、先頭から連続する“０”の個数ｋ（ｋは２進数で表記される）を検出する。この例では、“０”が５個連続するので、ｋ＝１０１（１０進数表記で“５”に対応する２進数表記）となる。次に、その先頭から最初に出現する“１”の直後にある、予め別途与えられるＫＲビット数のビットを、そのビットストリームから取り出す。例えば、ＫＲ＝４の場合、ビットストリームから取り出される値Ｖは、“１００１”となる。
【０１３４】
ここで、１個目のライスコードがデコードされた値は、“（ｋ＜＜ＫＲ）｜Ｖ”で与えられる。なお、“＜＜”は“ｋ”を“ＫＲ”だけ左側へのビットシフトすることを意味する。上述の例では、ｋ＝１０１であるので、ライスコードがデコードされた値は、“１０１１００１”となる。
【０１３５】
同様に２個目のライスコードがデコードされた値は、“（１＜＜４）｜０１１１”＝“１０１１１”となる。なお、このときにも、ＫＲビット数は４である。即ち、ライスコードごとに、連続する“０”の個数に応じて符号長が増減するが、どのライスコードでも、取り出されるビットのＫＲビット数は一定である。つまり、ＫＲビット数のビット列がライスコードの固定長部分に相当する。
【０１３６】
図１２は、ライスデコード命令が設定された命令ビットフィールドＦの一例を示す図である。
【０１３７】
例えば、図１２に示すように、プログラム生成部１１２ａは、命令ビットフィールドＦの命令種類フィールドＦ１に、“０１００”が設定され、引数フィールドＦ２の左側の４ビットからなる符号長指定フィールドＦ２ｃに“０１００”が設定され、引数フィールドＦ２の右側の１０ビットからなる実行回数指定フィールドＦ２ｄに“００００１０１１００”が設定されるように、ライスデコード命令を生成する。つまり、このように設定された命令種類フィールドＦ１“０１００”は、この命令ビットフィールドＦにより示される命令がライスデコード命令であることを指示し、符号長指定フィールドＦ２ｃ“０１００”は、ＫＲビット数が“４”であることを指定している。さらに、実行回数指定フィールドＦ２ｄ“００００１０１１００”は、ライスコードの個数が“４４”であること、つまり、ライスコードのデコードを４４回すべきことを指示している。
【０１３８】
したがって、このようなライスデコード命令を実行する第２プロセッサ１２０の第２演算回路１２２は、Ｂ信号の先頭側から連続する“０”の個数ｋの検出し、その検出結果に基づいてＢ信号からＫＲビット数のビット“Ｖ”を取り出し、“（ｋ＜＜ＫＲ）｜Ｖ”を算出することを４４回繰り返し実行する。
【０１３９】
なお、バイナリーコードおよびライスコードのそれぞれをデコードすることにより得られる値そのものは、符号極性を有さない符号無し整数（ｕｎｓｉｇｎｅｄ  ｉｎｔｅｇｅｒ）である。したがって、その値を符号化前の状態、即ち符号極性を有する符号有り整数（ｓｉｇｎｅｄ  ｉｎｔｅｇｅｒ）に戻す必要がある。
【０１４０】
そこで、第２演算回路１２２は、その符号無し整数の最下位ビットを極性符号として用い、その符号無し整数を符号有り整数に変換してもよい。即ち、第２演算回路１２２は、その取り出された符号無し整数を“Ｕ”とし、そこから生成される符号有り整数を“Ｓ”とすると、
“  Ｉｆ（（Ｕ＆１）＝＝０）Ｓ＝Ｕ＞＞１；
ｅｌｓｅ  Ｓ＝〜（Ｕ＞＞１）；”
によって、符号無し整数Ｕを符号有り整数Ｓに変換する。なお、“Ｕ＆１”は符号無し整数の最下位ビットを示し、“〜”はビット反転演算子を示す。即ち、第２演算回路１２２は、符号無し整数Ｕの最下位ビットである極性符号が“０”の場合は、符号無し整数Ｕに含まれる最下位ビットを除く上位ビットの値をそのまま正の値として用いる。また、第２演算回路１２２は、符号無し整数Ｕの最下位ビットである極性符号が“１”の場合は、符号無し整数Ｕに含まれる最下位ビットを除く上位ビットの値をビット反転することによって負の値を生成する。
【０１４１】
このような正または負を示す極性符号を取り扱う処理は、上記のようなｉｆおよびｅｌｓｅを含む構文からも明らかなように、条件分岐を伴う処理であるので、一般的に、処理サイクルが通常の演算より大きく、また、プログラムのサイズも増加する。そして、ＤＴＳ方式においては、バイナリーコードおよびライスコードのそれぞれのコードごとに、上記の極性符号の処理が必ず存在する。
【０１４２】
そこで、本変形例では、上述の図１０または図１２に示す１つのバイナリーデコード命令またはライスデコード命令で、極性符号を取り扱うｉｆ側ｅｌｓｅ側の双方を包含するような処理も指示することにより、処理の高速化およびプログラムサイズの削減を図ることができる。
【０１４３】
或いは、命令ビットフィールドＦの値に応じて、上記各命令に、極性符号の処理まで指示するか否かを設定してもよい。例えば、図１２に示したライスデコード命令では、命令種類フィールドＦ１に“０１００”が設定される場合には、そのライスデコード命令は、極性符号の処理を除くデコードを指示する命令であって、命令種類フィールドＦ１に“１１００”が設定される場合には、そのライスデコード命令は、極性符号の処理も含むデコードを指示する命令である。
【０１４４】
以上、本発明に係る信号処理装置について、実施の形態およびその変形例を用いて説明したが、本発明は、これらに限定されるものではない。
【０１４５】
例えば、オーディオ符号化方式においては、ビットストリームから取り出した信号や、その信号が処理されることにより生成された信号などをアドレスとして用い、予め値が確定しているテーブルから、そのアドレスに対応する値を導くという処理が頻繁に行われる。
【０１４６】
そこで、プログラム生成部１１２ａは、上述のハフマンデコード命令、バイナリーデコード命令またライスデコード命令により指示される処理の他、その処理によって生成された信号（アドレス）に対応する値をテーブルから導くという処理までも指示する命令を生成してもよい。つまり、そのように生成される命令は、Ｂ信号から信号を取り出してデコードし、そのデコードにより生成された信号をアドレスとして用い、そのアドレスに対応する値をテーブルから導くという処理を指示する。また、このような命令は、図７、図１０または図１２に示す命令ビットフィールドと同一のフォーマットで生成されてもよく、異なるフォーマットで生成されてもよい。
【０１４７】
したがって、第２プロセッサ１２０の第２演算回路１２２は、例えば図７、図１０または図１２に示す命令ビットフィールドと同一のフォーマットで生成された命令を実行することにより、Ｂ信号からバイナリーコードなどの信号を取り出してデコードし、そのデコードにより生成された信号をアドレスとして用い、そのアドレスに対応する値をテーブルから導き、その値を示す信号を出力する。
【０１４８】
また、プログラム生成部１１２ａは、上述の各命令により指示される処理の他、所謂デグルーピング（ｄｅｇｒｏｕｐｉｎｇ）といわれる処理までも指示するような命令を生成してもよい。このデグルーピングは、Ｐ桁のＮ進数からなる信号の各桁の値を分離する処理、即ち、その信号をＰ個のＮ値のデータに分離する処理である。上述と同様、このような命令は、図７、図１０または図１２に示す命令ビットフィールドと同一のフォーマットで生成されてもよく、異なるフォーマットで生成されてもよい。
【０１４９】
したがって、第２プロセッサ１２０の第２演算回路１２２は、例えば図７、図１０または図１２に示す命令ビットフィールドと同一のフォーマットで生成された命令を実行することにより、Ｂ信号からバイナリーコードなどの信号を取り出してデコードし、そのデコードにより生成された信号をデグルーピングし、そのデグルーピングにより生成された信号を出力する。
【０１５０】
このように、プログラム生成部１１２ａが上述のような複数の処理を指示する高機能命令を生成する場合、第２プロセッサ１２０の第２演算回路１２２は、その高機能命令を備えて、その高機能命令に応じた複数の処理を実行する。
【０１５１】
また、第１プロセッサ１１０の第１演算回路１１２は、第２プロセッサ１２０が生成した信号が格納されているデータメモリ１４０から、そのデータを取り出し、適宜そのデータを処理してもよい。例えば、ビットストリームがＡＡＣ方式の圧縮符号化信号である場合には、データメモリ１４０に格納されているデータは、ハフマンデコードにより生成された信号である。この信号は周波数スペクトル信号である。したがって、第１演算回路１１２は、その周波数スペクトル信号をデータメモリ１４０から取り出して時間軸信号に変換する処理、つまり改良コサイン変換（ＭＤＣＴ）の処理などを実行してもよい。
【０１５２】
また、上記実施の形態およびその変形例における信号処理装置１００は、例えばＤＶＤプレーヤなどに備えられてもよい。
【０１５３】
図１３は、ＤＶＤレコーダの外観を示す図である。
【０１５４】
ＤＶＤレコーダ１００ａは、上記実施の形態およびその変形例における信号処理装置１００を備え、ビットストリームをデコードして再生する。このように、ＤＶＤレコーダ１００ａに信号処理装置１００を備えることにより、ＤＶＤレコーダ１００ａの回路構成を小さくすることができる。
【０１５５】
また、上記実施の形態およびその変形例における信号処理装置１００は、入力バッファ１５０に格納される信号をビットストリームとし、そのビットストリームをデコード（可変長復号化）したが、他の処理を実行してもよい。
【産業上の利用可能性】
【０１５６】
本発明にかかる信号処理装置は、複数のプロセッサを用いて分散処理する際、最適なサイズのプログラムを逐次生成し実行することで、高速でありながら回路規模を小さくできるので、例えばＡＶ機器や、通信機器などに応用でき、具体的には、例えばＤＶＤレコーダや、ＢＤレコーダ、テレビ受信機、高速エンコーダ、携帯端末などに応用できる。
【図面の簡単な説明】
【０１５７】
【図１】本発明の実施の形態における信号処理装置の構成を示す図である。
【図２】同上のＭＰＥＧ規格ＡＡＣ方式のビットストリームに含まれる主要な信号のシンタックスを示す図である。
【図３】同上のＭＰＥＧ規格ＡＡＣ方式における“ｓｅｃｔｉｏｎ＿ｄａｔａ（）”のシンタックスを示す図である。
【図４】同上のＭＰＥＧ規格ＡＡＣ方式における“ｓｐｅｃｔｒａｌ＿ｄａｔａ（）”のシンタックスを示す図である。
【図５】同上の第２プロセッサが備えている命令ビットフィールドを示す図である。
【図６】同上の出力アドレス指定命令が設定された命令ビットフィールドの一例を示す図である。
【図７】同上のハフマンデコード命令が設定された命令ビットフィールドの一例を示す図である。
【図８】同上の処理プログラムと第２プロセッサの処理動作の一例を示す図である。
【図９】同上の信号処理装置１００の動作を示すフローチャートである。
【図１０】同上のバイナリーデコード命令が設定された命令ビットフィールドの一例を示す図である。
【図１１】同上のライスコードを含むビットストリーム（Ｂ信号）の一例を示す図である。
【図１２】同上のライスデコード命令が設定された命令ビットフィールドの一例を示す図である。
【図１３】同上の信号処理装置が備えられたＤＶＤレコーダの外観を示す図である。
【図１４】ＰＣＭ信号をエンコードする従来の信号処理装置の構成を示すブロック図である。
【図１５】ビットストリームをデコードする従来の信号処理装置の構成を示すブロック図である。
【図１６】複数のプロセッサを備えた従来の信号処理装置の構成を示すブロック図である。
【符号の説明】
【０１５８】
１００  信号処理装置
１１０  第１プロセッサ
１１１  第１プログラムメモリ
１１２  第１演算回路
１１２ａ  プログラム生成部
１２０  第２プロセッサ
１２１  第２プログラムメモリ
１２２  第２演算回路
１３０  セレクタ
１４０  データメモリ
１５０  入力バッファ
【図１】
2008257221.tif 000003
【図２】
2008257221.tif 000004
【図３】
2008257221.tif 000005
【図４】
2008257221.tif 000006
【図５】
2008257221.tif 000007
【図６】
2008257221.tif 000008
【図７】
2008257221.tif 000009
【図８】
2008257221.tif 000010
【図９】
2008257221.tif 000011
【図１０】
2008257221.tif 000012
【図１１】
2008257221.tif 000013
【図１２】
2008257221.tif 000014
【図１３】
2008257221.tif 000015
【図１４】
2008257221.tif 000016
【図１５】
2008257221.tif 000017
【図１６】
2008257221.tif 000018