2011-08-04 10 views
4

加速度計の値をハイパスフィルタリングするために、下の方程式にどのように到達するか説明できますか?私は数学的派生を必要としません、それの直感的な解釈だけで十分です。iOS - 加速度計のハイパスフィルタの式

 
    #define kFilteringFactor 0.1 
    UIAccelerationValue rollingX, rollingY, rollingZ; 

    - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { 

     // Subtract the low-pass value from the current value to get a simplified high-pass filter 

     rollingX = (acceleration.x * kFilteringFactor) + (rollingX * (1.0 - kFilteringFactor)); 

     rollingY = (acceleration.y * kFilteringFactor) + (rollingY * (1.0 - kFilteringFactor)); 

     rollingZ = (acceleration.z * kFilteringFactor) + (rollingZ * (1.0 - kFilteringFactor)); 

     float accelX = acceleration.x - rollingX; 
     float accelY = acceleration.y - rollingY; 
     float accelZ = acceleration.z - rollingZ; 

     // Use the acceleration data. 

    } 

答えて

11

rollingX、rollingY、rollingZ値は、関数の呼び出し間で永続的です。使用前のある時点で初期化する必要があります。これらの「ローリング」値は、ローパスフィルタリングされた入力値(「移動平均」とも呼ばれます)の瞬間値から減算され、ハイパスフィルタリングされた出力を与えます。つまり、移動平均から現在の偏差が得られます。

追加説明

移動平均は、単に粗ローパスフィルタです。この場合、単純なMA(移動平均)ではなく、ARMA(自己回帰移動平均)として知られています。 DSP用語では、これは、非再帰(FIR)フィルタではなく、再帰(IIR)フィルタです。しかし、すべての用語にかかわらず、はい、それを平滑化関数と考えることができます。 " - すべての高周波エネルギーを「平滑化」し、信号の平均値のゆっくり変化する推定値を残します。この瞬間的な信号から平滑化された信号が差し引かれたコンテンツ、つまり高周波数のものになるので、ハイパスフィルタが得られます。high_pass_filtered_signal = signal - smoothed_signal

+0

ありがとうございました。私は "...入力値の低域フィルタリングされたバージョンのみ..."と "...ハイパスフィルタリングされた出力を与える"の理解には苦労しています。1 - kFilteringFunctionが存在し続けるので、ソートの平滑化機能のように感じますローリング値に適用されます。とにかく、あなたが何を意味しているかが分かれば、あなたの説明からいくつかの良い情報を得ることができるように感じます。 – Boon

+1

移動平均とフィルタリングなどの希望の明確な説明については、上記の「追加の説明」を参照してください。 –

0

ローパス信号を計算して現在の値を減算することです。

square waveは、5と10の2つの値をとります。つまり、5と10の間で振動します。平均を見つける(7.5)。ハイパス信号は、現在の値から平均値、すなわち10-7.5 = 2.5、または5-7.5 = -2.5として計算される。

ローパス信号は、過去のローパス値の90%に現在の値の一部を加算することによって、過去の値に積分することによって計算されます。

14

その他の回答は正しいが、ここでは簡単な説明がある。 kFilteringFactor 0.1では、現在の値の10%を取り、前の値の90%を追加しています。したがって、値は以前の値と90%の類似性を保持し、突然の変更に対する抵抗力が増します。これによりノイズが低減されますが、信号の変化に反応しにくくなります。ノイズを減らし、応答性を保つには、例えば、Complementary、Kalmanのような、ほんの些細なフィルタが必要です。

+0

ありがとう、かなり直感的な説明。ハイパス・フィルターという用語が説明の文脈にどのように当てはまるか、そしてローパス・フィルターがあなたの説明の行を使ってどのようにふるまうかを説明できますか? – Boon

+0

それは素晴らしい説明です、ありがとう@ヤノ! – theTRON

+0

ComplementaryとKalmanに言及してくれてありがとう。それらは私のために役立ちます。 – mattorb