(57)【特許請求の範囲】
【請求項１】
無線ネットワークを介して通信できるユーザの数を増大させるための方法であって、
同じ周波数上の複数の個々の無線トランスミッタからデジタル形式で情報を送信する工程と、
送信信号のうちから最高電力の信号を除去する工程と、
前記最高電力の信号以外の送信信号をシンボル間干渉テール切断する工程と、
前記最高電力の信号以外の前記送信信号を分離することで、全数検索と結合パラメータ推定とを実行するビタービデコーダを用いて、１つの信号の干渉を別の信号の干渉から除去する工程と、
を備え、
前記送信信号の分離は、最適非同期マルチユーザ検出アルゴリズムを用いてリアルタイムで実行される、ことを特徴とする方法。
【請求項２】
請求項１の方法であって、
前記送信信号の分離は、干渉する信号を分離するためのフィルタの使用を含み、前記フィルタの構造は、破損された信号を含む前記送信信号の各々に対応する個々に受信された信号の電力、位相、ボータイミングオフセットおよび周波数オフセットを推定することにより導出されることを特徴とする方法。
【請求項３】
請求項１の方法であって、
前記送信信号の分離は、電力に関して受信信号を分離することで、最高電力グループの前記信号を繰り返し処理および除去することにより電力を低減する観点で前記信号をグループ分けし、それにより、前記全数検索が必要とする処理の総量を制限する工程を含むことを特徴とする方法。
【請求項４】
請求項１の方法であって、
前記送信信号の分離は、シンボル間干渉テール切断を行って、それにより、前記ビタービデコーダの状態の数、延いては、少なくとも１桁は処理時間を制限する工程を含むことを特徴とする方法。
【請求項５】
請求項２の方法であって、
さらに、最初の結合パラメータ推定を提供し、前記最初の結合パラメータ推定を用いて、受信信号の分離に用いられる前記フィルタの前記構造を決定する工程を、レシーバにおいて、含むことを特徴とする方法。
【請求項６】
請求項５の方法であって、
さらに、受信信号の電力、位相、ボータイミングオフセットおよび周波数オフセットの計測値に基づいて、前記最初の結合パラメータ推定値を洗練する工程を含むことを特徴とする方法。
【請求項７】
請求項６の方法であって、
前記受信信号は、他のユーザがすでに送信しているトラヒックチャネルに割り当てられる前に、取得チャネルを介して他のユーザの干渉なしに受信され、初期化信号は、前記ネットワークに対して前記取得チャネルを介して送信されることを特徴とする方法。
【請求項８】
請求項３の方法であって、
トランスミッタの総数はＫであり、電力による信号の前記グループ分け工程は、ｋを超えるユーザを各々含むサブグループにＫを分割し、ｋは、リアルタイム処理を妨げるほど大きくないことを特徴とする方法。
【請求項９】
請求項１の方法であって、
ｎは、シンボル間干渉の長さであり、ｎは、テール切断によって低減され、それにより、受信信号の処理におけるステージ当たりの状態の数を、何百ものギガフロップスから、無線携帯電話機の計算能力が許容可能なメガフロップスに低減することを特徴とする方法。
【請求項１０】
デジタル無線通信ネットワークにおいて、ビタービ検出アルゴリズムを用いてマルチユーザ検出の計算の複雑性を低減するシステムであり、前記マルチユーザ検出の計算の複雑性を低減することで、同じ周波数で送信された複数の信号を前記システムが分離することを可能とし、それにより、信号のパッキングを可能とするためのシステムであって、
前記同じ周波数で送信された複数のデジタル信号を受信するためのレシーバであり、前記複数のデジタル信号のうちから最高電力の信号を除去するレシーバであって、同時に着信する信号を分離するために全数検索方法を実施するためのマルチユーザ検出器を有するレシーバと、
前記レシーバで受信された前記最高電力の信号以外の信号をグループに分離するための電力応答グループ分け部であって、前記マルチユーザ検出器は、最高電力を有する前記グループを最初に処理し、それにより、一時に１グループのみを処理することによって処理の複雑性を低減する電力応答グループ分け部と、
所定の数のシンボル間干渉テールを考慮から外すことで、前記複雑性を最小化し、それにより、前記同じ周波数で同時に送信された複数の信号のための信号分離が、無線携帯電話機が利用可能なメガフロッププロセッサによって実現可能である状態低減ビタービデコーダと、
を備えることを特徴するシステム。
【請求項１１】
同じ通信チャネルに同時に存在するデジタル信号を分離する計算の複雑性を低減するための方法であって、
前記デジタル信号のうちから最高電力の信号を除去する工程と、
パラメータ推定とビタービアルゴリズムとを用いて、シンボル間干渉をモデル化するために用いられる短縮署名パルスで、前記同じチャネルの送信信号すべてに対応するビットすべてを一緒に検出およびデコードする全数検索を、前記最高電力の信号以外の前記デジタル信号に対して実行し、前記全数検索が必要とする時間を低減するために前記シンボル間干渉のテールのほとんどを切断することにより、無線携帯電話機のプロセッサがサポートするレベルまで計算量を低減する工程とを備えることを特徴とする方法。
【請求項１２】
同じ通信チャネルに同時に存在するデジタル信号を分離する計算の複雑性を低減するための方法であって、
前記デジタル信号のうちから最高電力の信号を除去する工程と、
前記最高電力の信号以外のデジタル信号をシンボル間干渉テール切断する工程と、
パラメータ推定とビタービデコーダとを用いて、前記チャネル内の前記信号すべてに対応するビットストリームを分離するためのアルゴリズムを、前記最高電力の信号以外の前記デジタル信号に対して実行する工程を備え、前記信号は、受信電力に基づいてグループに分離され、最高電力グループの前記信号が最初に処理され、それにより、一時に１つの信号グループのみを全数検索することで計算の複雑性を制限し、
前記グループは、６ｄＢの電力差によって決定されることを特徴とする方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、通信システムに関し、特に、同じ周波数を介して、同じ時間すなわち重複するスロットで同時に送信された複数ユーザからの信号を修復または分離するための方法および装置に関する。
【０００２】
【従来の技術】
当然のことながら、無線ネットワークは、近年、セルタワーと通信しようとするユーザの数が増大しているために過負荷となっている。多数のユーザが与えられたセルタワーと通信できるよう信号を多重化するために、様々な通信方式が提案されてきた。アナログ電話においては、一般に、アナログシステムがユーザ当たりに１つの通信チャネルを提供する。その結果、アナログサービスは、多数のユーザがセルタワーにアクセスしようとすると、即座に過負荷となっていた。過負荷の状態に適応するために、時分割多重化（ＴＤＭＡ）、周波数分割多重化（ＦＤＭＡ）、符号分割多重化（ＣＤＭＡ）を用いて、タワー当たりの多数のユーザに対応してきた。多重化とは、セルタワーと通信する多数のユーザが互いに干渉しないように組織化された状態での多元接続を意味しており、それにより、チャネル資源を公平に共有することが可能となる。
【０００３】
ＴＤＭＡ型のシステムは、元々、一般に実現されている利点の３倍の利点を持つと想定されていた。ＣＤＭＡシステムは、最初、２０倍の利点を実現する見込みがあったが、実際に実現できたのは、３倍の利点に過ぎなかった。
【０００４】
さらに、衛星通信は、衛生のアップリンクおよびダウンリンクを通して通信しようとするユーザに対応することを可能とするために、ある程度の量の多重化を必要とした。
【０００５】
多元接続を提供するための上述の技術は、多数のユーザに対応する際に有効であることを証明したものの、無線サービスのユーザの数は、ユーザに対応できる現行システムの許容を超えて増大している。
【０００６】
したがって、必要とされているのは、同じタイムスロットまたはチャネルを共有する同じ周波数上の複数のユーザからの同時送信に対応することができるシステムである。これを実現するためには、同時に受信された信号を修復または分離できるシステムが必要である。そのようなシステムが必要なだけでなく、携帯型の無線ユニットのプロセッサによって計算を実行できるように、デスクランブルまたは分離の計算が複雑でないことが求められる。
【０００７】
さらなる背景として、無線媒体のための多元接続（ＭＡ）の元々の発端は、主に、単純なレシーバが求められていることに起因する。ＭＡの方式は、伝統的に、単純な整合フィルタレシーバが、対象の信号すべてを確実に検出できるように、共有された無線チャネルに同時にアクセスする様々なユーザ間の干渉を排除または最小化するという単一の目的のためにユーザの波形およびタイミングプロトコルを割り当ててきた。特に、時間分割多元接続（ＴＤＭＡ）、周波数分割多元接続（ＦＤＭＡ）、符号分割多元接続（ＣＤＭＡ）、および複合型の方式は、信号を、少しの干渉も生じない直交信号（例えば、異なるユーザは完全に異なるタイムスロットを割り当てられる）にするか、もしくは、同じ帯域幅を共有する任意の２つの信号間の干渉が無視しうる程度であるような略直交の広帯域信号にする。これらのシステムは、主要な元々の動作制約、すなわち、レシーバの計算能力の不足という制約の範囲では良好に機能する。一方、帯域幅は、処理能力に対する元々の欲求に比べて十分であった。
【０００８】
ここ何十年も、以下の３つの傾向が無線通信に影響を与えている：１）計算能力が何倍も向上した、２）情報の処理能力に対する要求が急激に増大した、３）典型的なＭＡシステムに利用可能な帯域幅が減少した。利用可能な帯域幅の制限と、直交信号の割り当ての負担の結果として、ＭＡシステムは、今日の需要に対して、能力すなわち処理能力において実に不十分なものとなっている。
【０００９】
【発明の概要】
同じ周波数で同時に送信された信号を修復または分離するために、ビタービデコーダを用いて、データが受信されたと仮定した場合の最高の発生可能性を有する結合ビットストリームを精選するための最短経路手順を提供する。本質的に、２以上の同時に送信された信号の各々は、信号の分離および信号のデスクランブルを許容する確定可能な特徴を有している。２つの同時かつ個別に変調された送信信号が、識別に十分な特徴を有することを認識できれば、それらの信号の分離が可能となる。
【００１０】
同じ周波数で同時に着信し、受信電力が対して変わらない２つの信号は、どちらの信号も理解できない程にスクランブルされているように見える。要するに、一方の信号が他方の信号のノイズに見え、逆もまた同様に見える。パラメータ推定プリプロセッサと、第１に、電力に基づく複合型の除去を行って、第２に、レシーバの検出器／デコーダアルゴリズムの形成のためにシンボル間干渉のテール切断を行うことにより、信号分離処理においてビタービデコーダによってなされる全数検索を短縮する技術とを用いて信号分離を実行するのに十分な情報が、同時に送信された信号に存在することが、本発明でわかった。
【００１１】
一般に、帯域幅を増大させずに処理能力を増大させる問題の解決法は、マルチユーザ検出（ＭＵＤ）理論の応用にある。マルチユーザ検出は、全数検索を用いた信号分離を詳細に説明しているＳ．Ｖｅｒｄｕ著「マルチユーザ検出（Multi-user Detection）」Ｃａｍｂｒｉｄｇｅ  Ｕｎｉｖｅｒｓｉｔｙ  ｐｒｅｓｓ、１９９８年の第４章に記載されている。この検索は、複数の信号が混合された際に、データポイントのすべての可能性を分析する。
【００１２】
より一般的に、マルチユーザ検出の背後にある前提は、「他のユーザの」干渉をノイズとして扱わないことである。確かに、干渉は、シンボル波形、変調方式、およびシンボル速度のような干渉信号について多くが知られているために、ほぼ完全に決定論的である。マルチユーザ検出器は、干渉デジタル変調信号の各々に関してレシーバにおいて知られるすべてを活用する。
【００１３】
マルチユーザ検出は、以下が可能であるとわかっている：１）他のユーザの干渉の存在下で、通信回線の堅固な動作を可能とすることができる、２）ＩＳ−９５プロトコルに記載されたような「略直交の」信号方式を用いる多元接続システムにおいて、弱いユーザの脱落（遠近問題）を排除することができる、３）すべての信号が同じ電力で基地局によって受信されていることを確実とするための電力制御の必要性を排除することができる、４）意図的な干渉が許容されることで、より多くの同時ユーザが同じ周波数すなわちチャネルで共存して送信することができるため、処理能力を増大させることができる。
【００１４】
本発明は、ＴＤＭＡ、ＦＤＭＡ、または両者の複合型のような直交信号方式を用いた任意の実際の商用システムに対する同時ユーザの数の増大に関する実際的な問題を解決するために、マルチユーザ検出の理論的な技術に対してなされた改良を含む。直交型のＴＤＭＡ／ＦＤＭＡを用いるそのようなシステムの一例は、ヨーロッパなどで用いられている携帯電話のＧＳＭシステムである。
【００１５】
本発明は、既存のＭＡ通信システムへのＭＵＤに基づく拡張の実現に関する二つの課題を解決して、ユーザの許容量を何倍も増大させることを可能とする。
【００１６】
第１に、一般的には、ビタービアルゴリズム（最短経路アルゴリズム）で実施可能な最適全数検索ＭＵＤは、デコードされるビット当たりの複雑性のべき乗であり、ｎ（すなわち、シンボル間干渉（ＩＳＩ）の数）と、Ｋ（すなわち、ユーザの数）とを掛けたものが１２を超える場合には、ステージ当たりの状態の数、すなわち、Ｍ＾（ｎＫ）が非実際的なほど大きくなることを意味している。したがって、実際的なマルチユーザ環境では、ｎ×Ｋは、デコードされるビット当たりの複雑性が、ビット当たり何百ギガフロップスすなわち浮動小数点演算となるような２４を容易に超えうる。携帯電話機の最大計算能力は、Ｖｅｒｄｕの第４章に記載されたような全数マルチユーザ検索信号セパレータをサポートしないメガフロップスのオーダーである。後にわかるように、主題のシステムは、テール切断によってｎを低減する。Ｋについては、電力に基づく信号のグループ分けは、Ｋを、各サブグループの含むユーザがｋを超えないような２以上のサブグループに分割する。それに対しては、ｎ×Ｋは極端な数値にならない。
【００１７】
第２に、複雑性を低減するために以前に提案された方法はすべて、既存の無線システムと次に実施される無線システムのための既存の仕様から逸脱する新しい波形を設計することを必要とするか、もしくは、干渉する波形が線形独立のセットを含む限りは、その場限りの干渉を許容する。線形独立の波形の要件は、例えば、ＧＳＭ携帯電話のタイムスロットを単一のセルにオーバーパッキングしたり、ＡＣＥＳ衛星のタイムスロットを単一のスポットビームにオーバーパッキングしたりする場合には保持されない。
【００１８】
主題のシステムは、新しい波形の設計を必要とせず、直交信号方式を用いる既存および提案されているシステムに対してオーバーパッキングを実現するために、線形独立のセットを用いることを必要としないことに注意されたい。本発明の以前には、そのようなオーバーパッキングの方法は、Ｖｅｒｄｕの本文中に詳説されている計算の観点で非実際的な全数検索最適ＭＵＤを用いることを必要としていた。
【００１９】
幾何級数的な複雑性の問題は、シンボル間干渉を伴う非同期線形独立信号のためのマルチユーザ検出に対応する理論的な洞察を改良して、この非実際的な複雑性を排除することにより解決された。
【００２０】
複雑性を低減することの主な理由は、基地局、ユーザの電話機、主題のシステムを用いることを所望してよいその他の送信／受信装置に挿入可能なプロセッサの技術水準で、リアルタイム動作が可能となるからである。
【００２１】
さらに、ユーザの電話機または小型の装置は、基地局に比べ、複雑性に関して小さい増大しか許容できない。本発明は、計算の単純なＭＵＤ手順を可能とするような方法で、既存の信号を利用可能な帯域幅にパッキングする方法を含む。主題の小型装置のレシーバアルゴリズムは、レシーバの技術水準に見合う程度に計算が単純であり、携帯電話機のための処理の現技術水準内で、リアルタイムに実現可能である。
【００２２】
一実施形態では、主題のシステムは、以下の５つの中心部分からなる：
１．上り回線（モバイルから基地局への回線、または、典型的にユーザに関する小型コンピュータデバイスから典型的にコントローラに関する大型コンピュータデバイスへの回線）のチャネルのための非同期オーバーパッキング方式。
２．信号分離ブロックに進むパラメータ推定ブロック。
３．デインターリーブや誤り訂正デコードのような既存のシステムの要素によって処理されるチャネルビットを出力するコントローラ（例えば、基地局のレシーバ内のコントローラ）のための信号分離ブロック。
４．下り回線（基地局からモバイルへの回線、または、大型デバイスから小型デバイスへの回線）のための同期パッキング方式。
５．デインターリーブや誤り訂正デコードのような既存のシステムの要素によって処理されるチャネルビットを出力するユーザのデバイス（例えば、携帯電話）のための信号分離ブロック。
【００２３】
下りおよび上り回線両方でのビット誤り率を改善するために、６つ目の電力制御方式を用いてもよい。
【００２４】
上り回線チャネルのためのパッキング方式は、非常に単純である。コントローラは、単に、１以上のユーザを全く同じチャネルに割り当てる。したがって、ＧＳＭシステムでは、基地局のコントローラは、空いているタイムスロットすべてをアクティブなユーザに割り当てるだろう。新しいユーザがタイムスロットを要求すると、コントローラは、すでに占有されているタイムスロットを割り当てる。
【００２５】
パラメータ推定ブロックは、各ユーザの受信電力、ボータイミングオフセット、周波数オフセット、およびオシレータの位相の推定値を計算する。コントローラは、新しいユーザに関する取得中に、受信された取得信号を、受信電力、ボータイミングオフセット、周波数オフセット、およびオシレータの位相について最尤推定値を計算する仮パラメータ推定サブブロックに送信する。この情報は、次に、共有されたタイムスロット内の既存の１以上のユーザだけでなく、新しいユーザに対しても、これらのパラメータの推定値を洗練させるパラメータ洗練サブブロックに送られる。
【００２６】
信号分離ブロックは、レシーバ内の２つの動作モードを自動的に交互に繰り返すアルゴリズムからなる。そのアルゴリズムは、相対受信信号電力が除去手順に有利である場合には、可能であれば、単純な除去手順に戻る。除去により、要求されるビット誤り率を与えることができない場合には、レシーバは、シンボル間干渉（ＩＳＩ）がテール切断されたバージョンの最適非同期マルチユーザ検出器に戻る。２を超えるユーザに対しては、ＩＳＩ切断最適マルチユーザ検出と除去との複合型が用いられる。
【００２７】
回復された信号の電力の隔たりが６ｄＢより小さい場合には、テール切断を用いて、計算の複雑性が低減される。除去手順は、すべてのマルチユーザ検出手順の中で最も複雑性が低いが、受信された電力の隔たりが６ｄＢより大きく、最高電力の信号が著しく目立っていない限りは、ビット誤り率が悪い。
【００２８】
主題のシンボル間干渉テール切断全数検索は、Ｖｅｒｄｕの本文中に詳述されている最適全数ＭＵＤの改良版であり、最尤結合シーケンスを見つけるために用いられるビタービデコーダにおけるステージ当たりの状態の数を低減することによって、複雑性の大幅な低減を実現する。それは、最適全数検索ＭＵＤの形成において、シンボル間干渉テールの存在を無視することにより実行される。
【００２９】
同じチャネル内にパッキングされた２以上のユーザに対しては、グループ分け複合型方法が用いられる。この方法は、受信された電力に従って、信号をファミリにグループ分けする。一実施形態では、１つのファミリで最も低い電力信号は、次に低い電力ファミリ内の最も高い電力信号よりも６ｄＢ高い必要がある。ＩＳＩ切断全数検索ＭＵＤは、一時に１つのファミリに対して実行され、最も高い電力ファミリから始まって、電力順位の低い方へと実行されていく。そのファミリの各ユーザに対してビットストリームが生成されると、受信された信号は、切断されたＩＳＩテールなしに、そのファミリ内の各ユーザに対する署名パルス全体を用いて再作成される。この再作成された干渉信号は、次に、元の受信信号から減算され、干渉低減信号が生成される。干渉信号の再作成に先立って、実行可能であれば、適切な誤り訂正を適用することにより、ビットストリームを訂正してもよいことに注意されたい。上述のＭＵＤ−再変調−除去の手順は、すべての信号ファミリが検出および／またはデコードされるまで繰り返される。このブロックは、各チャネルを共有するユーザの総数に加えて、パラメータブロックにおいて推定されたパラメータすべてを必要とする。
【００３０】
テール切断について、テール切断は、単に、広域検索マルチユーザ検出器に、テールなしでユーザの署名パルスのレプリカを提供することだけを必要とする。多数の干渉信号の集合からなる受信信号に関するビットストリームの最適セットを決定するために全数検索を実行するトレリス（ビタービデコーダ）を構築する際には、各ユーザの署名パルスのレプリカを提供する必要があり、テールが除去されてビタービデコーダに提供されるのは、この署名パルスであることに注意されたい。
【００３１】
通例はＫ個の干渉信号に対して６ビット継続時間を超えるゼロでない継続時間全体にわたって完全なパルスを提供する場合には、その結果としてのビタービデコーダは、ステージ当たりＭ＾（Ｋｎ）個の状態を有する。ここで、Ｍは、Ｍ相変調（例えば、Ｍ＝２は、２相変調）に対応し、Ｋは、干渉するユーザの数であり、ｎは、ＩＳＩの数（例えば、署名パルスがゼロでないビット継続時間の数）である。
【００３２】
すべての可能なビットの組み合わせに対応するすべての可能な経路を検索するためにビタービデコーダにとって必要な計算の複雑性は、トレリスのステージ当たりの状態の数であるＭ＾（Ｋｎ）に比例する。
【００３３】
本発明において、ビット当たりに必要な計算を大幅に低減するために、テール切断されたバージョンの各ユーザの署名パルスが、全数検索マルチユーザ検出器に提供される。ｒ番目のビットの継続時間（ｒ＜ｎ）を過ぎてパルスを０に設定することを選ぶ場合には、トレリスにおけるステージ当たりの状態の低減された数、すなわち、Ｍ＾（Ｋｒ）で、ビタービデコーダを介して全数検索を行う。
【００３４】
ユーザ信号が同じ電力で受信されている場合には、このテール切断は、ここでは最適下限の全数検索マルチユーザ検出器の性能において取るに足らない低下を引き起こすが、複雑性の十分に低い所望のビットストリームを提供する。
【００３５】
受信信号が、６-７ｄＢのような比較的大きい電力差によって分離されている場合には、比較的低い電力のユーザに関するビットストリームの誤り率は、テール切断されたバージョンの全数検索マルチユーザ検出器を用いることによって大幅に悪化される。
【００３６】
この悪化の問題を解決するために、本発明は、電力順の除去技術を用いる。最高電力の信号と残りの信号との間の電力差が６ｄＢよりも大きい場合には、最高電力の信号は、比較的低い電力の信号がビタービデコーダに基づく検索の形成において切断されたテールを有する状態で、全テールと共に除去され、それにより、これらのテールが最適信号分離プロセスにおいて引き起こす複雑性が排除される。
【００３７】
したがって、複雑性を低減するために除去を用いる、より一般的な場合には、電力が近い任意の２つの受信信号が大きく（例えば、６ｄＢ）分離されている場合に対して考慮されたい。この場合には、全数検索マルチユーザ検出器によって予測される干渉ユーザに関して、比較的高い電力の信号グループを除去して、Ｋを低減することにより、複雑性を低減する。具体的には、最高電力のグループにおけるユーザの数が、Ｉ人のユーザのみであることを、全数検索マルチユーザ検出器に伝える。実質的には、他のユーザすべてをバックグラウンドノイズとして扱うよう決定している。一旦、これらのユーザがデコードされると、それらは、完全なＩＳＩテールと共に再作成され、受信信号から除去されて、干渉の低減された信号、例えば、最高電力のグループにおけるＩ個の信号が存在しない場合に受信されたであろう信号の推定値、を生成する。
【００３８】
他のユーザはすべて、受信電力がはるかに低い（例えば、比較的高い電力のグループにおける最も低い電力ユーザよりも６ｄＢ低い）ので、この最適下限の仮定は、高電力のグループのユーザのビット誤り率に取るに足らない悪化をもたらす。
【００３９】
テールを切断してユーザを繰り返し除去することの利益は、必要な計算の複雑性が、デコードされるビット当たりＭ＾（Ｉｒ）のオーダーでしかないために、少なくとも１桁は低くなることである。これは、Ｉ＜Ｋおよびｒ＜ｎであることから、Ｍ＾（Ｋｎ）よりも大幅に小さい。
【００４０】
一旦、最高電力グループ内のＩ人のユーザのデコードされるビットがデコードされると、信号は、ｎビットの継続時間にわたる完全なテールを備えた完全な信号を用いて再構築され、再構築された完全な信号は、受信信号から減じられる。ここで、最高電力グループ内のＩ人のユーザを含まない受信信号の推定値が生じる。次いで、そのプロセスは反復され、残りの信号がなくなるまで、次に高い電力グループの信号が検出および除去される。
【００４１】
一実施形態では、電力グループ分けは、パラメータ推定ブロックによって実行される。パラメータ推定ブロックは、その関数の一部として各ユーザの電力を決定する必要がある。それは、次に、電力に基づいてユーザを順位付けする。一旦、順位付けされると、ユーザは、電力ファミリに従ってグループ分けされる。電力ファミリに対しては、１つのファミリ内の最低電力のユーザと、次の比較的低い電力ファミリ内の最も高い電力ユーザとの間に大きな電力差（例えば、６ｄＢ）が存在する必要がある。
【００４２】
全体で２ユーザのみである場合には、電力グループ分けは、それらの電力差が６ｄＢ以上であれば２ユーザを２つのグループに分け、電力差が６ｄＢ未満であれば１つのグループに分類する。
【００４３】
下り回線に関して、下り回線のための主題の同期パッキング方式は、ユーザデバイスにおける単純な信号分離手順を可能とする。ここで、主題のシステムは、信号を下りチャネルに送信する前に、コントローラ内で順序正しい信号パッキングを実行することができる。これは、すべてのタイミングまたは位相オフセットが、パラメータの推定に先立って携帯電話によって知られる点で有効である。
【００４４】
ユーザデバイス内の分離アルゴリズムブロックは、基地局のブロックと同じものでもよいことに注意されたい。
【００４５】
さらなる改良として、携帯電話機における電力を制御して、電力レベルに基づいて受信信号のグループを提供し、実際的には、Ｋを比較的小さいｋのサブグループに分割することにより、より高速な処理を可能とするための電力制御方式を実装することができる。
【００４６】
過飽和状態の通信の主な利益は、次世代携帯電話、ローカル無線ループ、および、装置または電気製品の無線インターネットワーキングのための無線ローカルエリアネットワークなどの将来の利用のために現在設計されているシステムだけでなく、既存の携帯電話、ＰＣＳ、および衛星多元接続通信システムの処理能力も、大幅に増大することである。
【００４７】
要約すると、無線ネットワークを通して通信できるユーザの数を増大させて、複数のユーザが、同じチャネルすなわち周波数で同時に情報を送信することを可能にするシステムが提供されており、そのシステムでは、チャネル上の他の干渉信号を分離または修復ためにビタービデコーダに基づいた信号分離システムが用いられている。一実施形態では、入力信号の電力，時間，周波数オフセット、および位相の推定値を提供するために結合パラメータ推定プリプロセッサを用いて、２以上のユーザが同じチャネルに割り当てられる。パラメータ推定部によって推定された結合パラメータは、同じチャネルに割り当てられた信号すべてを回復および分離する信号セパレータに適用される。主題のシステムは、同時に送信された信号に対応して、除去技術およびテール切断技術を用いることにより新しい波形を必要とすることなく既存のチャネル上で信号パッキングを提供することで、信号の分離における計算の負荷を最小限に抑えることができる。
対象となる発明のこれら及びその他の特徴は、図面に関連した詳細な記述との関係でより理解されるであろう。
【００４８】
【発明の実施の形態】
ここで、図１によると、送信信号の同相および直交成分を回復して、送信された情報を伝達するビットストリームを提供する典型的なＧＳＭシステムが示されている。ここでは、ネットワーク１０を用いて、複数のユーザ１２、１４および１６と、セルタワー２０と無線通信ネットワークを介してやり取りする基地局との間で、情報をやり取りしている。周波数を過剰に使用する能力は、与えられた周波数で単一のチャネルまたはＴＤＭＡタイムスロットに全員が割り当てられる複数のユーザが同時に存在する状況によって表される。このように、ユーザ１はチャネル１で送信し、そのチャネルに割り当てられたユーザ２およびユーザＫまでのその他のユーザ全員も、同様にチャネル１で送信する。基地局において、この場合に、レシーバ側での信号処理によって干渉信号を分類することが、主題のシステムの目的である。複数のユーザが、下りおよび上りチャネル両方で全二重双方向通信を実現できるように、携帯電話機の各々において、同一の処理が実行されることがわかるだろう。そうすることにより、タワー、衛星またはその他の送受信ポイントのチャネル容量を、与えられたチャネルを同時に利用できるユーザの量すなわち数だけ増大させることができる。
【００４９】
図２によると、２人のユーザ（図中の２２および２４）が、同じ周波数で情報を同時に送信すると、整合フィルタ２８に接続され、次いで、判定部３０に接続されている基地局２６は、絶望的に破損された出力として提供する。それは、個々の信号が、互いに干渉しているためである。現行のシステムでは、１つの信号が他の信号と干渉し、干渉を除去したり信号を明確にしたりする試みがなされない場合には、復調信号が判別不能なほどに破損されるため、信号は、干渉を回避するために意図的に調整される。
【００５０】
しかしながら、各々の信号によって運ばれ、信号を識別し、それらの信号を分離して、理解可能な情報を提供するために用いることのできる情報の量は、かなりの量であることがわかった。
【００５１】
ここで、図３によると、チャネルごとに１つの信号が存在する場合が示されている。ここでは、送信源３２が、平方根二乗余弦送信フィルタによる同相直交変調方式を用いるレシーバ３４に送信する。整合フィルタ３６には、平方根二乗余弦フィルタが備えられている。これの次には、分離を行う３７が設けられ、次いで、３８においてサンプリングされた同相および直交成分、サンプルの符号で情報を運ぶ同相および直交サンプルストリームが続く。図中の例では、ビットは、−１または１であり、整合フィルタからの同相および直交信号は、ビットレートでクロック４０によってサンプリングされる。これらの同調および直交信号は、次いで、インターリーブ・リアセンブラ４２に供給され、その結果、変調信号の回復された同相および直交成分に相当する復調出力４４が生成される。
【００５２】
ここで、図４Ａによると、主題のシステムの一実施形態において、二以上の同時の信号が、携帯ユニット２２および２４から基地局２６に送信されている。ここでは、基地局からの出力は、電力、オフセット、およびオシレータの位相に関して、両信号のすべての関連パラメータの回復を図る結合パラメータ処理部５０に供給される。上述のように、プロセッサ５０は、推定処理によってこれらの結合パラメータ推定値を提供してよい。５２で示すように、電力、オフセットおよび位相の検出器を用いて、取得チャネルの信号からパラメータの最初の推定値を提供する。検出器５２は、新しいトランスミッタが、制御チャネル５４を介して、そのチャネルにおいて他のユーザの干渉なしに信号を送信する取得段階中に、パラメータを計算することにより動作することに注意されたい。
【００５３】
５６に示すように、基地局５６は、２人のユーザを同じチャネルに割り当てており、同じ周波数上の信号の数５８は、そこから導き出されることがわかる。この情報は、結合パラメータ推定プロセッサ５０および信号セパレータ６０に伝えられ、それにより、適切な推定値が信号分離部６０に提供される。
【００５４】
基地局の出力、すなわち、スクランブルされた信号は、信号分離部６０に接続される。信号分離部の動作は、以下に説明する。電力、オフセットおよび位相の推定値を用いて、信号分離部６０は、マルチユーザ検出技術に基づいて、２つの信号に対応するデータストリームを明確化または回復する。信号分離部６０は、基本的に受信コンスタレーション内のデータポイントのすべての可能性を調べて、どのデータポイントがどの信号に属するのかを決定する全数検索アルゴリズムを用いる。このアルゴリズムが、破損された受信信号から各種データストリームを分類することができるのは、一部には、電力、オフセットおよび位相が異なっているからである。図４Ｂに見られるように、マルチユーザ検出の説明は、Ｖｅｒｄｕの第４章に従っている。
【００５５】
共に干渉するユーザすべてに対して、すべての可能なビットストリームの全数検索を実行して、ユーザ各々に対して最尤ビットストリームを確定する動的プログラミングアルゴリズムによって、最小ビット誤り率マルチユーザ検出器を実装することもできる。ビットストリームをユーザに割り当てたことは、干渉ユーザ各々に対応する送信情報が分離されていることを意味する。全数検索は、ステージの数と、ステージ当たりの状態の数ＭKnとに比例する計算努力をそれぞれ必要とする２回の独立した反復を実行する。したがって、ビット当たりの複雑性は、ＭKnのオーダーである。
【００５６】
どのデータポイントがどの干渉信号に関するものかを決定するために用いられる全数検索アルゴリズムは、非常に高い計算能力を必要とする。一般に、マルチユーザ検出は、比較的大規模なコンピュータによって遂行されてきた。そのような極度の計算は、今のところ、携帯電話機や基地局のＣＰＵでは実行できない。したがって、携帯ユニットにおいて、さらに同時に基地局において、信号分離ビットを実現できるように、全数検索を低減できることが重要である。
【００５７】
ここで、図５によると、計算の低減を実現する方法が、簡単な例を用いて説明されている。２つの波形６２および６４は、同一の位相を有し、それぞれの包絡線内に存在しており、６６に示すように合成され、フィルタ６８によって抽出された後に、７０においてサンプリングされることがわかる。その結果は、４つの可能な値、＋Ａ1＋Ａ2、＋Ａ1−Ａ2、−Ａ1＋Ａ2、または−Ａ1−Ａ2を有する。これらの成分は、２つの信号間の異なる位相および電力の関係をそれぞれ示す図５、６および７に示すように、受信コンスタレーションのデータポイントとしてプロットすることが可能である。７４に示すように、バックグラウンドおよびレシーバ雑音のために、これらのデータポイントについては、ある程度の不確定性がある。
【００５８】
要するに、受信コンスタレーション内の実際のデータポイントの推定値を提供できることが、全数検索の目的であり、この検索は、計算の負荷を低減するために、大いに縮小すなわち洗練される必要がある。
【００５９】
検索されるデータポイントの総数に寄与するものの一つは、図中の８０で示されたシンボル間干渉テールの長さであり、それは、信号８４の後方部分から存在すると考えられ、パルス８２の主要部分と干渉する。
【００６０】
本発明の態様の１つとして、このテールを無視して、より修正可能な数のデータポイントを受信コンスタレーション内に提供する。具体的には、これは、検索トレリスまたはビタービデコーダにおいてステージ当たりの状態が比較的少ないことに対応する。
【００６１】
他のユーザに対応するパルスの後続の主要部分に対する１ユーザのテールの影響は、電力によって決まることがわかるだろう。例えば、干渉している信号の電力が、最高電力の信号に比べて低い場合には、比較的低い電力の信号のテールを無視する影響は、最高電力の信号に関する全数検索プロセスの結果に対しては極小である。一方、高電力の信号のテールを無視する影響は、比較的低い電力の信号に関する全数検索の結果に対して壊滅的である。両方の信号が、比較的似通った電力で受信された場合には、テールを無視ことにより、コンスタレーションの各ポイントの周りの不確定性クラウドのサイズが、取るに足らないほど増加するだけで、検索しなければならないポイントの総数が、劇的に低減される。これの意味するところは、全数検索は、ＩＳＩテールを無視できる場合には、与えられた信号にデータポイントを割り当てるために莫大な数の可能性を調べる必要がないということである。
【００６２】
ｒシンボル（ｒ＜ｎ）を超えるシンボル間干渉テールを無視する２つの技術と、最高電力のユーザまたはユーザグループを除去する除去技術の利用が、図８に示されている。ここでは、８８に示すように、実行される全数検索マルチユーザ検出に先立って、最高電力のユーザが８６において除去される最も簡単な処理が示されている。全数検索マルチユーザ検出では、ｒビット持続時間を超えるシンボル間干渉テールは無視されることがわかるだろう。最高電力のユーザの除去と、テールの無視とを組み合わせると、一般に、図中のＢ1およびＢ2…Ｂkで示された様々なビットストリームの回復において、少なくとも５桁は、計算負荷が低減される。
【００６３】
図９に示すように、信号の電力が同じである場合には、除去を行わずに、干渉テールを無視して、全数検索マルチユーザ検出８８が実行される。
【００６４】
ここで、図１０によると、より詳細に、基地局コントローラ９０は、回線９２を介して取得チャネルの受信信号を標準単一ユーザパラメータ推定部９４に提供する。標準単一ユーザパラメータ推定部９４は、次いで、結合マルチユーザパラメータ洗練およびユーザグループ分け部９６に接続されている。さらに、ユニット９６への入力は、回線９８によって示されるように、トラヒックチャネルＸに現在割り当てられている信号の数である。
【００６５】
トラヒックチャネルＸの受信信号は、回線１００を介してユニット９６と、パラメータ洗練およびユーザグループ分け部の出力１０４を必要とする結合マルチユーザ信号復調部１０２とに送られる。
【００６６】
標準単一ユーザパラメータ推定部は、電力、搬送波の位相、搬送波オフセット、およびタイミングオフセットの最初の推定値を、結合パラメータ洗練およびユーザグループ分け部９６に提供する回線１０６を介して、このユニット９６に接続されていることに注意されたい。結合マルチユーザパラメータ洗練およびユーザグループ分け部の出力は、トラヒックチャネルＸの信号すべてに対する電力、搬送波のオフセット、タイミングオフセットの改善された推定値のセットである。これら５つのパラメータおよびユーザのグループ分けは、結合マルチユーザ信号復調部によって用いられ、それにより、分離された信号を表すユーザ１、ユーザ２…ユーザＫに対して生ビットストリームを出力することが可能となる。
【００６７】
ユニット９６は、さらに、相対電力に関して入力信号のグループ分けを決定するよう機能することがわかる。
【００６８】
生ビットストリームは、デインターリーブ、誤り訂正デコード、およびその他のフィルタ技術のようなシステム内にすでに存在する残りの処理を施されなくてもよいことがわかる。
【００６９】
ここで、図１１によると、結合マルチユーザ信号復調システムが示されている。ここでは、結合マルチユーザ信号復調部１０２は、図中の１００で示されているチャネルＸの受信信号である入力を有する。図からわかるように、受信信号は、電力に従ってグループ分けされた第１のグループのｑ１入力信号を基本的に処理する結合復調、再変調、除去およびグループ分け部１１０に提供される。
【００７０】
ユーザグループ１部１１０の出力は、第１のグループのユーザよりも低い電力を有するユーザのみが唯一存在するとした場合の受信信号の推定値である。この出力は、次に、１１２で示すユーザグループ２のための結合復調、再変調および除去部に提供される。ユーザグループ２部１１２の出力も、第２のグループのユーザよりも低い電力を有するユーザのみが唯一存在するとした場合の受信信号の推定値である。
【００７１】
その処理は反復され、それにより、１１４に示すように、ユーザのグループＬに対して信号が処理されるまで、ユーザのグループＬまでのすべてのユーザのグループに対して、処理が継続される。ユニット１１０、１１２および１１４の各々の出力は、特定のグループの中の全ユーザに対する生ビットストリームであることがわかる。例えば、回線１１６の出力は、第１のグループ内のｑ１ユーザ全員に対する生ビットストリームであり、１１８の出力は、第２のグループ内のｑ２ユーザ全員に対する生ビットストリームであり、１２０の出力は、最後のグループ内のｑＬユーザ全員に対する生ビットストリームである。
【００７２】
ここで、図１２によると、結合復調、再変調および除去部が示されている。
【００７３】
ここでは、現在のグループ（ここでは、第１のグループ）のユーザのための最適非同期マルチユーザ検出器１３０に、入力信号１００が提供される。このユニットは、ＩＳＩテールの修正も考慮に入れる。
【００７４】
最適非同期マルチユーザ検出器すなわちＭＵＤ１３０は、Ｖｅｒｄｕの第４章に記載された技術を用いてマルチユーザ検出を実行するユニットであり、この場合には、シンボルの適切な数、例えば、ｒを超えて存在するシンボル間干渉テールの存在を無視する。これは、このユニットで提供される全数検索の計算の複雑性を大幅に低減するために行われる。
【００７５】
Ｖｅｒｕｄｕの第４章に示唆されているように、マルチユーザ検出アルゴリズムは、結合パラメータ推定手順の出力である、チャネルを共有する全ユーザに対する受信電力、位相、周波数オフセット、およびタイミングオフセットの知識を必要とする。さらに、ユーザグループ分け情報も、回線１０４を介してユニット１３０に提供される。
【００７６】
この情報から、ユニット１３０は、このステージで、処理されるべきｑ１個の信号と、無視されるべきＫ−ｑ１個の信号とを決定する。ユーザの総数Ｋの内の小さいサブセットｑ１をグループにまとめることにより、最適非同期マルチユーザ検出の複雑性を低減し、Ｍq1 x rとする。ただし、ｑ１は、この第１のサブグループのユーザ数である。ｒは、ｎよりも小さい低減されたＩＳＩの数、すなわち、実際のＩＳＩの数を示すために用いられることを思い出されたい。
【００７７】
ユニット１３０の出力は、回線１３２に示されたように、現在のグループの全ユーザに対する生ビットストリームであり、ユニット１３０の別の出力は、現在のグループのユーザに対する完全なＩＳＩテールを備えた受信信号を再変調して再生成するユニット１３４に提供される。
【００７８】
ユニット１３４の目的は、第１のグループに関するユーザのみが唯一の送信ユーザであった場合に存在するであろう受信信号を再生成することである。各ユーザの信号は、完全なＩＳＩテールを備えて再生成されることに注意されたい。この動作は、１３６において実行され、その結果、１３８における出力は、第１のグループのユーザよりも低い受信電力を有するユーザのみが存在した場合の受信信号の推定値となる。
【００７９】
出力１３８における信号は、比較的小さい数の送信信号のみに対応する信号であることがわかる。例えば、図１２が、第１のユーザグループに関する結合復調再変調除去ブロックを表す場合には、出力１３８は、Ｋ−ｑ１のユーザにのみ対応する。
【００８０】
ブロック１１０は、最適非同期ＭＵＤの計算の複雑性が大幅に低減されるように、ユーザの数を減少させるために繰り返されることがわかるだろう。電力グループ分けが可能である場合には、全体の結果として、少なくとも５桁は計算の複雑性が低減される。
【００８１】
最適非同期マルチユーザ検出部が適切に動作するためには、そこへの入力が、チャネルを共有するユーザ全員の受信電力、位相、周波数オフセットおよびタイミングオフセットに関して正確であることが重要である。
【００８２】
基本的に、上述のパラメータを推定する方法は２つある。１つ目は、単一のユーザが取得チャネルに存在することを仮定するユニット９４によって示されたようにパラメータを推定する演繹的方法である。ユニット９４は、取得チャネルの信号に基づいて簡単なパラメータ推定を実行する。電話の電源が入れられると、電話は、トラヒックチャネルに割り当てられる前に、個々の取得チャネルを介して基地局と通信しなければならないことがわかるだろう。ユーザが１人だけである場合には、パラメータ推定部９４は、従来技術を用いて、電力、タイミングオフセットおよび周波数オフセットを確定することができる。チャネルを共有する全ユーザの電力、周波数オフセットおよびタイミングオフセットの最初の推定値を演繹的に確立するために用いることができるのは、これらの信号である。このパラメータ推定システムが動作するのは、常に、取得チャネルを介して送信することが許可されるユーザが１人だけであるためである。
【００８３】
ある与えられた時間にシステムに接続しようとするユーザは、１人のみであることがわかる。その結果、基地局が、利用可能なトラヒックチャネルを使い果たしたと仮定して、あるユーザが与えられたトラヒックチャネルを用いており、別のユーザが基地局と通信しようとする場合には、第２のユーザは、上述の方法でパラメータを確定させて、同じトラヒックチャネルを介して接続されることが可能である。これは、トラヒックチャネルへの追加ユーザの接続に関する連続的な処理である。ユーザが、取得段階を超えてトラヒックチャネルに移行すると、そのユーザのパラメータが洗練される。これは、図１０のユニット９６によって実行される。
【００８４】
結合マルチユーザパラメータ洗練およびグループ分け部９６は、図１３に示すように、位相の推定値を計算し、電力、搬送波オフセットおよびタイミングオフセットの推定値を洗練する。未洗練のパラメータを信号分離に用いることも確かに可能であるが、図１２の最適非同期マルチユーザ検出器１３０によって、より堅固な信号分離を実現できるように、これらのパラメータをさらに洗練すると、より有効である。
【００８５】
ここで、図１３によると、洗練を実現する方法が説明されている。図からわかるように、図中のｒ（ｔ）で示された入力信号１００は、破損された信号のトレーニングシーケンス部分を分離するよう機能するユニット１４０に進む。本発明の一実施形態では、トレーニングシーケンスは、図４Ａの基地局２６によって取得の間に確立される。基地局２６は、同じトラヒックチャネルを割り当てられたユーザ各々に固有のトレーニングシーケンスを割り当てる。システムは、トレーニングシーケンスを用いて、ビットタイミングオフセット、周波数オフセットおよび位相の追跡を可能とする。したがって、取得の間に、基地局は、携帯電話機と通信して、そのタイミングを基地局のタイミングに、延いては、この新しいユーザにも割り当てられるトラヒックチャネルにすでに存在する他のユーザのタイミングに同期させる。これは、伝統的に、任意のＴＤＭＡベースの商業用のセルラーシステムまたは衛星システムで実現される。このトレーニングシーケンスは、さらに、洗練されたパラメータ推定値を確定できるように個々の信号を分離する手段を提供するために、主題のシステム内で用いられる。
【００８６】
したがって、１４０に示すように、受信信号は、データビットに対応する信号の部分から出力ゼロ化することに基づいて分離され、トレーニングビットに関する信号の部分は、出力としてそのまま残される。トラヒックチャネルＸを占有する送信信号に対応する受信信号のトレーニングシーケンス部分は、受信信号のデータ部分に由来する信号のゼロ出力と共に、１４２および１４４で示されている。
【００８７】
ユニット１４０の出力は、加算接合器１４６に提供される。１４８において、以前に同じトラヒックチャネルに割り当てられたすべてのユーザ信号のトレーニングシーケンス部分に対応する信号が再生成される。
【００８８】
したがって、１４８の出力は、最も新しいユーザを除く全ユーザに由来する受信信号のトレーニングシーケンス部分の推定値である。１４６では、最も新しいユーザを除く全ユーザのトレーニングシーケンス部分の推定値が、最も新しいユーザを含む全ユーザの受信信号のトレーニングシーケンス部分から減じられる。１５０におけるその結果は、最も新しいユーザのみがチャネルＸに単独で存在した場合に存在するであろう受信信号のトレーニングシーケンス部分の推定値である。これは、取得ステージの間に求められた既知のトレーニングシーケンスと、ユーザＫのパラメータ（すなわち、受信電力、オシレータの位相、タイミングオフセットおよび周波数オフセット）に対する最初の推定値とを前提とするユーザＫのパラメータのための最大帰納的推定器に、回線１５０を介して提供される。これは、ユニット１５２によって実行される。
【００８９】
回線１５０の情報は、最も新しいユーザのみが存在した場合のトレーニングシーケンス部分の間の受信信号を反映していることがわかる。したがって、上述の処理では、ユニット１５２から見ると、他の信号が存在しないかのように見える。ユニット１５２は、ユニット９４を省いた場所を占めることに注意されたい。標準的な単一ユーザ用パラメータ推定部９４は、チャネル当たりに１ユーザしか存在しなかったことを仮定しているが、取得段階においては、チャネル当たりに１ユーザしか存在しないため、それが正しかったことが思い出されるだろう。
【００９０】
ここで、ユニット１５２は、トラヒックチャネルに基づいて最初の情報を用いると共に、トラヒックチャネルの信号を分離する際に有効なパラメータの洗練を許可する。
【００９１】
推定の理論では、推定値の誤差分散で評価されるパラメータ推定値の質は、パラメータ推定処理が継続を許容された期間に逆比例することが周知である。要するに、長く見るほど、パラメータ推定値は良好となる。
【００９２】
したがって、推定部１５２で実行されることは、回線９８を介して示したようなトラヒックチャネルに割り当てられたユーザの数と、各ユーザに対する最初の推定値（すなわち、１０６に示したようなタイマーオフセット、周波数オフセット、電力および位相）を前提として、適切な質となるまで、推定部１５２が、割り当てられた通信チャネルの全信号のパラメータ推定値を改善するために作動し続けることである。これは、各ユーザのパラメータを１つずつ洗練し、最も新しいユーザに対してチャネルＸに加わる優先権を常に与えて、チャネルＸの各ユーザに対応するパラメータセット各々のさらなる洗練を順番に実行することにより実行される。
【００９３】
より詳細には、推定部は以下のように動作する。システムは、最初に、前の推定値を取り込んで、一時的にそれらを保留しておく。次いで、システムは、新しいユーザのみによって送信された信号のトレーニングシーケンス部分に対応する干渉調整信号１５０を取得する。システムは、複数のバースト期間にわたってこの信号を観察する。バースト期間とは、別のセットのパラメータ推定値を計算するために用いられる所定の短い時間間隔を意味する。この所定の間隔すなわちウィンドウに、位相、電力、タイミングオフセットおよび周波数オフセットが、図１０のユニット９４に示されたのと全く同じ方法で決定される。これは、上述のトレーニングシーケンスを前提とする。
【００９４】
この時点で、元の推定値が確保され、さらに、第１のセットに依存しない第２のセットの推定値が得られた。システムは、より良好な推定値を得るためにそれら２つを平均する。この処理は繰り返され、均等加重平均を反映するのに適切な加重を掛けるか、または、より最近の推定値により大きい加重を掛けるかして、新しい間隔すなわちウィンドウに基づいて新しい推定値を追加する。所望の正確さが達成されるまで、最大数の連続した推定値が、繰り返し平均される。
【００９５】
マルチユーザ検出器は、できる限り早く、好ましくは、リアルタイムに推定値を必要とし、極端に大きな数の平均を完了するほどの時間まで待つことができないことがわかる。主題のシステムでは、パラメータ洗練部は、複数の洗練された推定値を同時に出力するが、次に、システムが動作し続ける際に推定値がますます洗練されるように、長期間にわたって推定値の洗練を継続し、それと同時に、リアルタイムの推定値をマルチユーザ検出器に提供する。チャネルＸに加わる最も新しいユーザのために、良質の推定値が実現されると、ブロック１４８は、このユーザに関するパラメータの洗練を可能とするために、チャネルＸの比較的古いユーザの信号の内の１つを除いた全信号を減じるよう切り換える。この処理は、すべてのユーザのパラメータが順に洗練されるように繰り返される。
【００９６】
連続的な時間間隔にわたって平均し続けると、与えられたシステムに対して最適な平均が実行される収集期間となることがわかるだろう。この時、前の収集間隔に基づく推定値は、時間と共に信号が変化することを考慮して、推定値が、できる限り最新のものとなるように、振り落とされる、すなわち除去される。本明細書では、このことを追跡と呼ぶこととする。したがって、推定器１５２は、推定値が時間と共に変化できるように、収集されるデータのスライディングウィンドウでパラメータ推定値を洗練する。さらに、いかなる時点においても、チャネルＸに割り当てられたＫ人のユーザのいずれかの最新の推定値が、１４８にフィードバックされているだけでなく、１０６を介して信号分離ブロックに送信されている。最終的な結果として、できる限りリアルタイムの基準に近い時点で、質の高いパラメータ推定値が、１０６を介して信号分離ブロックに供給される。
【００９７】
上述の推定器は、与えられたトラヒックチャネルに同時に割り当てられた信号の分離に有用であるばかりでなく、干渉が意図的または意図的でない干渉信号の分離を試みるすべての種類のマルチユーザ検出器にも有用であることがわかる。したがって、最大帰納的推定器は、本明細書の好ましい実施形態として記載されたマルチユーザ信号復調システムに用いられるだけでなく、信号に関する任意の種類のマルチユーザ検出または除去が必要とされる任意の場合に用いられてよい。
【００９８】
本発明のさらなる態様として、本発明は、信号分離ブロックの性能を向上させるように個々の携帯ユニットの電力をより慎重に制御する電力制御方式を用いて、さらに良好に動作させることができる。したがって、パラメータ推定器は、個々の信号の電力の推定値を提供するよう機能することで、閉ループオーバーパッキングシステム内でそれらの電力を慎重に制御できるようにすることができる。
【００９９】
ここで、主題の複合型マルチユーザ検出器のソースコードを提示する：
複合型マルチユーザ検出器：
Mud_demod.m
function mud_demod(paramflag,demoflag,nbit,mud_demod)
%mud  このプログラムは、ＭＵＤアルゴリズムを実施する。
% 入力：下り回線からのトラヒックと推定パラメータファイル。
% トラヒックファイルは、bfn_dChOut.matと呼ばれ、
% 推定パラメータファイルは、bfn_estParams.matと呼ばれ、
% bfnは、ユーザがinParams.mにおいて選択した基本のファイル名を表す。
% 入力
% paramflag：１に設定されている場合、パラメータ推定ルーチンからの出力を用いる。
% ０に設定されている場合、grouth trueを用いる。
% 初期値０（パラメータ推定値が完全とはいえないため）
% demoflag：１に設定されている場合、ビタービは、残存している経路の状態を保存する。；
% ０に設定されている場合、ビタービは、残存している経路のビットシーケンスを保存し、ユーザが２を超える実行ケースのためにメモリを保存する。
%  初期値１
% nbit：infに設定されている場合、ファイル全体を処理する。
%  Ｋ（整数）に設定されている場合、多数ケースのシナリオにおける高速検索のためにＫステージのみを処理する。
%  初期値inf；
% mud_demod：ハイブリッドまたはdemudのみ
%
%
% K_estは、Ｋ（信号内の送信者の数）の推定値を表すスカラ整数値である。
% tau_estは、バースト遅延（tau）の浮動小数点推定値の１ベクトルとK_estを掛けたものである。
% T_estは、T（スタッガオフセット）の整数の推定値の１ベクトルとK_estを掛けたものである。
% dChOutDataは、下り回線モジュールからの信号であり、浮動小数点時間サンプルのＬベクトルと１を掛けたものである。
【０１００】
%
% 出力
% demodOutDataは、浮動小数点時間サンプルのＬマトリクスとK_estを掛けたものである。
if nargin < 1  % ユーザが指定していない場合、demoflagは０に設定。
paramflag=0;
demoflag =1;
nbit = inf;
mud_demod=1;
elseif nargin < 2  % ユーザが指定していない場合、demoflagは０に設定。
demoflag =1;
nbit=inf;
mud_demod=1;
elseif nargin < 3  % ユーザが指定していない場合、demoflagは０に設定
nbit=inf;
mud_demod=1;
elseif nargin < 4  % ユーザが指定していない場合、demoflagは０に設定
mud_demod=1;
end
demoflag
paramflag
nbit
mud_demod
% 初期設定
global batchMode baseFileName
system_constants_init;    % グローバルシステム変数を取得
if isempty(batchMode)
batchMode=0;
end
mFilePath=pwd;
cd ..
if exist('outputFiles')~=7
mkdir('outputFiles');
end
cd outputFiles;
outPath=pwd;
【０１０１】
% 推定パラメータファイルのロード
if batchMode~=1
[filename,pathname]=uigetfile('*_estParams.mat','Select an Estimated Parameter File');
baseFileName=strtok(filename,'_');
cd(pathname);
filename=sprintf('%s%s_estParams.mat',pathname,baseFileName);
else
if exist(baseFileName)~=7
mkdir(baseFileName);
end
cd(baseFileName);
pathname=[pwd '\'];
% パラメータ推定値が準備完了の場合
filename=sprintf('%s%s_estParams.mat',pathname,baseFileName);
end
% 信号ファイルのロード
sigfilename=sprintf('%s_dChOut.mat',baseFileName);
load(sigfilename,'dChOutData');
if nbit ~= inf
dChOutData=dChOutData(1:nbit*4);  % デバッグのため
end
L = max(size(dChOutData));
cd(mFilePath);
[bitinfo,tau_est,A_est,K_est,sidx,signal_delay,T,TSC,unbias_tau]=premud(filename,L,paramflag);
%
% echo
T
TSC
unbias_tau
【０１０２】
% 後の利用のためにインデックスを記録（bitinfoは変更可能）
keep = zeros(size(bitinfo));
small=size(keep,1);
startidx = zeros(K_est,1);
for ik = 1:K_est
keepidx  =  find(bitinfo(:,ik)==2);
small = min(length(keepidx),small);
keep(1:length(keepidx),ik)=keepidx;
starttmp =find(bitinfo(:,ik)); %
startidx(ik) = starttmp(1);     % 最初に、demud only modeで０でないインデックスを利用
end
keep = keep(1:small,:);
% トレーニングデバッグを効果的に止める通常のデータでトレーニングbitinfoを置き換える。
%bitinfo(find(bitinfo))=2;
bitinfo(find((bitinfo ~=3)& bitinfo))=2;  % joは、対比のために遷移ビットとして３つのタイプのビットを加える。
outPath=[outPath '\' baseFileName];
if mud_demod % hybrid mud and demud mode
【０１０３】
% 以下は、プログラムの要点
[maxA,maxIdx]=max(abs(A_est));
thr=.5*maxA;
nogo=0;
newset=[];
for i=1:length(A_est),
if i~=maxIdx,
if(abs(A_est(i))>thr),
nogo=1;
end
newset=[newset i];
end
end
if ~nogo,
rrcos=sqrtrcos(L_HALF,ROLLOFF,FB,SAMPLERATE);
rrcos = rrcos(:).';
rx_filter_delay = (length(rrcos)-1)/2;
mf=conv(dChOutData,conj(flipud(rrcos(:))));
phase=[conj(A_est(maxIdx));conj(j*A_est(maxIdx))]./abs(A_est(maxIdx));
ioffset=signal_delay+rx_filter_delay+1+round(tau_est(maxIdx)*4);
k=1;
i =ioffset:4:length(mf);
Y = zeros(1,length(i));
for i=ioffset:4:length(mf),
if bitinfo(k,maxIdx)==3,
temp=phase(1);
phase(1)=phase(2);
phase(2)=temp;
end
if bitinfo(k,maxIdx)==0,
A=0;
else
A=phase(mod(k-1,2)+1);
end
Y(k)=real(A*mf(i));
if Y(k)>0,
Y(k)=1;
end
if Y(k)<0,
Y(k)=-1;
end
k=k+1;
end
I=find(bitinfo(:,maxIdx)==0);
II=I(find(diff(I)>1))+1;
if(I(1)~=1),
II=[1 ;II];
end
st=signal_delay+tau_est(maxIdx)*4+1;
for i=1:length(II),
ed=II(i)+NUM_BURST_BITS-1;
if II(i)>=length(Y),
break;
end
if ed > length(Y),
ed=length(Y);
end
s=oqpskmod(Y(II(i):ed),SAMPLERATE,rrcos)*sqrt(2);
sd = A_est(maxIdx)*s;
x=st+(II(i)-1)*4-24:st+(II(i)-1)*4-24+length(sd)-1;
if x(length(x))>length(dChOutData),
III=max(find(x<=length(dChOutData)));
x=x(1:III);
sd=sd(1:III);
end
if ~isempty(x),
I=find(x>0);
dChOutData(x(I))=dChOutData(x(I))-sd(I);
end
end
A_est=A_est(newset);
tau_est=tau_est(newset);
bitinfo=bitinfo(:,newset);
end
if ~isempty(A_est),
[demodOutData2,multiplex_bitinfo]=asyncmud(dChOutData.',A_est,tau_est,bitinfo,signal_delay,demoflag);
end
if ~nogo,
if isempty(newset),
demodOutData2=Y;
else
demodOutData2=[demodOutData2;zeros(1,size(demodOutData2,2))];
for i=size(demodOutData2,1):-1:maxIdx+1,
demodOutData2(i,:)=demodOutData2(i-1,:);
end
demodOutData2(maxIdx,:)=Y(1:size(demodOutData2,2));
end
end
else % demud only mode
rrcos=sqrtrcos(L_HALF,ROLLOFF,FB,SAMPLERATE);
rrcos = rrcos(:).';
rx_filter_delay = (length(rrcos)-1)/2;
mf=conv(dChOutData,conj(flipud(rrcos(:))));
for iusr = 1:K_est
phase=[conj(A_est(iusr));conj(j*A_est(iusr))]./abs(A_est(iusr));
ioffset=signal_delay+rx_filter_delay+1+round(tau_est(iusr)*4);
k=1;
i =ioffset:4:length(mf);
availbit = length(i);
if iusr == 1 % スペースを割り当てるために、最小の遅延は最長の使用となっている。
demodOutData2= zeros(K_est,startidx(1)+availbit-1);
end
Y = zeros(1,length(i));
for i= ioffset:4:length(mf)
if bitinfo(k,iusr)==3,
temp=phase(1);
phase(1)=phase(2);
phase(2)=temp;
end
if bitinfo(k,iusr)==0,
A=0;
else
A=phase(mod(k-1,2)+1);
end
Y(k)=real(A*mf(i));
if Y(k)>0,
Y(k)=1;
end
if Y(k)<0,
Y(k)=-1;
end
k=k+1;
end
%demodOutData2(iusr,startidx(iusr)+(0:length(Y)-1)) = Y;
demodOutData2(iusr,(1:length(Y))) = Y;
end  % iusrに対して
end
【０１０４】
% ストリッピング，トレーニング，テーリング及びゼロビット
L2 =  size(demodOutData2,2); % demodは行方向。
[maxdelay, usrmax] = max(keep(1,:));
tmp =find(  keep(:,usrmax)<=L2);
L1 = tmp(end);
demodOutData=zeros(K_est,L1);
% 元の配列としての再配列
for ik = 1:K_est,
demodOutData(sidx(ik),:) =demodOutData2(ik,keep(1:L1,ik));
end
rawber =NaN;
txbitfilename=sprintf('%s_txBitsOut',baseFileName);
cd(outPath);
load (txbitfilename)
if  exist('rawTxBitsOut')
% チャネルデコードの前にmud誤り分析を実行する。
% データビットをエンコードおよびプリコードする。
% 分析の実行に十分にデコードする。
txbitfile=sprintf('./%s_txBitsOut.mat',baseFileName);
load (txbitfile);
compare_length =  min(  max(size(rawTxBitsOut)), ...
max(size(demodOutData)));
% ビット数で
tusr=size(rawTxBitsOut,1)
pusr=K_est
if tusr ~=pusr
disp('Warning # estimate users is not equal to truth # users');
end
minusr  = min(tusr,pusr);
rawber = cumsum( ...
(rawTxBitsOut(1:minusr,1:compare_length)~=demodOutData(1:minusr,1:compare_length)).');
% 比で
for icol = 1:size(rawber,2)
rawber(:,icol) =      rawber(:,icol) ./ (1:compare_length).';
end
figure;plot(rawber,'*');
disp('RAW BER in Fraction');
rawber(compare_length,:)
disp('RAW BER in Bits');
rawber(compare_length,:)*compare_length
end
【０１０５】
% 送信者の出力データを保存する。
outFileName=sprintf('%s_demodOut',baseFileName);
save(outFileName, 'demodOutData');
% デバッグ用の予備情報
auxFileName=sprintf('%s_demodOut_aux',baseFileName);
save(auxFileName, ...
'paramflag','demoflag','nbit',...
'bitinfo','tau_est','A_est','K_est','sidx',...
'T','TSC','unbias_tau',...
'rawber');
cd(mFilePath);
premud.m
function [bitinfo,tau_est,A_est,K_est,sidx,signal_delay,T,TSC,unbias_tau]= premud(fname,L,paramflag)
% function premud(fname)
% MUD用プリプロセッサ；ＭＵＤによるbit info要件を生成する。
% paramflag 1：パラメータ推定値出力からinfoを取得する。
% paramflag 0：パラメータinfoを取得する。
%
system_constants_init;    % グローバルシステム変数を取得する。
if ~paramflag  % 真のパラメータファイルを用いて
basefname=strtok(fname,'_');
parafile = sprintf('%s.mat',basefname);
gainfile = sprintf('%s_trueAOut.mat',basefname);  % ファイルは、actual gainを含む。
【０１０６】
% フレーム情報を取得するためにparafileをロードする。
%if exist(['./OutputFiles/',parafile]) ~= 2
%if exist(['./',parafile]) ~= 2
if exist(parafile) ~= 2
%disp(['./',parafile,' missing']);
disp([parafile,' missing']);
bitinfo=[];
return;
else
% tauおよびgainのための推定値としてactualを用いて
%load(['./OutputFiles/',gainfile]);
%load(['./',gainfile]);
load(gainfile);
A_est=A*2;  %% これにより、sqrt(8)を掛けて−単位エネルギ二乗余弦パルスの間のサンプル
%% sqrt (2)で割る−Aの生成方法に従って、複雑な波形にAを標準化させる。
rrcos = sqrtrcos(L_HALF,ROLLOFF,FB,SAMPLERATE);
% すべてが単位エネルギに基づいているので、Amplitudeに標準化は必要ないと、次の行はコメントしている。
%A_est=4*A_est*sqrt(rrcos'*rrcos);
%A_est = SAMPLERATE*A_est./sqrt(SAMPLERATE);
%load(['./',parafile]);
load(parafile);
K_est   =K;
% FM (Field Matrix)
% L (Data Length in Samples)
% T stagger offset
【０１０７】
%--------------------------------------------------------------
% このブロックは、ifループから非parafileのケースと共有に移行する。
%offset=T(:)*39+tau(:);               % tau and staggler offset
%[offset,sidx]  =    sort(offset);
%signal_delay =    round(offset(1)*SAMPLERATE)  %  サンプル内
%offset = offset - offset(1);  % 全員を最初の１人への参照にする。
%A_est = A_est(sidx);
%[tau_est,bitinfo] = frameinfo(offset,L,FM,TSC);
%--------------------------------------------------------------
%
end
else        % 推定値パラメータ出力を用いる。
est_file = fname;
%if exist(['./',est_file]) ~= 2
if exist(est_file) ~= 2
%disp(['./',est_file,' missing']);
disp([est_file,' missing']);
bitinfo=[];
return;
else
load(est_file);
dim = size(A_est);  % ここで、マトリクスの次元を記録；A_estは、すぐに変更される。
dBthreshold = -7 ;    %ユーザ指定
% 現在は、３２スロットすべてが同じパラメータを有すると仮定
% 第１のタイムスロットのみからユーザを決定
AdB =20*log10(abs(A_est(:,:,1)));  %% 第１のタイムスロットを用いてすべてのAとtauとを推定
AdB =AdB-max(max(max(AdB)));
% mud.mは、K>3ではあまりに時間がかかるので、x dbを越えて３を超えないすべてを検索
idx= find(AdB > dBthreshold );
K_est = length(idx);
if K_est>3
fprintf('Initial estimate of number of users = %d\n',K_est);
fprintf('This will be limited to 3 users, to conserve computing resources\n');
end
while K_est>3
dBthreshold=dBthreshold+0.1;
idx= find(AdB > dBthreshold );
K_est = length(idx);
end
%disp(['Number of User estimate:',num2str(K_est)]);
A_page1 = A_est(:,:,1);
tau_page1 = tau_est(:,:,1);
A_est=A_page1(idx);
A_est=A_est*2;   %  これは、oqpskmod.mにおけるゲインに由来する標準化に必要
tau =tau_page1(idx);
% 検索による列方向のindx returnを再びNdimインデックス付けにマップする。
idxN = mapidx3(idx,dim); % idxを再び3 dにマップして、TおよびTSCを導く。
T = zeros(K_est,1);
TSC = zeros(K_est,1);
for i = 1:K_est;
TSC(i)=TSCset(idxN(i,1));
T(i)= idxN(i,2)-1;
end
% 推定パラメータからFMを取得するのに必要
% 現行バージョンのパラメータ推定値  すべてのスロットが満杯
% だから、そのFMをすべてのFMとしてハードコーディングする。
FM = ones(K_est,32);
end
end
【０１０８】
% Tおよびtau両方の影響の組み合わせによってtauを調整する。
offset=T(:)*39+tau(:);              % tauおよびスタッガオフセット
[offset,sidx]  =    sort(offset);
signal_delay =    round(offset(1)*SAMPLERATE)  % サンプル内で
offset = offset - offset(1);  % 全員を最初の１人への参照にする。
A_est = A_est(sidx);
unbias_tau = tau;
[tau_est,bitinfo] = frameinfo(offset,L,FM,TSC);
%--------------------------------------------------------------
function [newtau, bitinfo] = frameinfo(offset,L,FM,TSC)
newtau = fraction(offset);
% 共有チャネル情報をソートおよび構築
% asyncmudに必要なビットプロフィルを構築
%
system_constants_init;    % グローバルシステム変数を取得
nburst  = ceil(L/SAMPLERATE/NUM_BURST_BITS);
nusr = size(FM,1);
% 遅延を適合するための余分のburst；
bitinfo = zeros (ceil((nburst+1) * BITS_PER_BURST),nusr);
% TSC_ARRAY 0 1を-1 1にマップする
TSC_ARRAY(find (~TSC_ARRAY)) = -1;  %  ０を−１で置換
for iusr = 1:nusr
% データ到着前に０を置く
% 遅延ケースのための1 bin offにとって問題があると思う。
%rng = [1, max(floor(offset(iusr))-1,0)]
rng = [1, max(floor(offset(iusr)),0)]
%bitinfo(rng(1):rng(2),iusr)= zeros(floor(offset(iusr))-1,1);
bitinfo(rng(1):rng(2),iusr)= zeros(floor(offset(iusr)),1);
burst1 = [ones(3,1);2*ones(60,1);TSC_ARRAY(TSC(iusr)+1,:).';...
2*ones(60,1);ones(3,1);zeros(8,1);];
burst2 = [burst1;3]; %余分の０ガードビット
if mod(offset(iusr)-fraction(offset(iusr)),2),
bitinfo(rng(2),iusr)=3;
end
for iburst = 1:nburst
if rem(iburst,4)~=1 % 標準のburst
rng = rng(2)+[1,156];
if FM(iusr,modulo(iburst,32))  % superframae
bitinfo(rng(1):rng(2),iusr)= burst1;
else
bitinfo(rng(1):rng(2),iusr)= zeros(156,1);
end
else  % ４ごとの余分のガードビットは、第１から始まる。
rng = rng(2)+[1,157];
if FM(iusr,modulo(iburst,32))
bitinfo(rng(1):rng(2),iusr)= burst2;
else
bitinfo(rng(1):rng(2),iusr)= [zeros(156,1); 3];
end
end
end
I=find(bitinfo(:,iusr)==3);
for i=1:length(I),
if (I(i)+1<=size(bitinfo,1)),
bitinfo(I(i),iusr)=0;
bitinfo(I(i)+1,iusr)=3;
else
bitinfo(I(i),iusr)=0;
end
end
end
【０１０９】
% --------------------------------------------------------------
% ローカル関数
% function out=fraction(in)
% --------------------------------------------------------------
function out=fraction(in)
out = abs(in);
for k = 1:length(out);
if abs(out(k))>1
out(k)=out(k)-floor(out(k));
end
end
% --------------------------------------------------------------
% ローカル関数
% function out=modulo(in,N)
% --------------------------------------------------------------
function out=modulo(in,N)
out=rem(in,N); % % その残りを見つける。
out(find(~out))=N; % 0 残りを N に置き換える。
out(find(out<0))=N+out(find(out<0));
% --------------------------------------------------------------
% ローカル関数
% function oidx =  mapidx3(iidx,dim)
% --------------------------------------------------------------
function oidx =  mapidx3(iidx,dim)
if length(dim) ~=3
disp('Input must be 3 element  ');
oidx = [];
return;
end
oidx = zeros(length(iidx),3);
oidx(:,3) =   ceil(iidx(:)./prod(dim(1:2)));
oidx(:,2) =   modulo(ceil(iidx(:)./prod(dim(1))),dim(2)) ;
oidx(:,1) =   modulo(iidx(:),dim(1));
asyncmud.m
【０１１０】
%--------------------------------------------------------------
% 主要マルチユーザアルゴリズム
% 非同期ＯＱＰＳＫマルチユーザ信号のために最適検出を実行する。
% Sergio Verduによるマルチユーザ検出を参照
% 入力パラメータ：
%    data：連続ベースバンドデータストリーム
%    gain：推定されたマルチユーザ複合信号ゲイン
%    tau：サンプルにおけるTfwdの相対マルチユーザ時間遅延部分を推定
%    demoflag：１は、中間プロットなどを示す。
%
% ２０００年４月に Ned Thammakhoune によって書かれた。
% 修正履歴
%    6/5/00  第１の実用バージョン  Joseph Su
%    6/14/00  速度およびメモリのためのコードの最適化  Ned Thammakhoune
%--------------------------------------------------------------
function [decision,bitinfo]=asyncmud(data,gain,tau,bitinfo,signal_delay, demoflag)
global SysPara;
if nargin < 3
demoflag=0;
end
if length(tau)~=length(gain)
disp('tau and gain must have the same length')
end
async_debug = 0;
if async_debug
fid = fopen('async_debug.log','w');
end
tau=tau(:);
gain=gain(:);
%
bitinfo=bitinfo.';
bitinfo=bitinfo(:);
% システムレベルのパラメータの初期設定と取得
SysPara = SysParaInit;
%rx_filter_delay = length(SysPara.rrcos)-1;
rx_filter_delay = floor(length(SysPara.rrcos)/2)
phase=gain./abs(gain); % 位相
mxusr =length(tau);    % 実際のユーザ数
nusr  = 2*mxusr;       % ＩおよびＱは、独立したユーザとして扱う。
nstage = floor((length(data)-rx_filter_delay-signal_delay)/(2*SysPara.spb))*nusr   %データは、データの余分のfwd pdを有すると仮定
decision = zeros(nstage,1);             % 決定ビットにスペースを割り当てる。
yi = zeros(nstage/nusr,nusr);           % nusr列を持つマトリクスに編成する。
【０１１１】
% 入力データを整合フィルタリングする。
mf =  conv(data,conj(flipud(SysPara.rrcos(:))));
% 時間遅延に応じて、個々のユーザに対してmfを適切な遅延にタップする。
% Ｑの成分は、ＩチャネルからのTfwd
% Tfwdは、second.p内にある
% 量子化誤差をさけるために周波数領域内で、これを行う必要があることに注意
ioffset=signal_delay+rx_filter_delay+1+round(tau.*SysPara.Tfwd);
%サンプル内で
qoffset=signal_delay+rx_filter_delay+1+round(tau*SysPara.Tfwd) +SysPara.Tfwd;
for iusr = 1:mxusr
% Ｉチャネル
idata =  mf(ioffset(iusr):2*SysPara.spb:length(mf));
yi(:,iusr)=idata(1:size(yi,1)); %
% Ｑチャネル
qdata =  mf(qoffset(iusr):2*SysPara.spb:length(mf)) ;
yi(:,iusr+mxusr) =qdata(1:size(yi,1)); %
end
% それらを時系列で多重化  ＩＩＩＩＱＱＱＱＩＩＩＩＱＱＱＱ
% 最大tauはTfwdすなわちビット時期よりも小さいと仮定
yi=yi.';
Y =yi(:);
% ビタービアルゴリズム開始
% demoflagが１に設定されている場合、追跡可能性に対して残存経路における状態を記録することに注意
% demo flagが０に設定されている場合、ビットシーケンスはメモリを最適化する代わりに記録される。
nisi=2;
nbit = nisi*nusr-1;
vtrb.N = 2^(nbit);
vtrb.T=4*vtrb.N;
if vtrb.T>nstage,
vtrb.T=nstage
end
if demoflag
vtrb.Sp = NaN*ones(vtrb.N,vtrb.T);
else  %ビットシーケンスを保存するために、０でない整数matlabを用いる。
wordlength=52; % ＩＥＥＥマシン浮動小数点整数のため
nword = ceil(vtrb.T/wordlength);
vtrb.Sp = zeros(vtrb.N,nword);
end
vtrb.J = zeros(vtrb.N,1);
nstage
% ＩＱ成分のためにtauとgainの位相を拡張
iqtau =  [tau;tau+1];  % tauは1 tfwの単位  1 tfwは、後にｑ成分用
iqgain = abs([gain;gain]);
iqphase = exp(j*[angle(gain);pi/2+angle(gain)]);
【０１１２】
% 相互相関テーブルを算出および格納
rij =  real(rcalc(iqtau,iqphase,nisi,0));
% 状態テーブルを作成
state=create_state(nbit);
ptr=zeros(vtrb.N,2);
%前の状態へのポインタを算出
for n=1:vtrb.N,
%---------------------------------------------------------------------
% デバッグのために比較するよう残った状態の数が多い場合、
% 高速化のために直接ビット計算で置き換える。
% ptr(n,1)=find(ismember(state,[1,state(n,1:nbit-1)],'row'));
% ptr(n,2)=find(ismember(state,[-1,state(n,1:nbit-1)],'row'));
% right shift and set left most bit
%---------------------------------------------------------------------
shiftv =  bitshift(n-1,-1);
ptr(n,1)  = mybitset(shiftv,nbit,0)+1;  %
ptr(n,2)  = mybitset(shiftv,nbit,1)+1;
end
A=zeros(1,nbit);
Aidx=nbit;
% 第１のnbitステージ
for t=1:nbit,
【０１１３】
% 前のステージによるコストを計算
table = zeros(vtrb.N,1);
ridx=modulo(t,nusr);
Aidx=modulo(Aidx+1,nbit);
% apriori infoを探索
if(bitinfo(t)==0),
A(Aidx)=0;
else
if(bitinfo(t)==3),
temp=iqphase(ridx);
tidx=modulo(ridx+mxusr,nusr);
iqphase(ridx)=iqphase(tidx);
iqphase(tidx)=temp;
rij =  real(rcalc(iqtau,iqphase,nisi,0));
end
A(Aidx)=iqgain(ridx);
end
for istate=1:2^(t-1),
for n=1:t-1,
lidx=modulo(t-n,nusr);
k=(istate-1)*2+1;
table(k)=table(k)+...
state(k,nbit-n)*A(modulo(Aidx-n,nbit))*rij(1,lidx,ridx);
end
end
% 現在のステージでのコストを計算
Y(t)=real(Y(t)*conj(iqphase(ridx)));
tempJ=vtrb.J;
if t~= nbit,
for n=1:2^t,
vtrb.J(ptr((n-1)*2+1,1))=tempJ(ptr(n,1))+...
state(n,nbit)*A(Aidx)*(Y(t)-table(ptr(n,1)));
end
else
for n=1:2^t,
vtrb.J(n)=tempJ(ptr(n,1))+...
state(n,nbit)*A(Aidx)*(Y(t)-table(ptr(n,1)));
end
end
end
【０１１４】
% 残存経路を調整
inner_lp_sz=vtrb.N/2;
outter_lp_sz=1;
for t=1:nbit-1,
%t
kk=1;
if demoflag % 実際の状態
idx=modulo(t+1,vtrb.T)
else  % ビットシーケンス
[idxP,idxW]  = modulo_p(t+1,wordlength); % tはTを超えないことに注意
end
for n=1:outter_lp_sz,
for k=1:inner_lp_sz,
if demoflag % 実際の状態
vtrb.Sp(kk,idx)=1;
else  % ビットシーケンス
vtrb.Sp(kk,idxP)=mybitset(vtrb.Sp(kk,idxP),idxW,1);
end
kk=kk+1;
end
for k=1:inner_lp_sz,
if demoflag % 実際の状態
vtrb.Sp(kk,idx)=2;
else  % ビットシーケンス
vtrb.Sp(kk,idxP)=mybitset(vtrb.Sp(kk,idxP),idxW,0);
end
kk=kk+1;
end
end
outter_lp_sz=outter_lp_sz*2;
inner_lp_sz=inner_lp_sz/2;
end
【０１１５】
% すべての信号が（ほとんどの時間で）共存している場合のmf独立項
fixcost = NaN*ones(vtrb.N,nusr);  %
% nbitステージ後
tic % 監視を開始
for t=nbit+1:nstage,
if ~rem(t,50)  % ５０ごとに返す。；
sprintf('stage %d  elapase tme %f',t,toc)
tic % 時間をリセット
end
ridx=modulo(t,nusr);  % 現在のusrインデックス
Aidx=modulo(Aidx+1,nbit);
% apriori infoを探索
if(bitinfo(t)==0),
A(Aidx)=0;
else
if(bitinfo(t)==3),
temp=iqphase(ridx);
tidx=modulo(ridx+mxusr,nusr);
iqphase(ridx)=iqphase(tidx);
iqphase(tidx)=temp;
rij =  real(rcalc(iqtau,iqphase,nisi,0));
fixcost = NaN*ones(vtrb.N,nusr);  %     % rij変更
end
A(Aidx)=iqgain(ridx);
end
currbit=NaN;
if(bitinfo(t)==1)
currbit=1;
end
if(bitinfo(t)==-1)
currbit=-1;
end
【０１１６】
% 固定テーブルを用いるための条件  すべての干渉項が０ではない。
%if t==100
% キーボード
%end
reuse= all( [A(modulo(Aidx-(1:nusr-1),nbit)), A(modulo(Aidx-( nusr:nisi*nusr-1),nbit))]);
rebuild = isnan (fixcost(1,ridx));  %テーブルはまだ構築されていない。
%rebuild = 1;  % すべてのテーブルが除去することを試験するためにハードコーディングする。
% 再使用不可能またはfixcostがそのユーザに対して構築されていない場合
if (~reuse) | rebuild
table=zeros(vtrb.N,1);
for istate=1:vtrb.N,
if istate == 1 & async_debug
fprintf(fid, 'ridx %d lidx %d %d %d Aidx %d Aidxs %d %d %d\n',ridx ,modulo(t-(1:nusr-1),nusr) , Aidx,modulo(Aidx-(1:nusr-1),nbit));
end
for n=1:nusr-1,
lidx=modulo(t-n,nusr);
table(istate)=table(istate)+...
state(istate,nbit-n+1)*A(modulo(Aidx-n,nbit))*rij(1,lidx,ridx);
end
for n=nusr:nisi*nusr-1,
lidx=modulo(t-n,nusr);
table(istate)=table(istate)+...
state(istate,nbit-n+1)*A(modulo(Aidx-n,nbit))*rij(2,lidx,ridx);
end
end
if  reuse
fixcost(:,ridx)=table;
% キーボード
end
else % 再使用可能およびすでに存在
%sprintf('%d',t)
table = fixcost(:,ridx);
end
% 現在のコストを計算し最大を維持
tempSp=vtrb.Sp;
tempJ=vtrb.J;
Y(t)=real(Y(t)*conj(iqphase(ridx)));
【０１１７】
% バッファのためのインデックス
idxT  = modulo(t,vtrb.T);  % Ｔビットのモジュロ
if demoflag == 0
[idxP,idxW]  = modulo_p(idxT,wordlength);  % Ｔビットのワード長のモジュロ
end
if isnan(currbit),
for n=1:vtrb.N,
path1=tempJ(ptr(n,1))+...
state(n,nbit)*A(Aidx)*(Y(t)-table(ptr(n,1)));
path2=tempJ(ptr(n,2))+...
state(n,nbit)*A(Aidx)*(Y(t)-table(ptr(n,2)));
[mxpath,ipath]=max([path1,path2]);
vtrb.J(n)=mxpath;
if demoflag % 実際の状態
vtrb.Sp(n,:)=tempSp(ptr(n,ipath),:);
vtrb.Sp(n,idxT)=ptr(n,ipath);
else  % ビットシーケンス
savebit =state(ptr(n,ipath),nbit);
vtrb.Sp(n,:)=tempSp(ptr(n,ipath),:);
% ipath 1or2 <==> 1or0;   １プラス変化
vtrb.Sp(n,idxP)  =  mybitset(vtrb.Sp(n,idxP),idxW, (savebit+1)/2);
end
end
else
if currbit==1,
for n=1:2:vtrb.N,
path1=tempJ(ptr(n,1))+...
state(n,nbit)*A(Aidx)*(Y(t)-table(ptr(n,1)));
path2=tempJ(ptr(n,2))+...
state(n,nbit)*A(Aidx)*(Y(t)-table(ptr(n,2)));
[mxpath,ipath]=max([path1,path2]);
vtrb.J(n)=mxpath;
if demoflag % 実際の状態
vtrb.Sp(n,:)=tempSp(ptr(n,ipath),:);
vtrb.Sp(n,modulo(t,vtrb.T))=ptr(n,ipath);
else  % ビットシーケンス
savebit =state(ptr(n,ipath),nbit);
vtrb.Sp(n,:)=tempSp(ptr(n,ipath),:);
vtrb.Sp(n,idxP)  =  mybitset(vtrb.Sp(n,idxP),idxW, (savebit+1)/2);
end
vtrb.J(n+1)=-inf;
end
else
for n=2:2:vtrb.N,
path1=tempJ(ptr(n,1))+...
state(n,nbit)*A(Aidx)*(Y(t)-table(ptr(n,1)));
path2=tempJ(ptr(n,2))+...
state(n,nbit)*A(Aidx)*(Y(t)-table(ptr(n,2)));
[mxpath,ipath]=max([path1,path2]);
vtrb.J(n)=mxpath;
if demoflag % 実際の状態
vtrb.Sp(n,:)=tempSp(ptr(n,ipath),:);
vtrb.Sp(n,modulo(t,vtrb.T))=ptr(n,ipath);
else  % ビットシーケンス
savebit =state(ptr(n,ipath),nbit);
vtrb.Sp(n,:)=tempSp(ptr(n,ipath),:);
vtrb.Sp(n,idxP)  =  mybitset(vtrb.Sp(n,idxP),idxW, (savebit+1)/2);
end
vtrb.J(n-1)=-inf;
end
end
end
if t> vtrb.T,
[I,J]=max(vtrb.J);
if demoflag % 実際の状態
bit=state(vtrb.Sp(J,modulo(t-vtrb.T+1,vtrb.T)),nbit);
else
idxT  = modulo(t-vtrb.T+1,vtrb.T);
[idxP,idxW]  = modulo_p(idxT,wordlength);  % Ｔビットのモジュロ
bit=mybitget(vtrb.Sp(J,idxP),idxW)*2-1;;
end
decision(t-vtrb.T)=bit;
end
end
【０１１８】
% もはや入力がないので残りのビットを出力
[I,J]=max(vtrb.J);
for t=nstage+1:nstage+vtrb.T-1,
if demoflag % 実際の状態
bit=state(vtrb.Sp(J,modulo(t-vtrb.T+1,vtrb.T)),nbit);
else
idxT  = modulo(t-vtrb.T+1,vtrb.T);
[idxP,idxW]  = modulo_p(idxT,wordlength);  % Ｔビットのモジュロ
bit=mybitget(vtrb.Sp(J,idxP),idxW) *2 -1;   ;  %
end
decision(t-vtrb.T)=bit;
end
t=t+1;
bit=state(J,nbit);
decision(t-vtrb.T)=bit;
% mxusrに対応する連続したビットを再マップする。
decision = reshape(decision,mxusr,length(decision)/mxusr);
if async_debug
fclose(fid)
end
%
【０１１９】
% --------------------------------------------------------------
% ローカル関数
% function lambda = payoff(j,u)
% pay off function
%
% --------------------------------------------------------------
function lambda = payoff(j,u,table)
% will put in equation just testing the flow
lambda = rand(1,1);
%
% --------------------------------------------------------------
% ローカル関数
% function SysPara = SysParaInit()
% Initialize all system para parameter
%
% --------------------------------------------------------------
function SysPara = SysParaInit()
% シミュレーションのために正確にFsであるものを見つけることが必要
L_HALF = 3;
ROLLOFF=0.35;
SAMPLERATE =4;
%SysPara.rrcos=sqrt(8)*sqrtrcos(L_HALF,ROLLOFF,FB,SAMPLERATE);
SysPara.rrcos=sqrtrcos(L_HALF,ROLLOFF,.5,SAMPLERATE);
SysPara.rrcos = SysPara.rrcos/sqrt(SysPara.rrcos'*SysPara.rrcos);
%SysPara.rrcos=sqrt(SAMPLERATE) * sqrtrcos(L_HALF,ROLLOFF,FB,SAMPLERATE);
SysPara.Tfwd=4;         % サンプル内で
SysPara.spb=4;          % これが真であることを調べる
% --------------------------------------------------------------
【０１２０】
% --------------------------------------------------------------
% ローカル関数
% function states= create_state(nbit)
% --------------------------------------------------------------
function states= create_state(nbit)
integer =0:2^nbit-1;
states=zeros(2^nbit,nbit);
for k=1:2^nbit
states(k,:)=fliplr(mybitget(integer(k),1:nbit));
end
% ０１の代わりに＋−にする
states(find(states))=-1;
states(find(~states))=1;
% --------------------------------------------------------------
% ローカル関数
% function out=modulo(in,N)
% --------------------------------------------------------------
function out=modulo(in,N)
out=rem(in,N); % % 余りを見つける。
out(find(~out))=N; % ０余りをＮで置き換える。
out(find(out<0))=N+out(find(out<0));
% --------------------------------------------------------------
% ローカル関数
% function [page,idx]=modulo_p(in,N)
% return page idexを除いてモジュロと同様
% --------------------------------------------------------------
function [page,idx]=modulo_p(in,N)
idx=rem(in,N); % % 余りを見つける。
idx(find(~idx))=N; % ０余りをＮで置き換える。
idx(find(idx<0))=N+idx(find(idx<0));
page=ceil(in./N);
[page,idx];
【０１２１】
% --------------------------------------------------------------
% ローカル関数
% function rij=rcalc(tau,gain,phase,nisi)
% --------------------------------------------------------------
function rij=rcalc(tau,phase,nisi,demoflag)
global SysPara
nusr = length(tau);
if nusr~=length(phase),
error('tau and phase must be the same size');
end
rij =zeros(nisi,nusr,nusr);
% rrcosのレプリカを高解像度で生成
L_HALF = 3;
ROLLOFF=0.35;
ScaleF = 100; %
SAMPLERATE =4; % ×元の解像度
SAMPLERATE =ScaleF*SAMPLERATE; % ×元の解像度
[rrcos,t]=sqrtrcos(L_HALF,ROLLOFF,.5,SAMPLERATE);
%rrcos=rrcos*sqrt(SAMPLERATE);
%rrcos=rrcos*sqrt(8)*sqrt(ScaleF);
rrcos=rrcos/sqrt(rrcos'*rrcos);
Tprime=2*SysPara.spb*ScaleF;
for ipage = 1:nisi
for i = 1:nusr
for j = 1:nusr
timediff = diff(tau([i,j]));
delta = round(timediff*SysPara.Tfwd)*ScaleF; % サンプル内で
if delta >= 0
% 左の積分
rij(ipage,i,j) = ...
overlap_sum(rrcos,delta+ (ipage-1)* Tprime,demoflag);
else
% 右の積分
tdelta = -delta - (ipage) * Tprime;
rij(ipage,i,j) = overlap_sum(rrcos,tdelta,demoflag);
end
rij(ipage,i,j)= phase(i)*conj(phase(j))  *   rij(ipage,i,j);
end
end
end
【０１２２】
% --------------------------------------------------------------
% ローカル関数
% function rr = overlap_sum(s,delta,demoflag)
% --------------------------------------------------------------
function      rr = overlap_sum(s,delta,demoflag);
s=reshape(s,1,length(s));
ref =zeros(1,length(s)+abs(delta));
shft=ref;
if (delta>=0),
ref(1,1:length(s))=s;
shft(1,delta+1:length(shft))=s;
refidx=1;
else
ref(1,1-delta:length(ref))=s;
shft(1,1:length(s))=s;
refidx=1-delta;
end
rr=sum(ref.*shft);
if demoflag
rrfig = figure;
stem(ref,'g'); hold on;
stem(shft,'r');
ylim =get(gca,'ylim');
plot([refidx refidx],ylim,'c--');
grid
zoom
display('hit any key to proceed')
pause
close
end
【０１２３】
% 注意 : 最適化されるように記載する。
% t 従属モジュロインデックスは、毎ループ N に対して１回実行されるべきである。
system_constants.m
global debug_mode
global S_TCHQ NUM_HALF_FRAME TRAINLEN NUM_FRAME_BITS NUM_BURST_BITS STAGGER_OFFSET
global NUM_SPEECH_BITS NUM_PARITY NUM_CODED NUM_UNCODED CODE_RATE NUM_SR NUM_PUNCTURED
global NUM_INTLV MAX_SD
global BITS_PER_BURST BURSTS_PER_FRAME BITS_PER_FRAME FRAMES_PER_MULTIFRAME BITS_PER_MULTIFRAME
global SAMPLERATE ROLLOFF L_HALF TSC_ARRAYsystem_constants_init.m
system_constants;
debug_mode = 0;
S_TCHQ = 4;                         % S-TCH/Qサブチャネル
NUM_HALF_FRAME = 60;                % 半分のフレーム内のビット数
TRAINLEN = 22;                      % バースト内のトレーニングシーケンス長
NUM_FRAME_BITS = 2*NUM_HALF_FRAME;  % フレーム当たりのビット数
NUM_BURST_BITS = 148;               % バースト内のビット数（１２０＋２２＋６テール）
STAGGER_OFFSET = 39;                % スタッガオフセット当たりのビット数
NUM_SPEECH_BITS = 72;               % 音声ビット数
NUM_PARITY = 6;                     % パリティビット数
NUM_CODED = 51;                     % 畳み込みコードされたビット数
NUM_UNCODED = 27;                   % コードされていないビット数
CODE_RATE = 2;                      % 逆コード率
NUM_SR = 7;                         % 畳み込みコーダ内のシフトレジスタの数
NUM_PUNCTURED = 9;                  % コード後に破壊された（除去された）ビット数
NUM_INTLV = 3;                      % インターリーブするフレームの数
MAX_SD = 2^(NUM_SR-1)-1;            % 最大ソフト判定値
BITS_PER_BURST = 156.25;
BURSTS_PER_FRAME = 8;
BITS_PER_FRAME = BURSTS_PER_FRAME*BITS_PER_BURST;
FRAMES_PER_MULTIFRAME = 26;
BITS_PER_MULTIFRAME = BITS_PER_FRAME*FRAMES_PER_MULTIFRAME;
SAMPLERATE = 4;                     % シンボル当たりのサンプル
ROLLOFF = 0.35;                     % 平方根二乗余弦のロールオフ計数
L_HALF = 3;                         % 平方根二乗余弦の半フィルタ長（シンボルでの）
FB = 0.5;                              % 平方根二乗余弦の通信速度
【０１２４】
%標準的なバーストトレーニングシーケンス０−７
TSC_ARRAY=[
1 0 0 1 0 1 1 1 0 0 0 0 1 0 0 0 1 0 0 1 0 1
1 0 1 1 0 1 1 1 0 1 1 1 1 0 0 0 1 0 1 1 0 1
0 0 0 0 1 1 1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 1
0 0 0 1 1 1 1 0 1 1 0 1 0 0 0 1 0 0 0 1 1 1
0 1 1 0 1 0 1 1 1 0 0 1 0 0 0 0 0 1 1 0 1 0
0 0 1 1 1 0 1 0 1 1 0 0 0 0 0 1 0 0 1 1 1 0
1 0 0 1 1 1 1 1 0 1 1 0 0 0 1 0 1 0 0 1 1 1
1 0 1 1 1 1 0 0 0 1 0 0 1 0 1 1 1 0 1 1 1 1 ];
oqpskmod.m
function s = oqpskmod(I, T, pulse)
% function s = oqpskmod(I, T, pulse)
%
%入力：
%                    I(1, 1:L)           情報シンボルベクトル。行ベクトル
%
%                    T(1, 1)                    シンボル期間（サンプル／シンボル）
%
%                    pulse(1, 1:Lp)
%                パルス整形フィルタ係数
%                デフォルトでは、Ｎ＝Ｔの長さの矩形ウィンドウを用いる。
%
%出力：
%                    s(1, L*T*Lp - 1):
%                情報ベクトルＩに対応するＯＱＰＳＫ波形ベクトル
%
%要約：
%                この関数は、指定されればパルス整形と共にＯＱＰＳＫ変調を実行する。
%                出力信号ｓの電力は、単一に設定される。
%
%アルゴリズム：
%                パルス整形フィルタの復号インパルス応答を用いて、波形を生成する。
%
% 呼び出されるプロシージャ
%                なし
%
% コメント：
%                シンボルＴ当たりのサンプル数は、偶数である必要がある。
%
【０１２５】
j = sqrt(-1);
Li = length(I);          % メッセージシンボルベクトルの長さ
% パルス長が０か、０に設定されるか確認する。
if ((length(pulse) == 0) | ((length(pulse) == 1) & (pulse == 0)))
pulse = ones(T, 1) ./ T;
end
Ltemp = T * Li;
temp = zeros(1, Ltemp);
mi = I(1:2:Li); % 偶数データ（matlabアレイが１で始まるため）
mq = I(2:2:Li); % 奇数データ
temp(1:2*T:Ltemp) = mi;
% 直交アーム（虚の）を１／２シンボル期間だけ遅延する。
temp(1+T:2*T:Ltemp) = j*mq;
% シンボルのインパルスベクトルでパルス波形を畳み込むことによりベースバンド信号を形成する。
%s = T*conv(pulse, temp);
s = conv(pulse,temp)/sqrt(2);
sqrtrcos.m
function [x, t] = sqrtrcos(half_length, alpha, Fb, Fs)
% function [x, t] = sqrtrcos(L_half, beta, Fb, Fs)
%
%入力：
%         L_half        二乗余弦パルスの半分のシンボルでの長さ
%                    beta    ロールオフパラメータ  0 <= beta <= 1.0.
%                    Fb                通信速度
%                    Fs          サンプル率
%
%出力：
%         x                        二乗余弦パルス整形フィルタ係数
%
%                    t                  パルス波形構築に用いられる時間ベクトル
%
%要約：
%        ロールオフパラメータbetaとFb * (1 + beta)/2のローパス帯域幅で、2*half lengthの長さの周波数ドメイン平方根二乗余弦フィルタ応答を生成する。
%                  注：平方根二乗余弦関数は、それ自身で畳み込みされる場合には、ゼロＩＳＩを備える関数を生成する。
%
%アルゴリズム：
%        See Chevillat and Ungerboeck, "Optimum FIR Transmitter
%                        and Receiver Filters for Data Transmission over
%                        Band-Limited Channels," IEEE Trans. Comm.
%                        Vol. COM-30,  No. 8.  AUG 1982.  pg. 1911.  Equation
%                        8b.
%
%呼び出されるプロシージャ：    なし
%
% mu = oversampling factor
% 係数２がＩおよびＱの分離を補正する。
% ４ごとでななく、８サンプルごとに０が必要    -DAK
mu = Fs / Fb;
【０１２６】
% N = サンプル内のフィルタの長さ
N = fix(2*half_length*mu);
if (rem(N, 2) == 0)
N=N+1;
end
T = 1/Fb;
i = (0:(N-1)).';
t_prime = (i - (N-1) / 2) / mu;
am = 1 - alpha;
ap = 1 + alpha;
x1 = sin(pi * am * t_prime);
x2 = 4 * alpha * t_prime .* cos(pi * ap * t_prime);
x3 = pi * (1 - (4 * alpha * t_prime).^2) .* t_prime;
z_loc = find(x3 == 0);
nz_loc = find(x3 ~= 0);
if (length(z_loc) == 0)
x = (x1 + x2) ./ x3;
else
% ０による除算を判断するためにロピタルの定理を用いる。
x1h = pi * am * cos(pi * am * t_prime);
x2h = 4 * alpha * (cos (pi * ap * t_prime) ...
- pi * ap * t_prime .* sin(pi * ap * t_prime));
x3h = pi - 48 * pi * alpha .^2 * t_prime .^2;
hz_loc = find(x3h == 0);
if (length(hz_loc) == 0)
x(nz_loc, 1) = (x1(nz_loc, 1) + x2(nz_loc, 1)) ./ x3(nz_loc, 1);
x(z_loc, 1) = (x1h(z_loc, 1) + x2h(z_loc, 1)) ./ x3h(z_loc, 1);
else
% ０による除算を判断するためにロピタルの定理を用いる
fprintf('Need to do L''Hopital''s rule twice.  Not yet implemented.\n');
end
end
【０１２７】
% いずれにせよ、この出力は用いない    ０に設定
t = 0;%t_prime * T;
%x=x./abs(polyval(x,1));
x=x./(sqrt(sum(x.^2)));   %% 単位エネルギパルスにする。
【０１２８】
ここまで、本発明のいくつかの実施形態と、それに対するいくつかの変更例および変形例について説明したが、上記のものは例示的なものに過ぎず限定の意図はなく、ただ単に例として提示されたに過ぎないことは、当業者には明らかである。数多くの変更例および他の実施形態が、当該技術の通常の技量の範囲に存在し、添付の請求項とそれに対する等価物によってのみ限定される本発明の範囲に入るものとして考えられる。
【図面の簡単な説明】
【図１】  複数の無線のユーザが、単一の周波数すなわちチャネルでセルタワーと通信し、受信信号が、干渉信号を修復するための信号処理によって基地局において分類される様子を示す概略図である。
【図２】  ＴＤＭＡが用いられている場合に、２つの信号が、同じ周波数および同じタイムスロットで同時に送信され、その結果が、破損またはスクランブルされた判読不可能な結果である様子を示す概略図である。
【図３】  平方根二乗余弦フィルタ特性を通常有する整合フィルタを用いて、デジタルエンコードされた同相および直交信号が検出され、同相および直交成分は、ビットレートでサンプリングされて＋１または−１を提供し、それらのビットの符号は送信情報を伝達する従来技術のシステムを示す概略図である。
【図４Ａ】  基地局に対して同時に同じチャネルすなわち周波数で２つの信号を送信し、そこにおいて、まず結合パラメータ推定部を用いて、ビタービ検出器と、全数検索と、ＩＳＩテール切断および除去技術によって全数検索を制限する方法とを用いる信号分離部に、洗練された形でこれらのパラメータを提供することにより、個々の信号を分離する様子を示す本発明のブロック図である。
【図４Ｂ】  本発明のマルチユーザ検出システムの実施例を示す詳細なブロック図である。
【図５】  同一な信号の存在と、信号の前方部分のテールの影響を示す波形の図である。
【図６】  ２つのＢＰＳＫ同相検出信号を結合した結果と、データポイントに関して不確定な領域とを示すベクトル図である。
【図７】  同じチャネルすなわち周波数であるが任意の相対位相を持つ同時の信号を検出した結果である受信コンスタレーションにおけるデータポイントの不確定性を二次元で示す受信コンスタレーションの｛Ｓ1、Ｓ2｝に対する２つの異なる信号認識についての２つのベクトル図である。
【図８】  最高電力のユーザを示す信号が、２番目に高い電力の信号よりも電力が６ｄＢを超えて大きい場合に、最高電力の信号が除去される信号分離の計算の複雑性を低減するための一技術と、この技術に続いて、ｒシンボルを超えるシンボル間干渉テールが無視される全数検索マルチユーザ検出アルゴリズムで、残りの信号が処理されることを示すブロック図である。
【図９】  干渉信号に、電力に関して所定の量（例えば、６ｄＢ）の差がない場合に、全数検索マルチユーザ検出が適用されることを示すブロック図である。
【図１０】  トラヒックチャネルに現在割り当てられている信号の数を、単一ユーザのパラメータ推定値および受信信号と共に、結合マルチユーザパラメータ洗練において用いることで、結合マルチユーザ信号復調部にパラメータを提供することを示すブロック図である。
【図１１】  様々なユーザグループが電力に基づいて個別に処理される除去の利用を示す概略図である。
【図１２】  最適非同期マルチユーザ検出器の形成にシンボル間干渉テール修正を利用し、次いで、現在のグループにおけるユーザに対して、完全なシンボル間干渉テールを備えた受信信号を再生成することにより、現在のグループにおけるユーザよりも低い電力を有するユーザのみが唯一存在するとした場合の受信信号の推定値を得る再変調を行うことを示す概略図である。
【図１３】  結合パラメータ推定プロセスを示すブロック図である。
【符号の説明】
１０…ネットワーク
１２…ユーザ
１４…ユーザ
１６…ユーザ
１８…基地局
２０…セルタワー
２２…ユーザ、携帯電話機
２４…ユーザ、携帯電話機
２６…基地局
２８…整合フィルタ
３０…判定部
３２…送信源
３４…レシーバ
３６…整合フィルタ
４０…クロック
４２…インターリーブ・リアセンブラ
４４…復調出力
５０…結合パラメータ処理部
５２…検出器
５４…制御チャネル
５８…同じ周波数上の信号の数
６０…信号分離部
６２…波形
６４…波形
６８…フィルタ
８０…テール
８２…パルス
８４…信号
９０…基地局コントローラ
９２…回線
９４…標準的な単一ユーザ用パラメータ推定部
９６…結合マルチユーザパラメータ洗練およびユーザグループ化部
９８…回線
１００…回線、チャネルＸの受信信号、入力信号
１０２…結合マルチユーザ信号復調部
１０４…出力、回線
１１０…結合復調、再変調、除去およびグループ分け部
１１２…結合復調、再変調および除去部
１１４…結合復調、再変調および除去部
１１６…回線
１１８…回線
１２０…回線
１３０…最適非同期マルチユーザ検出器
１３２…回線
１３８…出力
１４２…トレーニングシーケンス部分
１４４…トレーニングシーケンス部分
１４６…加算接合器
１５０…回線、干渉調整信号
１５２…推定部
【図１】
0005070368.tif 000002
【図２】
0005070368.tif 000003
【図３】
0005070368.tif 000004
【図４Ａ】
0005070368.tif 000005
【図４Ｂ】
0005070368.tif 000006
【図５】
0005070368.tif 000007
【図６】
0005070368.tif 000008
【図７】
0005070368.tif 000009
【図８】
0005070368.tif 000010
【図９】
0005070368.tif 000011
【図１０】
0005070368.tif 000012
【図１１】
0005070368.tif 000013
【図１２】
0005070368.tif 000014
【図１３】
0005070368.tif 000015