(57)【要約】  グラフィカルプログラミング環境における入力データのブロック処理を実行するための方法及びシステムを開示する。処理対象の前記入力データが、複数のブロックに分割される。前記入力データの各ブロックが、前記入力データの各ブロックを処理するためのデータ処理装置へと送られる。処理された前記データの複数のブロックは、結合されて出力データを生成する。前記出力データのサイズが前記入力データのサイズよりも小さいか又はこれと等しい場合には、前記出力データが前記入力データに上書きされる前記入力データのインプレース処理を本発明が行ってもよい。前記入力データのインプレース処理においては、前記ブロック処理において前記入力データを処理する際のメモリ領域が節約されるように、前記出力データがメモリ領域を前記入力データと共有してもよい。
2007524156.tif 000002
【特許請求の範囲】
【請求項１】
グラフィカルプログラミング環境における入力データのブロック処理を実行するためのシステムであって、前記グラフィカルプログラミング環境が、実際のシステムを数学的に表すモデルを提供し、前記入力データが複数のデータブロックに分割される、以下を備えたシステム：
処理対象の前記入力データの各データブロックを個別に特定するアドレスを生成するためのインデックスジェネレータと；
前記インデックスジェネレータによって生成された前記アドレスに基づいて、前記入力データから一データブロックを選択するためのセレクタと；
各データブロックを処理して前記データブロックに関連した出力を生成する、ブロック処理装置と；
前記入力データの前記複数のデータブロックの反復処理を可能にするイテレータと；
前記ブロックインデックスに基づいて処理済みの複数のデータブロックを再びアセンブルして前記システムの出力を生成するための、出力ジェネレータ。
【請求項２】
前記インデックスジェネレータによって生成された前記データブロックアドレスがスカラ又はベクタのいずれかであり、前記データブロックアドレスが、前記データブロック内に含まれる全てのサンプルを個別に特定可能なコード語である、請求項１に記載のシステム。
【請求項３】
前記スカラ又はベクタアドレスの大きさが、前記データブロックの大きさよりも小さくなくてはならない、請求項２に記載のシステム。
【請求項４】
前記インデックスジェネレータが、大きな入力データ構造のデータブロックを個別に特定する一般化されたアドレス指定スキームを実行可能であり、前記入力データのデータブロックを構成している前記複数のサンプルが、必ずしもメモリ内で互いに隣接している要素でなくてもよい、請求項１に記載のシステム。
【請求項５】
ｉ＝１、２、３、・・・、ｎをイテレータのインデックスとした場合に、前記複数のブロックのアドレスが前記インデックスに適用される関数ｆ（ｉ）である、請求項２に記載のシステム。
【請求項６】
前記データブロックアドレスのコード語が、ｉの単純な線形関数であるｆ（ｉ）＝ａ＋ｂｉとして規定され、ここでａが開始インデックス、ｂがインデックス増分である、請求項５に記載のシステム。
【請求項７】
前記インデックスジェネレータに複数の出力が含まれる、請求項１に記載のシステム。
【請求項８】
前記セレクタと前記出力ジェネレータとに異なるインデックスジェネレータが使用される、請求項１に記載のシステム。
【請求項９】
前記セレクタと前記出力ジェネレータとに同じインデックスジェネレータが使用される、請求項１に記載のシステム。
【請求項１０】
前記制御パラメータに前記入力データのサイズが含まれる、請求項１に記載のシステム。
【請求項１１】
前記制御パラメータに各ブロックのサイズが含まれる、請求項１に記載のシステム。
【請求項１２】
前記制御パラメータに、一連の正の整数に対して規定されるインデックスジェネレータコード語生成関数が含まれ、複数のデータブロックがユーザによって指定される任意の順序で処理される、請求項１に記載のシステム。
【請求項１３】
前記制御パラメータに、互いに隣接する複数のデータブロック間で重複しているサンプルの数が含まれる、請求項１に記載のシステム。
【請求項１４】
前記制御パラメータに、元の入力信号の範囲を超えるアドレスを有するサンプルの境界値が含まれる、請求項１に記載のシステム。
【請求項１５】
前記システムに、ブロック図モデリング環境内で実装されるブロック処理モデルが含まれ、前記ブロック処理モデルの動作を表す自動ソースコードが生成される、請求項１に記載のシステム。
【請求項１６】
前記ブロック処理モデルが、データフロー及び時間指向シミュレーション環境で使用される、請求項１５に記載のシステム。
【請求項１７】
前記システムが、前記入力データのサイズが前記出力データのサイズよりも大きいか又はこれと等しい場合に、前記入力データが前記出力データとメモリ領域を共有することの可能なインプレース処理を可能にする、請求項１に記載のシステム。
【請求項１８】
実際のシステムを数学的に表すモデルを提供するグラフィカルプログラミング環境において、入力データのブロック処理を実行するためのシステムであって：
処理対象の前記入力データの各データブロックを個別に特定するアドレスを繰り返し生成し、インデックスジェネレータによって生成された前記アドレスに基づいて、前記入力データから一データブロックを選択するためのブロック処理サブシステムと；
各データブロックを処理して前記データブロックに関連した出力を生成する、ブロック処理装置と；
を備え、
前記ブロック処理サブシステムが、ユーザによって入力された制御パラメータに基づく前記入力データの複数のデータブロックの反復処理を可能にし、前記ブロックインデックスに基づいて処理済みの複数のデータブロックを再びアセンブルして前記システムの出力を生成し、前記制御パラメータに、前記データブロックを処理する前記処理装置の仕様が含まれる；
システム。
【請求項１９】
前記制御パラメータに前記入力データのサイズが含まれる、請求項１８に記載のシステム。
【請求項２０】
前記制御パラメータに各ブロックのサイズが含まれる、請求項１８に記載のシステム。
【請求項２１】
前記制御パラメータに、一連の正の整数に対して規定される関数を指定する際にユーザによって指定される任意の順序が含まれる、請求項１８に記載のシステム。
【請求項２２】
現在処理中のデータブロックが前記グラフィカルプログラミング環境内で目に見えるように表示される、請求項１８に記載のシステム。
【請求項２３】
ブロック処理サブシステム毎に専用のブロック処理構造を更に備えた、請求項１８に記載のシステム。
【請求項２４】
全てのブロック処理サブシステムのための汎用ブロック処理構造を更に備え、各ブロック処理サブシステムの設定及び制御パラメータが制御変数の形で個別に記憶されている、請求項１８に記載のシステム。
【請求項２５】
前記制御パラメータに、互いに隣接する複数のデータブロック間で重複しているサンプルの数が含まれる、請求項１８に記載のシステム。
【請求項２６】
前記制御パラメータに、元の入力信号の範囲を超えるアドレスを有するサンプルの境界値が含まれる、請求項１８に記載のシステム。
【請求項２７】
前記システムに、グラフィカルプログラミング環境内で実装されるブロック処理モデルが含まれ、前記ブロック処理モデルの動作を表す自動ソースコードが生成される、請求項１８に記載のシステム。
【請求項２８】
前記ブロック処理サブシステムが、データフロー及び時間指向シミュレーション環境で使用される、請求項１８に記載のシステム。
【請求項２９】
前記入力データのサイズが前記出力データのサイズよりも大きいか又はこれと等しい場合に、前記入力データが前記出力データとメモリ領域を共有可能であることにより、インプレース処理が可能である、請求項１８に記載のシステム。
【請求項３０】
入力データのブロック処理を実行するためのシステムであって、前記システムが、グラフィカルプログラミング環境を提供する電子装置内で実装され、グラフィカルプログラミング環境が、実際のシステムを数学的に表すモデルを提供して、対象システムを設計するために使用されるシステムであって：
ユーザによって入力された制御パラメータに基づいて、前記入力データの各ブロックのポインタを繰り返し生成するためのポインタジェネレータと；
前記ポインタによって指定された各ブロックの入力データを処理するための処理装置と；
を備え、
前記処理装置が、前記ポインタによって特定された前記入力データのブロックを直接に処理することによって、前記入力データと出力データとがメモリ領域を共有する；
システム。
【請求項３１】
前記制御パラメータに、互いに隣接する複数のデータブロック間で重複しているサンプルの数が含まれる、請求項３０に記載のシステム。
【請求項３２】
前記制御パラメータに、元の入力信号の範囲を超えるアドレスを有するサンプルの境界値が含まれる、請求項３０に記載のシステム。
【請求項３３】
前記ブロック処理モデルの動作を表す自動ソースコードが生成される、請求項３０に記載のシステム。
【発明の詳細な説明】
【関連出願】
【０００１】
本出願は、その内容が本願中に引用をもって援用された、２００３年１２月２２日提出の米国特許出願第１０／７４４，６５４号の利益を主張するものである。
【技術分野】
【０００２】
本発明は、概略的にはグラフィカルプログラミング環境に関し、より詳細には、グラフィカルプログラミング環境における入力データのブロック処理の実行方法及びシステムに関する。前記入力データのブロック処理においては、入力データが、前記入力データのより小さな部分である複数のデータブロックに分割され、前記複数のデータブロックがそれぞれ処理される。
【背景技術】
【０００３】
コンピュータ、マイクロコントローラ、ＦＰＧＡ及びカスタムハードウェアなどの特定用途向け計算ハードウェア上で実行可能な計算が記述されたブロック図には、様々な種類がある。そのような多様なブロック図には、マサチューセッツ州ネーティックのＴｈｅ  ＭａｔｈＷｏｒｋｓ社製のＳｉｍｕｌｉｎｋ（登録商標）などの時間ベースブロック図、マサチューセッツ州ネーティックのＴｈｅ  ＭａｔｈＷｏｒｋｓ社製のＳｔａｔｅｆｌｏｗ（登録商標）などの状態ベースフローチャート及びデータフロー図が含まれる。これらの様々な形のブロック図は、これらの図を実行する方法が記されているという点で共通している。
【０００４】
これまでに、技術者や科学者らは、フィードバック制御理論及び信号処理などの数多くの科学的分野において、時間ベースブロック図を用いて動的システムを学習、設計、デバッグ及び改良してきた。挙動が経時的に変化する特徴を持つ動的システムは、実社会における多くのシステムを代表するシステムである。Ｓｉｍｕｌｉｎｋ（登録商標）などのソフトウェアパッケージの出現により、時間ベースブロック図によるモデリングの重要性は、ここ数年の間に一層高まっている。これらのパッケージが提供する洗練されたソフトウェアプラットフォームに含まれる充実した支援ツールにより、動的システムの分析及び設計を効率的、体系的にかつ低コストで行うことが可能である。
【０００５】
動的システムとは（それが自然のものであっても人工のものであっても）、その応答が、いかなる所定の時点においても、加えられた刺激、その現在の状態及び現在の時点の関数であるシステムである。そのようなシステムは、単純なシステムから高度に複雑なシステムまで多岐にわたる。物理的な動的システムには、落下物体、地球の自転、（筋肉、関節などの）生体力学システム、（遺伝子の発現、タンパク質経路などの）生化学的システム、気象及び気候パターンシステムなどが含まれる。人工の又は工学的な動的システムの例には、弾むボール、片端に分銅が結び付けられたばね、自動車、航空機、大型電化製品の制御システム、通信ネットワーク、可聴信号処理、原子炉、株式市場などが含まれる。工学、自然科学、教育及び経済学などの様々な分野の専門家らは、動的システムの数学的モデルを構築することにより、前記システムの時間の経過に伴う挙動の変化をよりよく理解しようとする。そのような数学的モデルは「より優れた」システムの構築を支援するが、ここで「より優れた」とは、例えば品質、製品化までの時間、コスト、速さ、大きさ、電力消費、堅牢性などの様々な特性の基準によって定義されうる。これらの数学的モデルは、（人体又は自動車のアンチロックブレーキシステムなどの）既存のシステムの分析、デバッグ及び修理も支援する。これらのモデルは、物理的システムを司る原理に基づいて他者を教育する目的を果たす場合もある。これらのモデル及び結果は、多くの場合、人間同士の科学的コミュニケーション媒体として利用される。「モデルベースデザイン」という用語は、動的システムの開発、分析及び検証におけるブロック図モデルの利用を意味するものとして用いられる。
【０００６】
グラフィカルプログラミング環境が、データを入力して所望の出力データセットを得る一連のデータ操作を実行する複数のカスケード状の構成要素からなるデータ処理システムを実装するためのツールを提供する場合もある。多くの用途においては、そのようなデータ処理システムは、入力データの処理をリアルタイムに実行して出力データを生成するために必要とされる。
【０００７】
イメージ又はビデオ処理システムを含めた多くの用途においては、入力データは多次元のマトリックスを持ち、大量の処理対象のデータを含む。そのような大量の信号の処理済みのコピーを一時的に記憶するには、大きなメモリ容量が必要とされる。或いは、上記動作を、入力信号をデータブロックと呼ばれるより小さな複数のセグメントに分割し、各データブロックに対して同じ処理を行って、処理された信号を再構築することによって実行することも可能である。このような種類の処理はブロック処理として知られている。ブロック処理では、データブロックのサイズが入力信号よりもはるかに小さいので、一時的記憶に要するメモリ容量が大幅に減少される。
【０００８】
発明の概要
本発明は、グラフィカルプログラミング環境における入力データのブロック処理を実行するための方法及びシステムを提供する。本発明のブロック処理においては、入力データはいかなる次元数を有してもよい。処理対象の入力信号は、複数のデータブロックに分割される。ユーザが入力データのデータブロックへの分割方法を指定してもよく、例えば処理対象の入力データのサイズ及びデータブロックのサイズをデザインすることで、入力信号がある総数の処理対象のデータブロックへと分割されてもよい。入力データの各ブロックを処理するためのデータ処理関数をユーザが指定してもよい。処理済みのデータの複数のブロックは、再構築されて出力データを生成する。出力データのサイズが入力データのサイズよりも小さいか又はこれと等しい場合には、本発明は、処理済みのデータのブロックが入力データのブロックに上書きされる、入力データのインプレースブロック処理を実行することが可能である。本発明のブロック処理における入力データの処理に要するメモリ領域が節約されるように、出力データと入力データとがメモリ領域を共有してもよい。
【０００９】
本発明の一局面によれば、グラフィカルプログラミング環境を提供する電子装置における入力データのブロック処理を実行するための一方法が提供される。図形要素が前記電子装置のディスプレイ上に表示され、前記図形要素にデータを入力できるようになっている。前記図形要素は、入力データのブロック処理を実行するブロック処理モデルを表している。ユーザによる前記図形要素の操作に応答して、前記ブロック処理モデルの制御データを入力するためのユーザインターフェースが設けられる。前記制御データは、前記ブロック処理モデルの動作モードを設定する。前記ブロック処理モデルは、前記ブロック処理モデルの前記制御データに基づき、前記入力データのブロック処理を実行する。
【００１０】
本発明の別の一局面によれば、グラフィカルプログラミング環境を提供する電子装置における入力データのブロック処理を実行するための一方法が提供される。入力データが、ユーザによって入力された制御データに基づき、複数のブロックに分割される。あるブロックを前記入力信号内で特定するために、前記入力データの前記ブロックに対してインデックスが生成される。前記データブロックは、前記ブロックの前記インデックスに基づいて選択され、処理される。処理された前記データは、出力データ内のある位置へと割り当てられるが、前記出力データ内での前記処理されたデータの位置は、前記ブロックの前記インデックスによって決定される。
【００１１】
本発明の更に別の一局面によれば、入力データのブロック処理を実行するためのシステムが提供される。前記システムは、グラフィカルプログラミング環境を提供する電子装置内で実装される。前記システムには、前記入力データを受け取り、前記入力データを複数のデータブロックに分割するためのイテレータが含まれる。前記システムには、前記入力データの一ブロックを処理するためのデータ処理装置も含まれる。前記イテレータは、前記データ処理装置が前記複数のブロックのそれぞれについて前記入力データのデータ処理を繰り返すことを可能にする。
【００１２】
本発明の更に別の一局面によれば、グラフィカルプログラミング環境を提供する電子装置における入力データのブロック処理を実行するためのシステムが提供される。前記システムには、前記入力データの各ブロックのポインタを繰り返し生成するためのポインタジェネレータが含まれる。前記システムには、前記ポインタによって指定された前記入力データの各ブロックを処理するためのデータ処理装置も含まれる。前記ポインタは、メモリ領域内での各データブロックの位置を表す。
【００１３】
本発明は、入力データのブロック処理により、大量のデータのリアルタイムでの処理を可能にする。更に、本発明は、前記入力データのサイズが出力データのサイズよりも大きいか又はこれと等しい場合に、前記入力データのインプレース処理を可能にする。この結果、本発明は、前記入力データの処理に要するメモリ領域を節減させる。
【００１４】
発明の詳細な説明
本発明の実施例は、電子装置によって提供されるブロック図プログラミング環境などのグラフィカルプログラミング環境に関する。ブロック図とは、実社会におけるシステムを、弧（線と呼ばれる）によって相互に接続された、図式を含む複数のノード（ブロックと呼ばれる）を用いて表したものである。ブロックは、前記システムによって処理されるデータに対する操作を実行する機能的実体である。線は、前記様々なブロック間でのデータ（信号と呼ばれる）の伝送を表す。ブロック図がグラフィカルプログラミング環境の一例であり、本発明を例えば状態フローチャートプログラミング環境などの別の種類のグラフィカルプログラミング環境に応用可能であることが当業者に理解されよう。
【００１５】
本発明の実施例のグラフィカルプログラミング環境は、入力データのブロック処理を実行するブロック処理ブロックを提供する。ブロック処理ブロックは、前記ブロック図環境における機能ノードであり、入力データ全体を一度に処理するのではなく、前記入力データをデータブロックと呼ばれるセクション（前記入力信号のより小さな部分）単位で処理する。ブロック処理ブロックは、前記入力データを受け取り、前記ブロック処理ブロックによる処理対象の前記入力データを複数のブロックに分割する。ブロック処理ブロックは、前記入力データの各ブロックを繰り返し処理し、この結果生じた処理済みデータの複数のブロックを結合させて出力データを生成する。本発明の実施例では、ブロック処理ブロックが単一のブロック内に設けられているが、前記ブロック処理が、ブロック処理ブロックの複数の構成要素を含んでもよい複数のブロック単位で実行されてもよいことが当業者に理解されよう。
【００１６】
ブロック処理ブロックは、ユーザによる前記ブロック処理ブロックの動作モードの選択に基づき、入力データのデータ処理を複数のブロックで実行する。前記ブロック処理ブロックの前記動作モードは、データブロックのサイズや処理対象の入力データのサイズなどの前記ブロック処理ブロックのパラメータを入力するユーザによって決定される。出力データのサイズが入力データのサイズよりも小さいか又はこれと等しい場合には、前記ブロック処理ブロックが前記入力データのインプレース処理を実行してもよい。入力データのインプレースブロック処理では、処理済みのデータのブロックが入力データのブロックに上書きされる。この結果、出力データがメモリ領域を入力データと共有するので、前記出力データに要するメモリ領域が節減される。
【００１７】
図１は、本発明の実施例のモデルを表すために複数のブロックが利用されるグラフィカルプログラミング環境の一例である。環境１００には、ブロックライブラリブロック１１０、エディタ１２０、シミュレータ１３０及びコードジェネレータ１４０が含まれる。コードジェネレータ１４０が、本発明の実施例のモデル向けのソースコードを生成してもよい。
【００１８】
ブロックライブラリ１１０には、システムのモデリング及びシミュレーションを支援する特定用途向けモデルの複数のブロックが含まれる。ブロックライブラリ１１０内の複数のブロックは、モデリング及びシミュレーションツール１３０を用いてデザインされたシステムのモデルに組み込まれる。ブロックライブラリ１００から供給されるブロックは、本発明の実施例においては長方形のブロックで表される。モデルが他の図形記号又は文字記号で表されてもよいことが当業者に理解されよう。ブロックライブラリ１１０から供給されるモデルブロックには、入力データをブロック単位で処理するためのブロック処理ブロック３００（図３を参照のこと）が含まれる。ブロックライブラリ１１０に、ブロック処理関数を実行するために組み合わせることの可能な、ブロック処理ブロックの複数の構成要素ブロックが更に含まれてもよい。本発明の実施例のブロック処理が、前記ブロック処理ブロックの複数の構成要素が含まれてもよい複数のブロック単位で実行されてもよいことが当業者に理解されよう。ブロックライブラリ１１０の例として、マサチューセッツ州ネーティックのＴｈｅ  ＭａｔｈＷｏｒｋｓ社製のＳｉｍｕｌｉｎｋ（登録商標）ＢｌｏｃｋｓｅｔシリーズのＤＳＰ  Ｂｌｏｃｋｓｅｔ、Ｆｉｘｅｄ−ｐｏｉｎｔ  Ｂｌｏｃｋｓｅｔ及びＣｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｂｌｏｃｋｓｅｔなどが挙げられる。Ｂｌｏｃｋｓｅｔシリーズは、対象システム及び前記対象システムのサブシステム向けモデルの開発及び組み込みのためのモデル及びユーティリティを提供する。
【００１９】
エディタ１２０及びシミュレータ１３０は、対象システムのモデリング、シミュレーション及び分析のためのグラフィカルシミュレーション及びプロトタイピング環境を提供する。エディタ１２０は、ブロックライブラリ１１０から供給された複数のブロックを対象システムに組み込む。エディタ１２０によってデザインされた対象システムは、前記デザインされた対象システムの挙動を分析するために、シミュレータ１３０によってシミュレートされる。エディタ１２０及びシミュレータ１３０の例として、マサチューセッツ州ネーティックのＴｈｅ  ＭａｔｈＷｏｒｋｓ社製のＳｉｍｕｌｉｎｋ（登録商標）が挙げられる。ＢｌｏｃｋｓｅｔはＳｉｍｕｌｉｎｋ（登録商標）上で動作する。
【００２０】
Ｓｉｍｕｌｉｎｋ（登録商標）は、ユーザが対象システムのブロック図をデザインし、前記システムの挙動をシミュレートし、前記システムの性能を分析し、前記システムのデザインを改良することを可能にする。Ｓｉｍｕｌｉｎｋ（登録商標）は、ユーザが対象システムのブロック図モデルの製図を可能にするユーザインターフェースを使用して対象システムをデザインすることを可能にする。ブロックライブラリ１１０内の全てのブロックは、ユーザが対象システムのブロック図を作成する際にユーザによって使用可能である。各ユーザが、このモデルブロックをカスタマイズして、（ａ）ブロックを何らかのカスタムフォーマットに再構成し、（ｂ）使用していないブロックを削除し、（ｃ）自らがデザインしたカスタムブロックを追加することが可能であってもよい。ブロックが、ブロックライブラリ１１０から、（マウス又はキーボードなどの）何らかの人間−機械インターフェースを用いてウィンドウ（即ちモデル描画面）へとドラッグされてもよい。Ｓｉｍｕｌｉｎｋ（登録商標）には、対象システムのブロック図表現を描く、編集する、注釈を付ける、保存する、印刷するなどの作業をユーザが実行できるようにするブロック図エディタが含まれる。ブロック図エディタは、ユーザによるブロック図モデルの下書きを可能にする、グラフィカルユーザインターフェース（ＧＵＩ）の構成要素である。Ｓｉｍｕｌｉｎｋ（登録商標）には、グラフィカルエディタとの対話を可能にする命令セットを有する文字インターフェースも含まれる。ユーザは、この文字インターフェースを用いて、ブロック図の編集作業を自動的に実行する特定のスクリプトを書くことが可能である。Ｓｉｍｕｌｉｎｋ（登録商標）は、ユーザが前記デザインした対象システムをシミュレートして、前記システムの挙動を判定することも可能にする。Ｓｉｍｕｌｉｎｋ（登録商標）には、ブロック図をコンパイル及びリンクして、コード生成及び／又はブロック図モデルのシミュレーションに使用される前記モデルの「メモリ内実行可能な」バージョンを作成するタスクを実行するブロック図実行エンジンが含まれる。
【００２１】
コードジェネレータ１４０は、エディタ１２０を用いてデザインされたモデルのブロック図から、カスタマイズ可能なＣコードディレクトリを生成する。コードジェネレータ１４０は、ソースコードを自動的に生成することにより、エディタ１２０内でデザインされたモデルの迅速なプロトタイピング、ハードウェアインザループシミュレーション及び迅速なデスクトップシミュレーションを可能にする。コード生成ツール１４０が、組み込まれたシステムアプリケーション向けの有効なソースコードを生成してもよい。ソースコードが、コードジェネレータ１４０内で生成されるコードの一例であり、コードジェネレータ１４０が、前記モデル向けの例えばＡｄａなどの別のコードを生成してもよいことが当業者に理解されよう。マサチューセッツ州ネーティックのＴｈｅ  Ｍａｔｈｗｏｒｋｓ社製のＲｅａｌ−Ｔｉｍｅ  Ｗｏｒｋｓｈｏｐは、コード生成ツール１４０の一例である。
【００２２】
グラフィカルプログラミング環境１００がブロック図プログラミング環境に限定されず、例えば状態フローチャートのグラフィカルプログラミング環境などのいかなるその他のグラフィカルプログラミング環境も含むことが当業者に理解されよう。マサチューセッツ州ネーティックのＴｈｅ  Ｍａｔｈｗｏｒｋｓ社製のＳｔａｔｅｆｌｏｗ（登録商標）は、状態フローチャートモデリング環境の一例を提供する。Ｓｔａｔｅｆｌｏｗ（登録商標）は、イベント駆動型モデルのモデリング及びデザインのためのグラフィカルな環境を提供する。Ｓｔａｔｅｆｌｏｗ（登録商標）は、複数のモデルの階層的なかつ並列な状態と、前記複数の状態間のイベント駆動型の遷移とをグラフィカルに表現する状態フローチャートをユーザが作成することを可能にする。Ｓｔａｔｅｆｌｏｗ（登録商標）とシームレスにインターフェースされたＳｉｍｕｌｉｎｋ（登録商標）が、Ｓｔａｔｅｆｌｏｗ（登録商標）によって作成された状態フローチャートに基づいてモデルを実行し、前記モデルの挙動を分析してもよい。
【００２３】
図２は、本発明の実施例の実施に適した電子装置２００の一例である。電子装置２００には、ネットワークインターフェース２３０と、モデム２４０と、補助記憶装置２５０と、主記憶装置２６０と、マイクロプロセッサ２７０と、モニタ２８０と、キーボード／マウス２９０とが含まれる。マイクロプロセッサ２７０は、グラフィカルプログラミング環境１００内のソフトウェアツールが適切に実行されるように、電子装置２００の各構成要素を制御する。電子装置２００は、キーボード／マウス２９０を介して、例えばブロック処理ブロック３００の動作モードを設定するための制御データなどの、対象システムのデザイン及びシミュレーションの制御に必要なデータを受け取る（図３を参照のこと）。電子装置２００は、グラフィカルプログラミング環境１００内で生成された結果を、モニタ２８０に表示する。主記憶装置２６０は、電子装置２００の動作及びグラフィカルプログラミング環境１００の実行のためにマイクロプロセッサ２７０によって迅速にアクセスされることを要するコードを補助記憶装置２５０から取り出し、これをマイクロプロセッサ２７０へと送る。補助記憶装置２５０は通常、アプリケーション向けのソフトウェアツールを格納している。詳細には、補助記憶装置２５０には、ブロックライブラリ１１０用のコード２５１と、エディタ１２０用のコード２５２と、シミュレータ１３０用のコード２５３とが含まれる。ネットワークインターフェース２３０及びモデム２４０は、電子装置２００が、例えばインターネット、イントラネット、ＬＡＮ（ローカルエリアネットワーク）、ＷＡＮ（ワイドエリアネットワーク）及びＭＡＮ（メトロポリタンエリアネットワーク）などの通信ネットワークを介して他の電子装置と通信を行うことを可能にする。このような通信機能により、本発明の分散実装が可能であってもよい。
【００２４】
図３は、図１に図示された本発明の実施例のグラフィカルプログラミング環境１００内のブロックライブラリ１１０によって提供されるブロック処理ブロック３００の一例である。ブロック処理ブロック３００は、グラフィカルプログラミング環境内でブロック処理動作を実行可能な反復システムを実装する。ブロック処理ブロック３００は、入力データを受け取って出力データを生成する。入力データがいかなる次元数を有してもよい。例えば、イメージ又はビデオ処理システムにおいては、入力データはマトリックスの次元数を有し、大量の処理対象のデータを含む。ブロック処理ブロック３００には、入力データに対するデータ処理関数を実行するデータ処理装置３１０を表すサブブロックが含まれる。データ処理装置３１０の前記データ処理関数が、ユーザによって特定されてもよい。例えば、ブロック処理ブロック３００は、単一のＤＣＴ（離散コサイン変換）データ処理装置３１０を用いて、５１２×５１２入力データの各８×８ブロックを処理する。
【００２５】
ブロック処理ブロック３００は、入力データを複数のブロックに分割し、前記入力データの各ブロックをデータ処理装置３１０に送り、処理済みの前記データの各ブロックを出力データ内の適切な位置へと配置することによって、出力データを作成する。ブロック処理ブロック３００の動作モードは、ブロック処理ブロック３００の、例えばブロックのサイズや、入力データのうちでブロック処理が実行される範囲などのパラメータを特定するユーザによって決定される。ブロック処理ブロック３００の前記パラメータは、図４を参照してより詳細に説明される。ブロック処理ブロック３００の予め定められた動作モードに基づき、入力データ全体又は入力データの一部分が複数のブロックに分割される。データ処理装置３１０によって、前記入力データの各ブロックに対してデータ処理関数が実行される。前記入力データの前記複数のブロックの処理に伴って、前記処理済みのデータの複数のブロックを同じ順序で再びアセンブルすることにより、出力データが再構成される。
【００２６】
ブロック処理ブロック３００を、イメージ圧縮及び音声コーディングを含めた数多くの用途に利用してもよい。ＪＰＥＧ（ジョイント・フォトグラフィック・エキスパート・グループ）イメージ圧縮法においては、入力された大量のイメージデータがブロック処理によって圧縮可能であるようなＪＰＥＧイメージ圧縮アルゴリズムを実行するように、データ処理装置３１０が選択されてもよい。圧縮段階においては、入力されたイメージは複数のブロックに分割され、各ブロックは、ＤＣＴ（離散コサイン変換）変換を実行するデータ処理装置３１０によって処理される。復元段階においては、各ブロックに対して逆ＤＣＴが実行され、最終的に出力データが再構成される。ブロック処理ブロック３００をＭＰＥＧ（ムービング・ピクチャー・エキスパート・グループ）ビデオ圧縮で用いてもよいことが当業者に理解されよう。音声コーディングの場合には、音声信号が１０乃至３０ミリ秒のフレーム内で処理される。通常は、入力されたフレームは２乃至４個のサブフレームに細分化され、データ処理装置３１０がこれらのサブフレームのサンプルに対して同じ一連の動作を実行可能である。これらの音声コーディングサブフレームのサンプルが、サブフレーム境界をまたいで重複していてもよい。この重複は、下記に図５Ａを参照しながらより詳細に説明される。
【００２７】
図４は、図３に図示された本発明の実施例におけるブロック処理ブロック３００の動作モードを設定するためにブロック処理ブロック３００にパラメータを入力するためのグラフィカル・ユーザインターフェース（ＧＵＩ）４００の一例である。ＧＵＩ４００が例示的なものであり、ブロック処理ブロック３００のパラメータが、例えばコマンドラインインターフェースなどのテキストユーザインターフェースを介して入力されてもよいことが当業者に理解されよう。ＧＵＩ４００は、ユーザがブロック処理ブロック３００のパラメータを入力するための幾つかの空白を提供する。前記パラメータに、ブロック当たりの行数４１０、ブロック当たりの列数４２０、重複行４３０、重複列４４０、入力データのサイズ４５０及び境界値４６０が含まれてもよい。ＧＵＩ４００における前記パラメータが例示的なものであり、ＧＵＩ４００が、例えばデータ処理装置３１０のデータ処理関数や、入力データを処理する複数のブロックの順序などの更なるパラメータを入力するための空白を提供してもよいことが当業者に理解されよう。入力データを処理する複数のブロックの順序については、下記に図５Ｃ乃至５Ｅを参照しながらより詳細に説明する。
【００２８】
ブロック当たりの行数４１０及びブロック当たりの列数４２０は、入力データ内のブロックのサイズを決定する。ＧＵＩ４００に、ブロックのサイズを決定する、例えば処理対象の入力データの行方向のブロックの数及び処理対象の入力データの列方向のブロックの数などの別のパラメータ群が含まれてもよいことが、当業者に理解されよう。
【００２９】
重複行４３０及び重複列４４０は、各ブロックと隣接するブロックとの重複を決定する。これらの重複は、ブロック処理の際にその値が考慮されるデータブロックの外側の余分な行及び列である。図５Ａは、入力データ内の各ブロックの重複行及び列を説明する入力データの一例である。図５Ａでは、本発明の実施例の入力データが複数のデータブロックに分割されており、これらのデータブロックは、８×８マトリックスサイズである。入力データの各ブロックは、隣接するブロックと２列及び１行ずつ重複している。各８×８ブロックは、上下が１行ずつ、左右が２列ずつ重複している。陰影をつけた部分５２０が重複を表す。ＧＵＩ４００に、パディングのための境界値４６０を入力する空白が含まれてもよい。図５Ｂは、本発明の実施例における入力データのパディング過程を説明する入力データの一例である。入力データは、複数のブロックに分割され、各ブロックは８×８マトリックスサイズである。これらのブロックが入力データと完全に一致しない場合には、ブロックが処理対象の入力データと一致するように、入力データの下側及び右側の陰影をつけた範囲５３０にパディング値が付加される。更に、図５Ａに図示された重複が、入力データの境界５１０を超えて拡張される。このパディング過程では、入力データの境界５１０の外側の重複５２０にもパディング値が付加される。
【００３０】
処理対象の入力データを処理する複数のブロックの順序を、ユーザがコード語生成関数であるインデックスジェネレータを選択することによって選択してもよい。これらのデータブロックが、ユーザが特定するいかなる任意の順序で処理されてもよい。例えば、これらのブロックが、図５Ｃ乃至５Ｅにそれぞれ図示されるように、水平（行）方向、垂直（列）方向又はジグザグ方向に処理されてもよい。図５Ｃ乃至５Ｅに図示される順序が例示的なものであり、これらのブロックが、例えば主対角線方向及び副対角線方向などのその他の順序で処理されてもよいことが当業者に理解されよう。これらのブロックが、ユーザが規定した順序で処理されてもよい。例えば、ユーザがブロックを処理するための「１、３、５、７、９・・・」などの特定の順序を入力すると、入力データのブロックは、ブロック１、ブロック３、ブロック５、ブロック７、ブロック９・・・の順序で処理される。
【００３１】
図６は、本発明の実施例における入力データのブロック処理を実行するブロック処理ブロック６００の一例である。ブロック処理ブロック６００には、イテレータ６１０とデータ処理装置６２０とが含まれる。イテレータ６１０は、入力データを受け取って出力データを出力する。ユーザが選択したブロック処理ブロック６００の動作モードに基づき、イテレータ６１０は、処理対象の入力データの一ブロックを選択して、前記選択された入力データのブロックをデータ処理装置６２０へと送る。データ処理装置６２０が、前記選択された入力データのブロックを処理し、前記処理済みデータのブロックをイテレータ６１０へと戻すと、イテレータ６１０は前記処理済みデータのブロックを出力データ内に配置する。現在処理中のブロックが、環境１００内で目に見えるように表示されてもよい。この表示がデバッグ処理で有用であってもよい。処理済みデータのブロックのサイズが、ユーザが規定したデータ処理装置６２０のデータ処理関数によっては入力データのブロックのサイズと異なっていてもよいことが当業者に理解されよう。処理済みデータのブロックの出力データ内での位置は、前記選択されたブロックの入力データ内での位置に基づいて決定される。ブロック処理ブロック６００は、処理対象の入力データの全ブロックについてこれらのステップを繰り返す。
【００３２】
図７は、本発明の実施例における入力データのブロック処理を実行するブロック処理ブロックの別の一例７００である。ブロック処理ブロック７００には、インデックスジェネレータ７１０、セレクタ７２０、データ処理装置７３０及び割り当て装置７４０が含まれる。セレクタ７２０及び割り当て装置７４０が入力データを受け取り、割り当て装置７４０が出力データを生成する。インデックスジェネレータ７１０が、入力データのブロックについて、一般に１つ又は複数の整数を含むコード語又はインデックスを生成する。ブロック処理ブロックの動作モードに基づき、インデックスジェネレータ７１０は、ブロック処理の繰り返しの際に、入力データのどの要素がブロックを形成するために選択されるのかを正確に特定する一連のコード語又はインデックスを繰り返し生成する。前記ブロックインデックスは、処理対象の入力データのブロック及び処理済みのデータのブロックの出力データ内での位置の双方を特定するように決定される。前記インデックスジェネレータによって生成された前記ブロックインデックスが、スカラ又はベクトルであってもよい。前記ブロックインデックスは、ブロックに含まれる全てのサンプルを個別に特定する。前記スカラ又はベクトルインデックスの大きさは、データブロックの大きさよりも小さくなくてはならない。前記インデックスジェネレータは、入力信号のサブユニットを個別に特定する一般化されたアドレス指定スキームを実行可能である。この一般化されたアドレス指定スキームにおいては、前記入力信号のサブユニットを構成している複数のサンプルは、必ずしもメモリ内で互いに隣接していなくてもよい。ｉ＝１、２、３、・・・、ｎを繰り返しインデックスとすると、サブユニット要素のアドレスは、前記繰り返しインデックスに適用されるいかなる関数ｆ（ｉ）であってもよい。例えば、ブロックインデックスのコード語が、ｉの単純な線形関数であるｆ（ｉ）＝ａ＋ｂｉとして規定され、ここでａが開始インデックス、ｂがインデックス増分であってもよい。ブロックインデックスの別の一例に、ブロックの［開始行、終了行］及び［開始列、終了列］が含まれていてもよい。インデックスが、例えば各ブロックの開始行／列からの終了行／列のオフセットを用いた別の形であってもよいことが当業者に理解されよう。セレクタ７２０及び割り当て装置７４０が、入力データのブロックインデックスを受け取る。セレクタ７２０が、前記ブロックインデックスに基づいて一ブロックを選択し、前記選択されたブロックをデータ処理装置７３０へと送る。データ処理装置７３０は、前記送られた入力データブロックを処理し、処理済みのデータブロックを出力する。割り当て装置７４０が前記処理済みのデータブロックを受け取り、前記入力データブロックのインデックスに基づいて、前記処理済みのデータブロックを出力データ内に割り当てる。セレクタ７２０及び割り当て装置７４０に別のインデックスジェネレータを用いてもよいことが当業者に理解されよう。ブロック処理ブロック７００は、これらのステップを、処理対象の入力データブロックの全てについて繰り返す。ブロック処理ブロック７００が、入力データのインプレース処理を実行してもよく、この場合、出力データは入力データとメモリ領域を共有する必要がある。インプレース処理においては、出力データは入力データに上書きされる。インプレースブロック処理は、下記に図８を参照しながらより詳細に説明される。
【００３３】
図８は、本発明の実施例における入力データのインプレースブロック処理を実行可能なブロック処理ブロックの更に別の一例８００である。ブロック処理ブロック８００には、ポインタジェネレータ８１０及びデータ処理装置８２０が含まれる。ポインタジェネレータ８１０及びデータ処理装置８２０は、入力データを受け取る。ポインタジェネレータ８１０は、ユーザによって選択されたブロック処理ブロック８００の動作モードに基づき、各入力データブロックへのポインタを生成する。ある入力データブロックへのポインタは、前記ブロックのメモリ領域内での位置を表す。前記ブロックのポインタに、前記ブロックの第１の要素へのポインタが含まれてもよい。前記ブロックへのポインタに、前記メモリ領域内の前記ブロックを特定することの可能な、例えば前記ブロックの最後の要素へのポインタなどの前記ブロックの別の要素へのポインタが含まれてもよいことが当業者に理解されよう。前記入力データブロックへのポインタは、データ処理装置８２０へと送られる。データ処理装置８２０は、前記ポインタによって特定された前記入力データブロックを処理する。前記入力データブロックの処理が完了すると、データ処理装置８２０は、前記処理済みのデータブロックを、ポインタジェネレータ８１０から受け取った前記ブロックへのポインタによって特定される前記メモリ領域内の位置に上書きする。ブロック処理ブロック８００は、処理対象の入力データブロックの全てについてこれらのステップを繰り返す。このようにして、繰り返し処理の終了時には、出力データが完全に形成される。前記入力データのインプレース処理において、一般には入力データのサイズが出力データのサイズよりも大きいか又はこれと等しいことが当業者に理解されよう。
【００３４】
要約すると、本発明の実施例は、グラフィカルプログラミング環境における入力データのブロック処理を提供する。本発明の前記実施例は、入力データのブロック処理を実行するブロック処理ブロックを提供する。前記入力データのブロック処理が、前記ブロック処理ブロックの構成要素である複数のブロック単位で実行されてもよいことが当業者に理解されよう。前記入力データ内の処理対象の部分は複数のブロックに分割され、前記入力データの複数のブロックは、ユーザによって指定された順序で処理される。処理済みの前記データブロックは、前記入力データブロックが処理されるのと並行して同じ順序で結合される。本発明の前記実施例は、処理済みのデータブロックが前記入力データブロックに対応するメモリ領域に上書きされる、入力データのインプレース処理も提供する。前記入力データのインプレース処理によって、出力データが入力データとメモリ領域を共有し、出力データ用のメモリ領域を節約することが可能となる。
【００３５】
以上のように、本発明が上述の目的を達成することが理解されよう。本発明の範囲から逸脱することなく幾つかの変更を加えてもよいことから、上述の説明に含まれるか又は添付の図面に示される事項は全て、単に例示的なものであり、限定的なものではないと解釈されるべきことを意図されている。例えば、本発明の実施例は、入力データのデータ処理を行ういかなるグラフィカルプログラミング環境において実施されてもよい。図に示されたステップの順序及び構成を、本発明の範囲から逸脱することなく変更可能であり、またここに含まれる記載が、本発明を説明する数多くの適切な記載の一例に過ぎないことが当業者に理解されよう。
【図面の簡単な説明】
【００３６】
本発明の上述の特徴、利点並びにその他の特徴及び局面は、添付の図面と関連させながら詳細な説明を参考にすることにより、より十二分に理解されるであろう。
【図１】図１は、本発明の実施例のモデルを表すために複数のブロックが利用されるグラフィカルプログラミング環境の一例である。
【図２】図２は、本発明の実施例の実施に適した電子装置である。
【図３】図３は、図１に示す本発明の実施例のグラフィカルプログラミング環境において提供されるブロック処理モデルで使用されるブロックの一例である。
【図４】図４は、図３に示す本発明の実施例のブロック処理ブロックのパラメータを入力して、前記ブロック処理ブロックの動作モードを設定するためのグラフィカルユーザインターフェース（ＧＵＩ）の一例である。
【図５Ａ】図５Ａは、本発明の実施例において、図４に示すＧＵＩを介して入力される各ブロックの重複列及び行を説明する、入力データの一例である。
【図５Ｂ】図５Ｂは、本発明の実施例における入力データのパディング過程を説明する、入力データの一例である。
【図５Ｃ】図５Ｃは、本発明の実施例において、入力データを水平（行方向）に処理する複数のブロックの順序を説明する、入力データの一例である。
【図５Ｄ】図５Ｄは、本発明の実施例において、入力データを垂直（列方向）に処理する複数のブロックの順序を説明する、入力データの一例である。
【図５Ｅ】図５Ｅは、本発明の実施例において、入力データをジグザグ方向に処理する複数のブロックの順序を説明する、入力データの一例である。
【図６】図６は、本発明の実施例のブロック処理ブロックの一例である。
【図７】図７は、本発明の実施例のブロック処理ブロックの別の一例である。
【図８】図８は、本発明の実施例のブロック処理ブロックの更に別の一例である。
【図１】
2007524156.tif 000003
【図２】
2007524156.tif 000004
【図３】
2007524156.tif 000005
【図４】
2007524156.tif 000006
【図５Ａ】
2007524156.tif 000007
【図５Ｂ】
2007524156.tif 000008
【図５Ｃ】
2007524156.tif 000009
【図５Ｄ】
2007524156.tif 000010
【図５Ｅ】
2007524156.tif 000011
【図６】
2007524156.tif 000012
【図７】
2007524156.tif 000013
【図８】
2007524156.tif 000014
【国際調査報告】
2007524156.tif 000015
2007524156.tif 000016