固体の平坦なタッチセンシティブ表面に対するユーザの入力を検出し、ユーザの入力の位置を決定する方法であって、前記方法は、前記タッチセンシティブ表面に含まれる複数のセンサと信号で通信するプロセッサデバイスによって行なわれ、前記方法は、複数のタッチセンサに基づいて、前記タッチセンシティブ表面へのユーザの複数のタッチを記録することと、3つ以上の振動センサによって感知されたタップイベントに基づいて、前記タッチセンシティブ表面に接続されている1つ以上の振動センサから、タップイベントの信号を受信することと、前記記録されたユーザの複数のタッチに基づいて、前記タップイベントの信号が受信された後で、選択をアサートすることと、を含む、方法。アサートすることは、タッチ及び振動センサの複数の信号を、定められた時間基準点に結び付けられた一連の個別のタッチ及びタップセンサのデータのイベントに変換することを含む、請求項1の方法。アサートすることは、定められた閾値を超えた、前記1つ以上の振動センサからの複数の信号の振幅に基づいて、タップセンサのデータのイベントの信号の発生を検出することを含む、請求項2の方法。アサートすることは、複数の傾斜合計値を使用して、振動波形の最小値の位置に基づいて、前記タップセンサのデータのイベントの信号の発生時間を検出することを含む、請求項2の方法。アサートすることは、センサのデータの複数のイベントを一連の個別の入力イベントに変換することを含み、前記一連の個別の入力イベントは、前記センサのデータに関連付けられているタイプによって分類され、前記一連の個別の入力イベントは、複数の候補キーからなる組と、関連付けられている位置情報とを含む、請求項2の方法。アサートすることは、複数の振動センサにおけるタップイベントの到達時間の差に基づいて、前記タッチセンシティブ表面に対する前記タップセンサのデータのイベントの物理的座標を三角法で測定することを含む、請求項5の方法。アサートすることは、マルチラテレーションの計算結果を既知の表面の座標にマップすることによって、物理的な物質とアセンブリとにおける差異を調節することと、可能性のある複数の座標からなる組を選択することと、を含み、前記可能性のある複数の座標からなる組は、前記タップイベントの源の座標である0乃至1の確率を割り当てられる、請求項6の方法。三角法で測定することは、複数の振動センサにおけるタップイベントの振幅の差と、線形力応答の近似値とを使用し、物理的座標を三角法で測定することを含む、請求項5の方法。アサートすることは、振幅の差の計算結果を既知の表面の座標にマップし、可能性ある複数の座標からなる組を選択することによって、物理的な物質及びアセンブリにおける差異を調整することを含み、前記可能性ある複数の座標からなる組は、前記タップイベントの源の座標である0乃至1の確率を割り当てられる、請求項8の方法。アサートすることは、複数の例示的な波形からなる組と比較することによってタップの波形を認識することに基づいて、前記タップセンサのデータのイベントの信号の発生時間を検出すること、を含む、請求項5の方法。前記信号の波形を認識することは、前記波形の全体ではなく、前記波形の計算された特性を使用して行われる、請求項10の方法。アサートすることは、複数のルールを使用して、相互に支援する複合入力イベントからなる組を生成することを含み、前記相互に支援する複合入力イベントからなる組は、複数の元のイベントのデータの全てを含む、請求項5の方法。相関させることは、時間的に近い位置によって相関させることを含む、請求項12の方法。相関させることは、前記センサのデータの源に基づいて相関させることを含む、請求項12の方法。相関させることは、前記入力イベントが表す候補キーの複数の作動の共通性に基づいて相関させることを含む、請求項12の方法。アサートすることは、前記複数の入力イベントからなる組からの複数の望ましくない入力イベントを、複数のフィルタによって取り除くことを含む、請求項12の方法。アサートすることは、目的のキーより下にあるキーの不注意による作動を検出して、取り除くことを含む、請求項16の方法。アサートすることは、タイプする直前にキーボードのホームローの位置に手を載せた結果としてのキーの複数の作動を検出して、取り除くことを含む、請求項16の方法。アサートすることは、キャップスロックキーよりも、シフトキーの最もよく行われる使用に有利に働くように、複数のモディファイヤキーの偶然の又は部分的な複数の作動のうちの少なくとも1つを選択的に検出して、抑制することを含む、請求項16の方法。アサートすることは、機敏なタイピング中に、複数の同時のモディファイヤキーの作動を選択的に検出して、抑制することを含む、請求項16の方法。アサートすることは、履歴のタッチ作動のデータに基づいて、タッチする又は躊躇するタイピストとして、ユーザのタイピングスタイルを検出することと、その情報を複数の他のフィルタリング機構にフィードバックすることと、を含む、請求項16の方法。アサートすることは、前記複数の入力イベントからなる組を、一連のキーアップ及びキーダウンの作動に変換することを含む、請求項16の方法。図1は、タッチ/タップセンシティブキーボードデバイス100の実施形態のハードウェアコンポーネントの単純化されたブロック図を示している。デバイス100は、近接センサproximitysensor120と、容量性タッチセンサcapacitivetouchsensor130と、振動センサvibrationsensor140とを収めた平坦な表面を含む。センサコンポーネント120と、130と、140は、入力をCPU110110に与える。CPUは、キーボードの表面にユーザの手が近付いた、又はキーボードの表面がユーザの手によってタッチされたときに、センサコンポーネント120と、130と、140とから受信した生の信号の解釈に基づいて、接触イベントを通知する。メモリ170は、CPU110とデータ通信する。メモリ170は、プログラムメモリ180とデータメモリ190とを含む。プログラムメモリ180は、オペレーティングシステムソフトウェア181と、タップ/タッチ検出ソフトウェア182と、他のアプリケーションソフトウェア183とを含む。データメモリ190は、タッチ容量性センサの履歴配列historyarray191と、ユーザオプション/プリファランスuseroptionspreference192と、他のデータ193とを含む。ユーザの指が平らで平坦な表面に接触すると、容量性タッチセンサ130はアサートassertされる。周期的に、CPU110は、キーボードのオペレーティングシステムソフトウェア181を実行し、タッチセンサ130とタップセンサ140とから生のセンサのデータを収集し、生のセンサの日付をデータメモリ191に記憶する。異なる実行スレッドにおいて、CPU110は、連続的に、ここに記載されているタップ及びタッチの検出及び位置特定のソフトウェアアルゴリズムを実行し、キーボードによって生成されたセンサのデータを処理し、キーのアップ及びダウンの一連の状態にする。アルゴリズムの各実行は、サイクルを構成する。サイクルは、アルゴリズムのための基本的なタイミングの単位basictimingunitである。有効なキーの作動が検出されると、CPU110は、タッチ/タップ検出ソフトウェア182によって支援され、メモリ191に収められているセンサのデータのアルゴリズム的分析を行ない、平坦な表面のどのエリアがタッチ及びタップされたかを決定する。有効なタップ/タッチの位置がアルゴリズム182によって計算されると、それは、キーボードのオペレーティングシステムソフトウェア181に渡され、特定のキーボードのファンクションコードにマップされる。典型的なキーボードの機能は、標準的なキーボードの英数字キーと、ファンクション及びナビゲーションキーとを含む。次に、マップされたファンクションコードは、標準的な周辺装置/ホストインターフェイス、例えば、USB又はPS/2を通じて、接続されたホストコンピュータ端末194に送られる。図2Aは、タッチ及びタップセンシティブ表面に対するユーザのキーの作動の位置を特定する例示的な方法を実施するソフトウェアの実施形態のフローチャートを示している。方法は、5つの別個のステージに分けられる。各ステージは、マネージャと呼ばれる異なるシステムソフトウェアコンポーネントによって指示される。ステージ1センサのデータの収集200ステージ2センサのデータの分析及び入力イベントの発生300ステージ3入力イベントの相関付けcorrelation400ステージ4入力イベントのフィルタリング500ステージ5キーの状態の変化の分析600ステージ1では、タッチ及びタップセンサ140からデータを収集し、将来処理するためにメモリに入れる。図2Bは、タッチ及びタップセンサから信号値を収集及び要約するsummarizeソフトウェアアルゴリズムの実施形態のフローチャートを示している。CPU110は、SensorChannelManagerによって制御され、SCMGetSensorData方法200を通じて呼び出されるinvoke。SensorChannelManager200は、1つ以上のSensorChannelコンポーネントを呼び出す。1つ以上のSensorChannelコンポーネントは、センサデータを収集し、要約し、記憶する。SensorChannelは、特定の収集及び要約アルゴリズムをセンサの信号に適用し、タッチ又はタップセンサのデータの記録を生成する。次のステージで将来処理するために、センサのデータの記録は、関連付けられているタイムスタンプと共に記憶される。SCTapCaptureData方法200によって呼び出されたタップSensorChannelは、表面に対して指が起こしたタップの時間の発生を識別する。図3は、タップイベントを検出するソフトウェアアルゴリズムの実施形態のフローチャートを示している。タップセンサチャネル方法Tapsensorchannelmethod220は、現在のサイクルのために、振動センサのデータ記録に記憶されているタップのアナログデータをサンプリングする221。収集されたデータからなる組は、現在のサイクルの開始時間に定められた開始時間と共に、各振動センサに対する波形として表わされる。収集された信号値と平均信号との差が閾値を超えている場合に222、信号波形における対応する点は、可能性のあるイベントpossibleeventを表わす。アルゴリズムは、同時に実行する2つの状態機械を起動する。第1の状態機械は、最初のタップの反響reverberationによって複数のタップイベントが発生するのを抑制するフィルタをかける。ブロック223を参照。第2の状態機械は、閾値を越えた波形における第1の最小値を検出することによって、タップが発生した正確な時間を計算することを試みる。最小値の時間の位置は、各サンプル点samplepointにおける波形の第2の傾斜合計secondslopesumを計算することによって検出される。CPUは、各サンプル点における波形線の瞬間的な傾斜instantaneousslopeを計算する224。サンプル点における傾斜が負下向きから正上向きに変わる場合に、サンプルは最小値である可能性のあるものpossibleminimaを表し、サンプル時間はタップイベントの時間である。次に、CPUは、その最小値を真の最小値として適格とするqualifyかどうかを検出する。それまでの5つのサンプル点の傾斜を現在のサンプル点の傾斜に加えることによって、CPUは、サンプル点に対する第1の傾斜合計firstslopesumを計算する。次に、システムは、それまでの5つのサンプル点の第1の傾斜合計を現在のサンプル点の第1の傾斜合計に加えることによって、第2の傾斜合計を計算する。ブロック227を参照。その結果は、サンプル点における傾斜の差を拡大したものであり、これは閾値と容易に比較でき、最小値の特徴を示す主要な傾斜の逆転下降から上昇が識別される。決定ブロック228を参照。閾値を超えると、タップイベントが発生され、チャネルによって、タップセンサのデータオブジェクトとして記憶される。ブロック229を参照。ステージ2では、履歴のセンサのデータを分析し、入力イベントオブジェクトのストリームを生成する。入力イベントオブジェクトのストリームは、表面に対する可能性のあるキーの作動を表わす。図2Cは、センサのデータを分析して入力イベントを生成するソフトウェアアルゴリズムの実施形態のフローチャートを示している。CPU110は、InputChannelManagerによって制御され、ICMGerInputEvents方法300によって呼び出される。InputChannelManager300は、1つ以上のInputChannelコンポーネントを呼び出す。1つ以上のInputChannelコンポーネントは、ステージ1で収集され、要約され、記憶された、センサのデータを分析する。InputChannelは、特定の分析アルゴリズムをセンサのデータに適用し、状態を検出し、入力イベントを生成する。ICTouchGetEvents方法310によって呼び出されたタッチInputChannelプロセスTouchInputChannelprocessは、ユーザのタッチの入力イベントusertouchinputeventを探すlookfor。CPU110は、タッチInputChannelプロセスを実行し、記憶されているタッチ容量性センサのデータを分析し、閾値を超えた各信号に対して、タッチの入力イベントを生成する。ICTapMultilaterationGetEvents方法330によって呼び出されたタップマルチラテレーションInputChanneltapmultilaterationInputChannelは、各振動センサにおけるタップイベントの相対到達時間差timedifferenceofarrivalTDOAを使用し、キーボードに対するタップ位置の座標を計算し、入力イベントを生成する。定められた既知の位置に信号の検出器が3つ以上あるとすれば、CPU110は、マルチラテレーションmultilaterationの技術を使用して、信号の源の位置を三角法で測定するtriangulate。マルチラテレーションを使用するCPU110は、タップイベントの記録に記憶されている各加速度計への相対到達時間をとって、表面における振動波の、実験により測定された伝搬速度に基づいて、タップが行われたキーボード上の最も可能性の高い位置を計算する。計算されたタップ位置の近くにあるキーを、発生させた入力イベントにおける候補キーとして選ぶ。図4Aは、タップマルチラテレーションのためのソフトウェアアルゴリズムの実施形態のフローチャートを示している。ブロック322において、センサの各々におけるタップイベントの到達時間の時間デルタ又は差を計算する。表面に対するタップによって発生する音波は、ほぼ一定の速度で表面の物質を通って各センサへ進む。実際は、波の伝搬速度は、一定ではなく、表面上の位置によって、及び実施形態の個々の例によって異なる。ばらつきを調整するために、プロセスでは、位置ルックアップテーブルへのインデックスとして相対到達時間を使用してもよい。位置ルックアップテーブルは、三つ組tripleの相対到達時間をキーの座標にマップする。ブロック324を参照。テーブルの値は、表面に対する反復的なテストと測定とによって、実験により導き出される。正確に整合するmatch可能性は低く、且つその正確な整合は信頼できないので、プロセスでは、相対到達時間に最も密接に整合する記録からなる組を選択する。記録からなる組は、一定でない速度によって生成される統計誤差範囲に相当する、候補キーからなる組を含む領域の位置を定める。領域内の候補キーは、領域の縁端部から中央へ、増加する確率勾配increasingprobabilitygradientを有する。最も可能性の高いキーは、領域の真ん中にある。プロセス320では、マップされた領域によって特定される候補キーで、入力イベントを生成する。ブロック326を参照。1つの実施形態では、タップマルチラテレーションアルゴリズムは、外部の振動を検出し、タップイベントとして考慮することから外す方法を含む。外部の振動源が振動センサを作動させるのと同時に、ユーザが、キーボードの表面上で、タップしているのではなく、指を動かしているときに、よく起こる問題commonproblemが生じる。外部のタップexternaltapがフィルタにかけられない限り、その振動がタッチセンサにおける変化と相関しているとして、これは誤検出falsepositiveをもたらす。従って、外部の振動を検出し、それらをフィルタにかけて除去できることが、重要である。タップマルチラテレーションアルゴリズムは、表面の物理的構造の特性を使用して、外部のタップを検出する。外部のタップは、中央の加速度計よりも前に、左と右の両者の加速度計を始動させる。その理由は、外部の振動は、中央の検出器に伝搬する前に、キーボードの左と右の最下部feetを通じて、左と右の加速度計に伝わり、中央の検出器が最後になるからである。両者のアプローチの条件が満たされる場合に、信号は、外部の振動として生じている確率が高く、タップイベントから外すことができる。ICTapAmplitudeGetEvents方法330によって呼び出されるタップ振幅InputChannelプロセスTapAmplitudeInputChannelProcessは、タップの信号振幅における相対的な差を使用し、キーボードに対するタップの位置の座標を計算し、入力イベントの位置を生成する。振幅変動アルゴリズムは、加速度計の各々によって記録された相対振幅をとって、表面の物質における振動波の、実験により測定された線形力応答の近似値linearfalseresponseapproximationに基づいて、キーボード上のタップ位置の座標を三角法で測定して計算する。計算された振幅のタップ位置の近くにあるキーは、候補出力キーとして選ばれる。1つの実施形態では、タップ振幅差プロセス330は、外部の振動を検出し、タップイベントとして不適格とするアプローチを含む。キーボードの表面上の幾つかの既知の座標を除いて、キーボードの表面に対してタップが行われると、各加速度計によって検出された振幅には、通常は大きな差があり、タップ振幅差プロセス330の基準の特性である。しかしながら、外部のタップが生じたときに、各センサによって検出された振幅は、多くの場合に、そのタップを潜在的なpotential外部のタップとして識別するのに使用できる振幅に非常に近く、それを更なる検討から不適格とする。図4Bは、タップの振幅差のためのソフトウェアアルゴリズムの実施形態のフローチャートを示している。センサの各々におけるタップイベントの振幅差が計算される。ブロック332を参照。表面に対するタップから発生する音波は、信号振幅のほぼ線形の減衰を伴って、表面の物質を通って各センサに伝搬する。振幅差アルゴリズム330は、タップイベントの記録に記憶されている相対振幅を使用し、信号波が表面を渡るときに伝導物質における吸収によって生じる信号振幅における想定される線形の一定の減衰の線形力応答の近似値に基づいて、タップが行われたキーボード上の最も可能性の高い位置を計算する。信号源が信号検出器から更に遠くなるほど、信号はより小さくなる。実際には、波の減衰は一定ではなく、表面上の位置によって、及び実施形態の個々の例によって異なる。ばらつきを調整するために、プロセスでは、位置ルックアップテーブルへのインデックスとして振幅値を使用してもよい。位置ルックアップテーブルは、三つ組の振幅差をキーの座標にマップする。ブロック334を参照。テーブルの値は、表面に対する反復的なテストと測定とによって、実験により導き出される。正確に整合する可能性は低く、且つその正確な整合は信頼できないので、プロセスでは、振幅差に最も密接に整合する記録からなる組を選択する。記録からなる組は、一定でない減衰によって生成される統計誤差範囲に相当する、候補キーからなる組を含む領域の位置を定める。領域内の候補キーは、領域の縁端部から中央へ、増加する確率勾配を有する。最も可能性の高いキーは、領域の真ん中にある。プロセス330は、ブロック336において、マップされた領域によって特定される候補キーで、入力イベントを生成する。ICPressGetEvents方法340によって呼び出される押下InputChannelプロセスPressInputChannelProcessは、載せている指がキーボードの表面上に強く押下されているときに生じる入力イベントを検出する。これは、載せている指のタッチ信号強度を認識して記憶に留めて、載せている指と押下した指との差を測定する。信号強度の差が閾値を超えると、入力イベントが発生される。ICTapWaveformGetEvents方法350によって呼び出されるタップ波形InputChannelプロセスTapwaveformInputChannelProcessは、タップ信号の波形の形状を比較し、既知の形状を認識し、キーボード上のタップ位置の座標を計算し、入力イベントを生成する。複数の使用環境における表面上の位置毎に、典型的な振動波形が記録及び記憶される。1つの実施形態では、記録された波形の各々を分析し、完全な波形ではなく、波形の幾つかの固有の特性を記憶する。ユーザが起こすタップの発生の各々の特性を、データベース中の各キーに対する記憶されている特性と比較し、最も良く整合するものを見付ける。各タップ位置を一意に識別するのに寄与できる波形の特性は、波形の最小ピークと、波形の最大ピークと、波形の減衰率と、波形の標準偏差と、波形の高速フーリエ変換と、波形の平均周波数と、波形の平均絶対振幅と、他のものとを含むが、これらに制限されるわけではない。ステージ3では、入力イベントと、時間的及び空間的に関係するイベントとを相関させる。時間的及び空間的に関係付けられるイベントは、作動の位置と、内容と、期間とに対する相互の一致に基づいて、キーの作動を定める。図2Dは、入力イベントを相関させるソフトウェアアルゴリズムの実施形態のフローチャートを示している。システムは、InputCorrelationManagerによって制御され、ICORCorrelationInputEvents方法400によって呼び出される。相関付けは、タッチと、押下と、タップ入力チャネルとによって生成される、関係付けられた入力イベントを、1つの相関入力イベントの中に合体させるcoalesce。相関付けは、6つの個別の段階で進む。ブロック410に示されている相関付け段階1は、入力イベントを分析して、履歴において幾つのイベントが利用可能であり、相互からの相対時間差がどれだけであるかを決定する。ブロック420に示されている相関付け段階2は、可能性のある組み合わせであるイベントのペアを生成する。ブロック430に示されている相関付け段階3は、計算されたデュプルからなる組から、タプルtupleを生成する。ブロック440に示されている相関付け段階4は、候補のタプルとデュプルとからなる組を減らして、十分に反射するようにreflexivelyサポートしていない組み合わせのうちの何れかを削除する。ブロック450に示されている相関付け段階5は、新たな相関入力イベントをタプルからなる組から生成し、タプルを構成する個々の入力イベントを、1つの相関入力イベントに置き換える。InputCorrelationManagerプロセス400は、InputEventManagerから履歴の入力イベントのデータを要求し、入力イベントの履歴から冗長のイベントを削除し、新たな相関入力イベントを生成する。相関イベントに寄与した全ての入力イベントは、入力イベントの履歴データベースから取り除かれる。図5A乃至5Dは、相関プロセスを詳しく示している。図5Aは、段階2の入力イベントのペアリングpairingアルゴリズムの実施形態を示している。RunPairingRule方法420は、ブロック421において、入力イベントのペアの組み合わせからなる組を生成し、次に、一連のルールを適用して、相関ペアとしての潜在性について、それらを評価する。ペア相関のためのルールは、次のものを含む。時間の相関付けでは、イベントが相互に時間的に近いかをチェックして確かめる。キーの共通部分の相関付けでは、入力イベントが候補キーを共有するかをチェックして確かめる。チャネルの相関付けでは、イベントを発生した入力チャネルが互換性をもつことをチェックして保証する。ルールの実行結果を、ペアに対する総スコアの中に論理的に組み合わせる。スコアが閾値を越えている場合は、デュプルは、有効な相関ペアであり、ブロック428において、デュプルの出力リストに加えられる。図5Bは、段階3の入力イベントの組み合わせアルゴリズムの実施形態を示している。ブロック430では、ペアリングアルゴリズム420によって生成されたデュプルを、3つ以上のイベントの組み合わせの中に更に組み合わせて、一連のタプルを作成する。ブロック432では、各タプルを評価し、タプル内の入力イベントの組み合わせが、寄与している各デュプルを十分に反射していることを確実にする。例えば、3つのイベントAと、Bと、Cがあるとすれば、相関デュプルABと、BCと、ACが存在する場合に、タプルABCは有効である。ブロック436では、タプルの評価の結果を、有効なデュプルのリストに付加する。ブロック437では、元のデュプルを付加し、ブロック438では、可能性のある全ての相関イベントのリストにおいて、非相関イベントを1つにする。より多数の寄与イベントを有するタプルは、より強い相関関係を有し、従って、より高いスコアを有する。図5Cは、段階3の入力イベントの削減アルゴリズムの実施形態を示している。タプルと、デュプルと、単集合singletonとのイベントは、入力イベントの信頼度と相関の強度に基づいて割り当てられた数値のスコアを評価される。ブロック442を参照。入力イベントが2つ以上のタプル又はデュプルのメンバである場合は、最も高いスコアを有するタプル又はデュプルが、イベントを獲得し、より低いスコアを付けられたタプル又はデュプルを、候補からなる組から削除する削減する444。ブロック444では、残りのタプルと、デュプルと、単集合とのイベントからなる組が、共有する1つの入力イベントを含まず、任意の他の組み合わせからの重複しない入力イベントのメンバ構成を有するまで、削減し続ける。次に、残りのタプルと、デュプルと、単集合とのイベントを、降順のスコアで分類する446。図5Dは、段階4の相関入力イベントの生成の実施形態を示している。ブロック452では、削減されたタプルと、デュプルと、単集合とのイベントからなる組の中の要素が、後の処理のために遅らせる制約を有する場合に、それらを放出releaseできるかどうかを確かめるために、各要素をテストする。ブロック452に通ったpassものは、ブロック454において、新たな相関入力イベントに変換される。タプルと、デュプルと、単集合とのイベントに寄与した元の入力チャネルの発生された入力イベントは、ブロック456において、処理済みとしてマークを付され、従って、それらは再び処理されない。相関イベントの結果として得られた組は、ユーザによるキーの作動に対する真の候補を表わす。ステージ4では、相関イベントのストリームを分析して、望ましくないイベントを取り除き、イベント内の曖昧なキー候補を決める。図2Eは、入力イベントをフィルタにかけるソフトウェアアルゴリズムの実施形態のフローチャートを示している。CPU110は、InputFilterManagerによって制御され、IFMFilterInputEvents方法500によって呼び出される。InputManagerは、InputFilterManagerを呼び出して、望ましくない相関入力イベントを入力イベントのストリームから削除し、イベント内の候補キーを削減して、1つのキーにする。InputFilterManagerは、ホストコンピュータのオペレーティングシステムに転送するのに適したキー作動コードに処理するために、最終的な一連の入力イベントを、KeyStateManagerに渡す。実施形態では、フィルタのルールを相関入力イベントの組に連続的に適用するために、ルール実行エンジンを実施する。各フィルタは、入力イベントの組の特定の状況に作用し、スコアを変更し、InputManagerシステムの長期間の状態longtermstateを更新するルールとして定義される。フィルタは、入力イベントからなる組の全体にアクセスし、処理を検討することからイベントを取り除く、及び/又は、イベント内の候補キーからなる組を削減することができる。更に、フィルタは、長期間の傾向と振る舞い分析とを支援して、入力マネージャの長期間の状態にアクセスして更新することができる。長期間の状態は、入力イベントの処理の他のステージにフィードバックする。InputCorrelationManagerによって計算された相関入力イベントからなる組は、IFMFilterEventsブロック500を通じて、InputFilterManagerに渡される。ブロック520では、ルールエンジンが、フィルタのルールを入力イベントの組の中の各要素に、ルールの登録順に適用する。ルールの結果は、ブロック530において、フィルタにかけられた入力イベントに適用される変更の組であり、ブロック540において、これは次の処理ステージに出力される。実施形態では、キーの入力についての特別なケースに対処する幾つかのルールを実施する。実施形態は、垂直タッチフィルタのルールを含む。垂直タッチフィルタは、垂直に隣接する候補キーで、イベントに対するキーの確率を調節する。ユーザがホームローhomerowよりも上のキーをタイプするときに、指が伸びて、キーボードの外に位置し、しばしば、ホームローよりも上の目的のキーと、その直ぐ下のホームロー上のキーとの両者を作動させる。フィルタは、その状況の特徴を検出し、タイプされる可能性の最も高いものとして、垂直に隣接するものの中の最も上の候補キーのスコアを上昇させるboost。垂直に隣接するキー間におけるミスタイプが、より下のキーに対する強い信号に打ち勝たないように、上昇係数は適切にスケーリングされる。従って、上昇は、より上のキーの境界に部分的なミスタイプをしたときに、より上のキーに有利に働くfavorのに十分小さいが、より下のキーの選択を妨げない。実施形態は、次のキーのフィルタnextkeyfilterを含む。次のキーのフィルタは、曖昧な候補キーを有するイベントについて、キーの確率を調節する。フィルタは、簡単な確率データベースを使用する。簡単な確率データベースは、現在の対象言語targetlanguageにおける任意の所定の文字に対して、その任意の所定の文字に続く可能性の最も高いキーを定める。現在の言語は、キーボードの対象公用語のキーのレイアウトによって特定される。次の文字の確率は、対象言語の単語又は文法構造と関係がない。それは、対象言語における文字のペアの確率分布である。1つの実施形態では、セットダウンフィルタは、ユーザがキーボードのホームロー上の載せる位置restpositionに手を置く結果として生じる入力イベントの特徴を検出する。セットダウンは、キーボードを使用していない期間の後で、又は、機敏なactiveタイピングにおける休止中に行われ得る。フィルタは、セットダウン中に指がホームローのキーと接触したときに生じる望ましくないキーの作動を削除する。セットダウンフィルタは、入力イベントのキューと入力マネージャの長期間の状態とを更新し、それらに依存する、マルチサイクルフィルタmulticyclefilterである。セットダウンフィルタは、2つの異なる段階で処理する。段階1は、検出段階であり、相関入力イベントの組を分析し、2つ以上の同時のホームローイベントを探す。2つ以上の同時のホームローイベントは、時間的に近い、ホームローに対する複数のタッチ作動を含む。セットダウンが検出されると、その後の処理サイクルと、キーの作動へのイベントの変換とに対して、長期間のセットダウン状態がアサートされる。セットダウン状態がアサートされると、セットダウンが完結するまで、全ての入力イベントが延期されるdefer。段階2は、完結段階completionphaseであり、延期された及び新たなイベントを分析し、イベントがセットダウンに加わるのを適格とするか又は不適格とする。セットダウンの終了は、セットダウンに対する最大期間を超えるか、セットダウン内における個々のイベント間の最大期間ギャップ閾値を超えるか、又は、非ホームローの入力イベントを検出することのうちの何れかによって決定される。セットダウンの終了条件のうちの何れかが満たされると、セットダウン状態はフィルタによってクリアされる。任意の延期イベントは、セットダウンの一部として取り除かれるか、又は処理のために解除される。セットダウンの完結が、ホームローイベントがセットダウンに加わるのを不適格とする終了を検出することがあるので、セットダウンの検出は、イベントが取り除かれる結果に常になるわけではない。1つの実施形態では、タイピングスタイルフィルタtypingstylefilterは、InputManagerの長期間の状態と入力イベントとを分析し、現在のユーザのタイピングスタイルがどんなものであるかを決定する。次に、タイピングスタイルフィルタは、様々な制御パラメータと長期間の状態の値とを設定する。これらは他のフィルタにフィードバックする他のフィルタによって使用される。他のフィルタは、セットダウンと特別なケースとを含む。1つの実施形態では、マルチプルモディファイヤフィルタamultiplemodifierfilterは、ミスタイプによる2つ以上のモディファイヤキーの偶然の作動を防ぐ。モディファイヤキーは、一般に、キーボードの周囲を占め、特にタッチタイピストに対して、適切に動作し難くする。マルチプルモディファイヤフィルタは、モディファイヤキーを用いたイベントに対するキーの確率を調節し、最もよく使用されるモディファイヤとして、シフトキーに有利に働き、めったに使用されないキーとして、キャップスロックキーcapslockkeyに対するスコアを下げる。調節されたスコアは、シフトキーに手を伸ばしたときの不注意によるキャップスロックの作動の多くを無くす。KeyStateManagerによって制御され、KSMCalculateKeyState方法600によって呼び出される、ステージ5では、フィルタにかけられたイベントのシーケンスを、キーのアップダウン作動のストリームに変換する。次に、これはホストコンピュータに送られる。ここに記載されている実施形態の焦点は、キーボードの応用に関するが、このシステムを何等かのタイプのタッチスクリーンデバイスに応用するのにも成功し得ることが、当業者に分かるであろう。本発明の好ましい実施形態を例示して説明したが、本発明の意図及び範囲から逸脱することなく、多くの変更を行なうことができる。従って、本発明の範囲は、好ましい実施形態の開示によって制限されない。その代わりに、本発明は、請求項を参照することによって全体的に決定されるべきである。排他的な所有権又は特権に対する権利を主張する本発明の実施形態は、請求項によって定められる。