(57)【要約】【課題】  処理フレームの長さが異なる２つのタスクを同一処理系で並列処理する場合、一方のタスクをサンプル同期処理し他方のタスクを効率よく実行する。【解決手段】  タスクＡ実行中にＳＪ命令が発行されると（Ｓ３０２）、ＰＣにスタックの値を書き込み、その値が示すタスクＢへジャンプする。次のＳａｍｐｌｅ＿ｔｉｃｋの後（Ｓ３０４）、前のサンプル期間内にＥＮＤ命令またはＥＦ命令の発行があれば（Ｓ３０６）ＰＣをクリアしてタスクＡにジャンプする。１つ前のサンプル期間内にＥＮＤ命令・ＥＦ命令が発行されていなければ（Ｓ３０６）割り込み許可フラグをオンし（Ｓ３１２）待機する（Ｓ３１４）。ＩＮ命令が発行されるとＰＣ値＋１をスタックに格納し、退避処理プログラムを実行し、待機する（Ｓ３１８）。ＥＦ命令が発行されると割り込み許可フラグをオフし（Ｓ３２０）、ＰＣをクリアしてタスクＡにジャンプする（Ｓ３０８）。【選択図】  図５
2006155103.tif 000002
【特許請求の範囲】
【請求項１】
処理フレームの長さが異なる第１のタスクおよび第２のタスクを割り込みに応じて切り替えて実行する情報処理手段と、
割り込みを許可するフラグを制御する割り込みフラグ制御手段と、
タスクの切り替えを許可するタスク切り替え許可手段とを備え、
前記情報処理手段は、前記第２のタスクを実行中、前記割り込みフラグ制御手段がフラグを立てて割り込みを許可した時間以降に前記タスク切り替え許可手段がタスクの切り替えを許可した場合、実行中の前記第２のタスクに関する情報をスタックに退避し、実行すべきタスクを前記第１のタスクに切り替えることを特徴とするタスクスケジューラ。
【請求項２】
前記情報処理手段は、前記第１のタスクの終了後に前記スタックに退避した情報を読出して前記第２のタスクの実行を再開することを特徴とする請求項１に記載のタスクスケジューラ。
【請求項３】
前記第１のタスクは音声信号の時間領域処理であり、前記第２のタスクは音声信号の周波数領域処理であることを特徴とする請求項１または２に記載のタスクスケジューラ。
【請求項４】
前記処理フレームは少なくとも１つのサンプル期間からなることを特徴とする請求項３に記載のタスクスケジューラ。
【請求項５】
タスクの最終処理行を示す最終処理行指示手段をさらに備え、実行中の前記第２のタスクに関する情報を前記スタックに退避した前記情報処理手段は、前記最終処理行指示手段の指示に応答して、実行すべきタスクを前記第２のタスクから前記第１のタスクに切り替えることを特徴とする請求項４に記載のタスクスケジューラ。
【請求項６】
前記情報処理手段は、前記割り込みフラグ制御手段が割り込みを許可していない期間における前記最終処理行指示手段の指示に応答してＮＯＰ状態を保持し、次のサンプル期間が開始する時に前記第２のタスクから前記第１のタスクへ切り替え、当該サンプル期間中は割り込みを禁止することを特徴とする請求項５に記載のタスクスケジューラ。
【請求項７】
処理フレームの長さが異なる第１のタスクおよび第２のタスクを割り込みに応じて切り替えて実行するコンピュータにより実行されるタスクスケジュール方法であって、前記コンピュータが、
割り込みを許可するステップと、
タスクの切り替えを許可するステップと、
前記第２のタスクを実行中、前記割り込みを許可するステップにおいて割り込みを許可した時間以降にタスクの切り替えを許可した場合、実行中の前記第２のタスクに関する情報をスタックに退避し、実行すべきタスクを前記第１のタスクに切り替えるステップとを備えることを特徴とするタスクスケジュール方法。
【請求項８】
コンピュータを、
処理フレームの長さが異なる第１のタスクおよび第２のタスクを割り込みに応じて切り替えて実行する情報処理手段、
割り込みを許可するフラグを制御する割り込みフラグ制御手段、および
タスクの切り替えを許可するタスク切り替え許可手段として機能させるコンピュータプログラムであって、
前記情報処理手段は、前記第２のタスクを実行中、前記割り込みフラグ制御手段がフラグを立てて割り込みを許可した時間以降に前記タスク切り替え許可手段がタスクの切り替えを許可した場合、実行中の前記第２のタスクに関する情報をスタックに退避し、実行すべきタスクを前記第１のタスクに切り替えることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はタスクスケジューラ、その方法およびコンピュータプログラムに関し、より詳細には、処理フレームの長さが違う２つのタスクを同一処理系で並列処理する場合、例えば音声処理を行う場合等に好適なタスクスケジューラ、その方法およびコンピュータプログラムに関する。
【背景技術】
【０００２】
近年、道路交通法が改正され車両内での携帯電話取扱規制に関する取り締まりが施行されたことに伴い、車両内での通話が処罰の対象となった。但し、ハンズフリーキットを利用した通話などは対象外と考えられている。このような状況に鑑み、ハンズフリーのモバイル機器における音声処理技術の開発が盛んになっている。
【０００３】
ハンズフリー電話機では、スピーカから再生された遠端側音声がマイクで収録されて、会話の妨げとなるエコーやハウリングが生じてしまう。また、車両内の話者（近端話者）の音声には車両で発生する雑音、例えばロードノイズ、エアコン送風音、エンジン音が混入し、それを聞くことになる遠端話者に不快感を与えてしまう。
そこで、快適な会話を行うために、エコー・キャンセラを用いてエコーやハウリングを除去し、ノイズ・キャンセラで雑音を除去する等の音声処理が必要となる。音声処理は、時間領域処理と周波数領域処理の２つの処理に分けられる。時間領域処理はスムージング等のフィルタリング、周波数領域処理はＦＦＴ（Ｆａｓｔ  Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｍｆｏｒｍ）、ｉＦＦＴ（ｉｎｖｅｒｓｅ  Ｆａｓｔ  Ｆｏｕｒｉｅｒ  Ｔｒａｎｓｍｆｏｒｍ）によって可能となる演算処理がその代表的なものである。
【０００４】
また、近年の音響制御、たとえばサラウンド処理に関しても、サンプル単位の処理とフレーム単位の処理を混載したアルゴリズムが登場してきており、これらの機能を効率良く実現するためにも、本発明は有効に機能する。
【０００５】
【特許文献１】特開平１０−２２８３８５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
音声処理を行う場合、信号処理を大別すると時間領域処理を行う部分は１サンプル単位としたフレーム処理、周波数領域処理を行う部分はＦＦＴポイントのサンプル数を１単位としたフレーム処理である。時間領域処理系のタスクをタスクＡ、周波数領域処理系のタスクをタスクＢとした場合、
タスクＡ（時間領域処理系）＝ １サンプル単位
タスクＢ（周波数領域処理系）＝ ＦＦＴポイント数のサンプル数単位（例えば２５６サンプル単位）
としてタスク管理をしなければならない。ここで、タスク管理を上位、すなわちオペレーティングシステムにおいて行うこととした場合、タスクスイッチによる切り替えが必要となる（特許文献１参照）。この場合、周波数領域処理系がパイプライン処理を行っている途中で切り替えが発生すると、タスクを切り替える前に、現在実行しているタスクに関する情報を保持しなければならない。この情報の保持のため、最小単位（レジスタ全て）の退避・復帰処理を行うか、あるいはハード的にパイプライン処理系全ての裏レジスタ（シャドウレジスタ）の装備が必要になる。しかしながら、レジスタ全ての退避、復帰を行う場合はタスク切り替えによるオーバーヘッドが増加してしまうという問題がある。また、裏レジスタを装備する場合はハードウェアが増大してしまうという問題がある。
【０００７】
また、タスク管理を避けて、タスクＡおよびＢを同一フレーム長で処理を行う手法が存在する。この手法を上記の例に適用すると、時間領域処理を２５６サンプル分連続して実行し、その後当該２５６サンプル分のデータについて周波数領域処理を実行することになる。タスクＡおよびＢを同一のフレームとして処理する方法は、現代の汎用ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）による信号処理では最も一般的である。信号処理で処理量の比重が大きいのは、通常時間領域での処理である。そのため、サンプル同期用のアクセラレータを有効に使用すると、全体の処理の効率化に寄与するが、タスクＡ，Ｂを同一のフレームで処理しようとすると時間領域処理のタスクのアクセラレータが複雑になってしまうという問題がある。例えば、連続する時間領域処理におけるサンプル同期用のアクセラレータにおいて図１に示すような時間領域ディジタルフィルタを構成する場合を考える。同図において、Ｚ−１は前回（即ち時間ｔ−１）における演算処理の出力を格納したアドレスの参照を示す。ここで実行される処理によれば、時間ｔにおけるサンプリングデータの値をｘ（ｔ）として、出力値ｙ（ｔ）は
ｙ（ｔ）＝０．１×ｘ（ｔ）＋０．９×ｙ（ｔ−１）…（式１）
で表される。これらの演算をＤＳＰ上で行う場合、係数ポインタ（上式の係数０．１、０．９を指すポインタ）をサンプル毎に自動的にリセットするハードウェアの仕組みがあると効率が良い。この仕組みがなければ、プログラムで１サンプル分のデータ毎にポインタを設定し直さなければならないため、プログラムが冗長となる。また、遅延素子のポインタ（上式のｙ（ｔ−１）を指すポインタ）をサンプル毎に１アドレス、自動的に相対インクリメントするハードウェアの仕組みも効率化に貢献する。この仕組みがなければ、プログラムでバッファを構成して、１データ処理毎にバッファ内のデータを全てずらす処理が必要になり、プログラムが冗長となる。このようにサンプル同期処理、すなわち時間領域の演算処理を行うときにサンプル毎に自動的に処理に都合の良い動作を行うハードウェアの仕組みを「サンプル同期アクセラレータ」と呼ぶ。
【０００８】
また、タスク管理を避けて、タスクＡおよびＢの処理を同一フレーム長で行う従来の方法では、時間領域処理のタスクをフレーム長で（上記の例では２５６サンプル分の処理で）拘束するため、場合によって拘束用のバッファ増大や拘束による処理遅延が発生してしまうという問題がある。
【０００９】
これに対し、オペレーティングシステムでタスクを管理することなく、時間領域処理のタスクをサンプル毎に処理することができれば、上記「サンプル同期アクセラレータ」を有効に利用する事で、サンプル処理の時間的概念やそれを補う処理を意識する必要がない。この場合、プログラムコードは（式１）の如く１サンプル分のコードを信号処理フローのとおりに素直に記述できるので、コードを簡潔・小容量で記述できる。このような「サンプル同期アクセラレータ」を搭載して時間領域処理のみに特化したハードウェアの例もあるが、汎用的なハードウェアにおいても、時間領域処理のタスクをサンプル毎に処理できることが望ましい。
【００１０】
本発明はこのような問題に鑑みてなされたものであり、その目的とするところは、音声処理における時間領域処理および周波数領域処理のように処理フレームの長さが異なる２つのタスクを同一処理系で並列処理する場合において、一方のタスクをサンプル同期処理しつつ、ハードウェア増加や、アプリケーション・ソフトウェアの冗長化・処理の煩雑化を抑えながら、同時に他方のタスクを効率よく実行することができるタスクスケジューラ、その方法およびコンピュータプログラムを提供することにある。
【課題を解決するための手段】
【００１１】
このような目的を達成するために、本発明に係るタスクスケジューラは、処理フレームの長さが異なる第１のタスクおよび第２のタスクを割り込みに応じて切り替えて実行する情報処理手段と、割り込みを許可するフラグを制御する割り込みフラグ制御手段と、タスクの切り替えを許可するタスク切り替え許可手段とを備え、前記情報処理手段は、前記第２のタスクを実行中、前記割り込みフラグ制御手段がフラグを立てて割り込みを許可した時間以降に前記タスク切り替え許可手段がタスクの切り替えを許可した場合、実行中の前記第２のタスクに関する情報をスタックに退避し、実行すべきタスクを前記第１のタスクに切り替える。
【００１２】
ここで、前記情報処理手段は、前記第１のタスクの終了後に前記スタックに退避した情報を読出して前記第２のタスクの実行を再開してもよい。
【００１３】
また、前記第１のタスクは音声信号の時間領域処理であり、前記第２のタスクは音声信号の周波数領域処理であるものとしてもよい。
【００１４】
ここで、前記処理フレームは少なくとも１つのサンプル期間からなるものとしてもよい。
【００１５】
ここで、タスクの最終処理行を示す最終処理行指示手段をさらに備え、実行中の前記第２のタスクに関する情報を前記スタックに退避した前記情報処理手段は、前記最終処理行指示手段の指示に応答して、実行すべきタスクを前記第２のタスクから前記第１のタスクに切り替えてもよい。
【００１６】
また、前記情報処理手段は、前記割り込みフラグ制御手段が割り込みを許可していない期間における前記最終処理行指示手段の指示に応答してＮＯＰ状態を保持し、次のサンプル期間が開始する時に前記第２のタスクから前記第１のタスクへ切り替え、当該サンプル期間中は割り込みを禁止してもよい。
【００１７】
本発明に係るタスクスケジュール方法は、処理フレームの長さが異なる第１のタスクおよび第２のタスクを割り込みに応じて切り替えて実行するコンピュータにより実行されるタスクスケジュール方法であって、前記コンピュータが、割り込みを許可するステップと、タスクの切り替えを許可するステップと、前記第２のタスクを実行中、前記割り込みを許可するステップにおいて割り込みを許可した時間以降にタスクの切り替えを許可した場合、実行中の前記第２のタスクに関する情報をスタックに退避し、実行すべきタスクを前記第１のタスクに切り替えるステップとを備える。
【００１８】
本発明に係るコンピュータプログラムは、コンピュータを、処理フレームの長さが異なる第１のタスクおよび第２のタスクを割り込みに応じて切り替えて実行する情報処理手段、割り込みを許可するフラグを制御する割り込みフラグ制御手段、およびタスクの切り替えを許可するタスク切り替え許可手段として機能させるコンピュータプログラムであって、前記情報処理手段は、前記第２のタスクを実行中、前記割り込みフラグ制御手段がフラグを立てて割り込みを許可した時間以降に前記タスク切り替え許可手段がタスクの切り替えを許可した場合、実行中の前記第２のタスクに関する情報をスタックに退避し、実行すべきタスクを前記第１のタスクに切り替える。
【００１９】
アプリケーション・ソフトウェア設計者は通常、「プログラムのどの部分でタスクの切り替えが発生すれば、退避、復帰処理が最も少なく、且つ処理のオーバーヘッドが最も少ないか」を把握可能なものである。そこで、本発明では、プログラムの中で「もしタスク切り替えを行うのであれば、この位置が最も理想的」と考えられる位置に「タスク切り替え許可コード」（以下説明のためにこのコードの表記を「ＩＮ」とする）を埋め込む。ハードウェアは、ＰＣ（プログラムカウンタ）がその位置に達しコードをデコードし認識し、且つ次のサンプル単位に変わっていたならば、タスクに関する情報の退避を行ってタスクの切り替えを行う。このような処理を行うことにすれば、リアルタイムＯＳのような仕組みを使うことなく、ハードウェアは単純でありながら、ハードウェアとアプリケーション・ソフトウェアの連携により、非常に効率の良いタスク管理が可能になる。
【発明の効果】
【００２０】
本発明によれば、第１のタスクは必ず毎サンプル期間内に行い、第２のタスクはその空いた期間にタスクを分割しながら処理を行うことができる。
【００２１】
また、第１のタスクは最小の遅延期間で処理することができる。
【００２２】
また、第１のタスクを処理する際にサンプル同期アクセラレータを有効に利用することができる。
【００２３】
さらに、第１のタスクを処理するためのプログラムを簡潔に小容量で記述することができる。
【発明を実施するための最良の形態】
【００２４】
以下、図面を参照し、本発明を実施するための最良の形態について詳細に説明する。
【００２５】
図２は、本実施形態に係るタスクスケジューラを実装したハンズフリーの音声処理システムにおけるタスクの概念を示す。同図において、メイン関数により実行される時間領域処理はブロック５２２で示されている。また、サブ関数により実行される周波数領域処理はブロック５２４で示されている。
【００２６】
ＥＣ（Ｅｃｈｏ−Ｃａｎｃｅｌｌｅｒ）５０２は、マイク５０８または携帯電話５１０から音声信号を入力し、車室内で発生するエコーを減衰させる。ＥＱ（Ｅｑｕａｌｉｚｅｒ）５０４および５０５は、携帯電話５１０の送受信音声の音質を調整する。ＥＳ（Ｅｃｈｏ−Ｓｕｐｐｒｅｓｓｅｒ）５０６は、ＥＣ５０２の補助として残留エコーを抑える。
【００２７】
ＦＦＴ処理部５１６は、時間領域の音声データを周波数領域のデータに変換する。ＮＣ（Ｎｏｉｓｅ−Ｃａｎｃｅｌｌｅｒ）（ＳＳ）５１４は、周波数領域データを使用して雑音を推定し除去する。ｉＦＦＴ処理部５１２は、雑音を除去した周波数領域の音声データを時間領域のデータに変換する。レジスタ５２０および５１８は時間領域処理、周波数領域処理のいずれにおいても使用されるもので、前述したようにこのレジスタもサンプル同期アクセラレータによって制御されるリングアドレスの記憶装置で、毎サンプル毎にＤＳＰが参照する相対アドレスが＋１ずつ自動的にインクリメントする。
【００２８】
携帯電話５１０から入力された音声サンプルはサンプル同期処理のＥＱ５０５において処理され、その処理音声信号は次のサンプル期間には直ちにスピーカ５１９から出力される。その処理と同時にマイク５０８より入力された音声サンプルは、サンプル同期処理のＥＣ５０２によりエコーを除去されて１サンプルずつレジスタ５２０に格納される。そして、２５６サンプル（１フレーム分）のデータ格納されると、このデータはまとめてＦＦＴ処理部５１６に渡され、ＦＦＴ処理部５１６による高速フーリエ変換、ＮＣ（ＳＳ）５１４によるノイズ除去、ｉＦＦＴ処理部５１２による逆高速フーリエ変換を経て、レジスタ５１８に格納される。このようにして格納されたデータは、ＥＳ５０６において残留エコーを抑制する際に使用される。
【００２９】
なお、本実施形態では１フレーム（Ｆｒａｍｅ−０）として２５６サンプル（ｔ−０〜ｔ−２５５）を使用して周波数領域処理を実行し、処理後の２５６サンプルのデータを次回の処理までメモリに保持しておく。次の周波数領域処理は、Ｆｒａｍｅ−０の後半（ｔ−１２８）から始まる２５６サンプルのデータを使用して実行する。そして、新たに取得された２５６サンプルのデータの前半１２８サンプルと、保持しているデータの後半１２８サンプルとを合成して、レジスタ５１８に出力している（ｔ＋１〜ｔ−１２６）。周波数領域処理においては２５６サンプルのデータについて前処理としてハニング・ウィンドウ関数等の窓関数を掛けている。
【００３０】
以下では、パイプライン処理系をＤＳＰと称して動作を説明する。なお、本実施形態ではコンピュータプログラムを読出して実行するＤＳＰにおいて本発明の処理が実行されることとしたが、ＣＰＵ等の他の処理装置において実行することも可能である。
【００３１】
本発明は、上記コンピュータプログラムのプログラムコードを記録したコンピュータ読み取り可能媒体から、システムあるいは装置のプロセッサ（コンピュータ）が当該プログラムコードを読出して実行することによって達成される。より具体的には、本発明はプロセッサが後述する信号から判断されるタイミングに応じた処理を実行することにより達成される。この場合、コンピュータ読み取り可能媒体から読み出されたプログラムコード自体が本発明の機能を実現することになり、そのプログラムコードを記録したコンピュータ読み取り可能媒体は本発明を構成することになる。
【００３２】
このようなコンピュータ読み取り可能媒体としては、フロッピ−（登録商標）ディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどを用いることができる。
【００３３】
本実施形態において、タスクを実行するためのプログラムには以下の命令コードを入力し、またＤＳＰはこれらのコードをデコードし、かつ実行することができるように設計される。
【００３４】
［命令コード］
本発明では、後述するＭＡＣやＩＦを制御する従来のプログラム命令コードに加えて、
以下の３つの命令コードを追加することで、タスク管理を行う。
【００３５】
・ＩＮ:ＸＸＸＸ
[意味]
ジャンプ命令。現在のＰＣ値＋１をスタックにプッシュし、指定アドレスにジャンプする。
【００３６】
ＩＮ命令はタスクの切り替えを許可するコードで、この命令が記述された行を実行しているときのみ、ＤＳＰへの割り込みを許可する（ＭＡＳＫ解除）。ＤＳＰ-ｉｎｔにより割り込みが発生すると、その時点におけるＤＳＰのＰＣ内のＰＣ値に１を加算した値をスタックにプッシュし、割り込みルーチンの先頭アドレスＸＸＸＸにＰＣを書き換えてジャンプする。
【００３７】
・ＳＪ
[意味]
ジャンプ命令（ＩＮ）によりスタックに保持されたＰＣ値にジャンプする。ポップ先がない（つまりＩＮ命令によりスタックされた値がない）場合、この命令は無視して直後の行を実行する。したがって、ＳＪ命令とＩＮ命令はサブ関数の最初と最後に対応する。
【００３８】
・ＥＦ
[意味]
プログラムの最終処理行を示す点では従来のＥＮＤ命令と同様であるが、ＥＮＤ命令では当該命令以後のサンプル期間中単にＮＯＰ状態を保持するのに対し、ＥＦ命令は後述するような処理を行う点で異なっている。図３は、上記命令コードが記述されたプログラムの例を示す。
【００３９】
図４は、本実施形態に係るタスクスケジューラのハードウェア構成を示すブロック図である。
【００４０】
ＰｒｏｇｒａｍＲＡＭ４０２は、ＰＣ値のアドレスに格納されたプログラムを出力する。ＤＥＣ回路４０４は、出力されたプログラム中のＰＣに対応する処理をデコードする。ＤＥＣ回路４０４は、デコードされた命令のうちＥＮＤ、ＥＦ、ＩＮおよびＳＪ命令以外のもの（積和算等）をＭＡＣ（積和算）回路４０６に送り、音声処理・信号処理を行う。処理が行われた信号は、Ｉ／Ｆ回路４０８を経由して、ＡＤＣ回路４１２からのデータ（即ちサンプリングされたデータ群）をＭＡＣ回路４０６に入力する。またＭＡＣ回路４０６で処理されたデータは、Ｉ／Ｆ回路４０８を経由してＤＡＣ回路４１０に出力する。
【００４１】
タスクスケジューラは通常、＋１回路４１４によりＰＣが１ずつインクリメントされ、タスクＡに切り替わると強制的にタスクＡが格納されている領域のプログラムの先頭にＰＣを書き換えて実行する。通常、タスクＡはプログラムＲＡＭの先頭行（即ち０番地）から格納される。
【００４２】
タスクＡのプログラム以降にあるタスクＢのスタック復帰処理を行い（図３の例ではiを復帰）それに続くＳＪ命令をデコードした場合、タスクスケジューラは１つ前のＩＮ命令にてスタックに保持されたＰＣ値を選択して新たなＰＣ値とすることで、１つ前のＳａｍｐｌｅ＿ｔｉｃｋでＩＮ命令により中断されたタスクＢのプログラムの続きを実行する。
【００４３】
また、プログラム実行中にＥＮＤ命令が発行された場合、次のＳａｍｐｌｅ＿ｔｉｃｋが入力されるまで、ＰＣｃｌｅａｒを選択し、ＰＣを０に設定することで、タスクＡの準備を完了しＮＯＰ（ＮＯ−ＯＰＥＲＡＴＩＯＮ）状態を保持し、それにより次の音声サンプルが取り込まれるまで待機状態となる。
また、ＥＮＤ命令が実行されずにＳａｍｐｌｅ＿ｔｉｃｋが入力された場合、割り込み許可フラグをオンにする。
【００４４】
次に、割り込み許可フラグがオンの状態でＩＮ命令が実行された場合、現在のＰＣ値に１加算した値をスタックに保持し、かつ退避処理プログラムのあるアドレス（退避処理アドレス）をＰＣ値として選択する。退避処理プログラムの実行により、実行中のプログラムに関するデータの退避が行われる。図３に示す例では、ｉの値が退避されることになる。
【００４５】
また、割り込み許可フラグがオフの場合、ＩＮ命令が発行されてもＡＮＤ回路により無視される。
【００４６】
退避処理プログラムの最後にあるＥＦ命令を実行すると、割り込み許可フラグをオフに設定し、ＰＣｃｌｅａｒを選択し、ＰＣを０に設定し、タスクＡのプログラムの先頭から処理を開始する。
【００４７】
このようにして、最終処理行の指示に応答して、実行すべきタスクをタスクＢからタスクＡに切り替える処理が実現される。
【００４８】
図５は、ＤＳＰで使用される信号のタイミングチャートの一例を示す。Ｓａｍｐｌｅ＿ｔｉｃｋは、サンプリング信号である。ＤＳＰ-ｉｎｔは、ＤＳＰに割り込み（タスク切り替え）を発生させるパルスである。割込許可は割り込みを許可する期間を指定する信号で、ｓａｍｐｌｅ＿ｔｉｃｋの立ち上がりから開始し、割り込みを許可する期間だけ立ち上がる。本実施形態では、（１）の期間で割り込みが許可され、（２）の期間は無条件不許可であり、（３）の期間で実行中のタスクＢに関する情報のスタックへの退避が行われる。
【００４９】
プログラム実行中は、同プログラム内でＩＮ命令が書かれた位置でのみ割り込みマスクが解除される。割り込み許可区間（１）でＩＮ命令が発行された場合、ＤＳＰへの割り込みを許可する。（２）の区間でＩＮ命令がデコードされても割り込みは許可しない。
【００５０】
このようにして、タスクＢを実行中、割り込み許可により指定した期間内に、タスク切り替えを発生させるＤＳＰ−ｉｎｔが立ち上がりタスク切り替えが許可された場合、実行中のタスクＢに関する情報をスタックに退避し、実行すべきタスクをタスクＡに切り替える処理が実現される。
【００５１】
また、ＥＦ命令が発行されたら、そのサンプル期間内の残りの期間（２）は無条件で割り込み禁止となる。
【００５２】
（１）の期間においてＥＦ命令が発行された場合、その時点でサンプル同期アクセラレータが起動し、タスクＡへの切り替えを行う。（２）の期間でＥＦ命令が発行された場合、サンプル期間の切れ目までＮＯＰ状態となり、次のサンプル期間の始めでサンプル同期アクセラレータの起動を行い、その期間は１サンプル期間分全て無条件の割り込み禁止区間となる。すなわち、次のＳａｍｐｌｅ＿ｔｉｃｋまでＮＯＰとなり、次のＳａｍｐｌｅ＿ｔｉｃｋの始めでサンプル同期アクセラレータが起動し、タスクＡへの切り替えを行い、そのサンプル期間は、無条件の割り込み禁止区間となる。
【００５３】
また、前回のサンプリング期間にＥＦ命令が発行されていたならば、その次の期間は無条件で割り込み禁止区間とする。ＲＥＳＥＴ解除後の１サンプルも無条件で割り込み禁止とする。
【００５４】
ＤＳＰは、１サンプル毎に実行するタスクＡが終了すると、前回のサンプリング期間中に処理を中断されたタスクＢの続きを実行するために、タスクＢの情報をスタックに退避していたものを読み出してレジスタに復帰させ、ＳＪ命令を実行する。ＳＪ命令の実行により、タスクＢの前回サンプリング期間において中断された箇所から続きの処理を再開し、前回のＩＮ命令で保持していたＰＣ値をＰＣに書き込む。上述したように、ＩＮ命令は、中断されても効率に影響しない部分に記述しておく。このような処理を行いながら、ハードウェア側では、Ｓａｍｐｌｅ＿ｔｉｃｋの先頭から有効になる割り込み許可フラグと、このＩＮ命令の監視を行う。そして、
ＴＲＵＥ ＝＝ （ＩＮ命令発行） ＡＮＤ （割り込み許可フラグ＝オン）
となった場合に限り、その時のＰＣ値に１加算した値を次のタスクＢ処理再開のために保持し、ＩＮ命令で指定していた割り込み発生時の処理ルーチン（退避処理プログラム）へＰＣを移動させる。そのルーチンで、必要なタスクＢの情報をスタックに退避させて、ＥＦ命令の実行により、サンプル同期アクセラレータを起動させてタスクＡに切り替える。
【００５５】
図６は、ＩＮ命令が有効または無効となるタイミングを示すタイミングチャートの一例を示す。同図において、メインとは時間領域処理（タスクＡ）、サブとは周波数領域処理（タスクＢ）を示す。また、メインは常に１サンプル毎に処理され、サブは分割して処理される。ＲＥＳＥＴ解除の１サンプルでは、割り込み不許可（「×」で示す）となっているが、次のＳａｍｐｌｅ＿ｔｉｃｋ後はＩＮ命令の発行を受けてタスクＢに関する情報をスタックに退避し、ＥＦ命令の発行時にタスクＡへ切り替えられている。次いでタスクＡ終了後にＳＪ命令が発行され、タスクＢに処理が切り替わる。同図では次のＳａｍｐｌｅ＿ｔｉｃｋまでにタスクＢが終了し、ＥＦ命令が発行されている。このＥＦ命令は、割り込み不許可期間に発行されている。次のＳａｍｐｌｅ＿ｔｉｃｋではタスクＡ、タスクＢが実行されるが、割り込み不許可期間でＥＦ命令が発行されたので、この期間は無条件で割り込み不許可となる。
【００５６】
このようにして、タスクＢを実行中、割り込み許可により指定した許可開始以後に、切り替えを許可するＩＮ命令が発行された場合、実行中のタスクＢに関する情報をスタックに退避し、ＥＦ命令発行をもって割り込み許可フラグをＯＦＦにして実行すべきタスクをタスクＡに切り替える処理が実現される。
【００５７】
以下、この処理を繰り返す。
【００５８】
また、ＩＮ命令を配置する位置は効率に影響しない位置の内、タスクＡへの負担が大きくならない程度に選んで配置すれば良い。タスクＡへの影響の度合いは、割り込み許可フラグの長さが、その負担の度合いを表しているので、このフラグを外部からモニタする仕組みを付加すると良い。即ち、このフラグの長さが、タスクＡの開始がどれだけ遅れたかを表す事になるからである。逆に言えば、タスクＡへの負担がそれほど大きくなければ、ＩＮ命令の配置数を減らす事ができる。
【００５９】
図７は、ＤＳＰにより実行されるハードウェア論理動作を示すフローチャートである。タスクＡの終了後にＳＪ命令が発行されると（ステップＳ３０２のＹｅｓ）、スタックに保持したＰＣ値をＰＣに書き込み、その値が示すアドレス、即ちタスクＢへジャンプする。次のＳａｍｐｌｅ＿ｔｉｃｋの後（ステップＳ３０４のＹｅｓ）、１つ前のサンプル期間内にＥＮＤ命令またはＥＦ命令の発行があれば（ステップＳ３０６のＹｅｓ）ＰＣをクリアしてタスクＡにジャンプし、ステップＳ３０２からの処理を繰り返す。１つ前のサンプル期間内にＥＮＤ命令およびＥＦ命令のどちらも発行されていなければ（ステップＳ３０６のＮｏ）、割り込み許可フラグをオンにし（ステップＳ３１２）、ＩＮ命令が発行されるまで待機する（ステップＳ３１４）。ＩＮ命令が発行されると、ＰＣ値＋１をスタックレジスタに格納し、退避処理プログラムのアドレスをＰＣに格納し、退避処理プログラムを実行し、ＥＦ命令が発行されるまで待機する（ステップＳ３１８）。ＥＦ命令が発行されると割り込み許可フラグをオフし（ステップＳ３２０）、ＰＣをクリアしてタスクＡにジャンプし（ステップＳ３０８）、ステップＳ３０２からの処理を繰り返す。
【００６０】
以上、本発明の好適な実施の形態について説明したが、本発明は上述の実施形態に限定されず、他の種々の形態でも実施することができる。例えば、上述の実施形態では２つのタスクとして音声信号処理のうちの時間領域処理、周波数領域処理を例に挙げて説明したが、本発明は２つ以上の他のタスクを実行する環境において実行可能である。
【００６１】
また、本発明は、３つ以上のタスクが実行されるタスクスケジューラにおいても、そのタスクに処理フレームの長さが異なる２つのタスクが含まれていれば適用することができる。
【００６２】
また、ＩＮ命令が実行された場合、ＰＣ値に１を加算して退避せずに、ＰＣ値をそのままスタックに退避してもよい。この場合、中断したタスクを復帰する際には退避したＰＣ値を取り出し、その値に１を加算したアドレスを参照することになる。
【図面の簡単な説明】
【００６３】
【図１】時間領域ディジタルフィルタの構成例を示す図である。
【図２】本発明の一実施形態に係るタスクスケジューラを実装したハンズフリーの音声処理システムにおけるタスクの概念を示す図である。
【図３】命令コードが記述されたプログラムの例を示す図である。
【図４】本発明の一実施形態に係るタスクスケジューラのハードウェア構成を示すブロック図である。
【図５】ＤＳＰで参照される信号のタイミングチャートの一例を示す図である。
【図６】ＩＮ命令が有効または無効となるタイミングを示すタイミングチャートの一例を示す図である。
【図７】本発明の一実施形態に係るＤＳＰにより実行される動作を示すフローチャートである。
【符号の説明】
【００６４】
４０２  プログラムＲＡＭ
４０４  ＤＥＣ回路
４０６  ＭＡＣ回路
４０８  Ｉ／Ｆ回路
４１０  ディジタル・アナログ変換回路
４１２  アナログ・ディジタル変換回路
４１４  ＋１回路
４１６  スタック
５０２  エコー・キャンセラ
５０４、５０５  イコライザ
５０６  エコー・サプレッサ
５０８  マイク
５１９  スピーカ
５１０  携帯電話
５１２  逆フーリエ変換処理部
５１４  ノイズ・キャンセラ
５１６  フーリエ変換処理部
５１８、５２０  レジスタ
５２２  メイン関数
５２４  サブ関数
【図１】
2006155103.tif 000003
【図２】
2006155103.tif 000004
【図３】
2006155103.tif 000005
【図４】
2006155103.tif 000006
【図５】
2006155103.tif 000007
【図６】
2006155103.tif 000008
【図７】
2006155103.tif 000009