Skip to content

フィルタリングを行うコードに誤りがあります #1

Description

@fleneindre

`

  def __func_A15(self, a0, a1, a2, b0, b1, b2, input_data:list[float])
            output_data = []
    
        # 1つめ
        k1 = (b0 * input_data[0]) / a0
        output_data.append(k1)
        
        # 2つめ
        k2 = (-a1 * output_data[0] + b0 *
              input_data[1] + b1 * input_data[0]) / a0
        output_data.append(k2)
        
        # 3つめ以降
        for k in range(2, len(input_data)):
            value = (-a1 * output_data[k-1] - a2 * output_data[k-2] + b0 *
                     input_data[k] + b1 * input_data[k-1] + b2 * input_data[k-2]) / a0
            output_data.append(value)
        
        return output_data

`

ここで、__func_A15 は入力データを再度 input_data[k-2] にフィルタリングすることで、過去の出力データを復元する。 output_data[k-1] は output_data[k-3] と output_data[k-2] に依存するはずで、これは数学的に正しくない。これらのフィルタは、それ自体がさらに過去のデータ(理論的には無限に過去のデータなので、「無限応答フィルタ」 と呼ばれる )に依存しているのです。

これを修正するために、各フィルタは、それが効果的に出力するデータをメモリに保持する必要があります。過去の output_data は、フィルタリングされる軸に固有である必要があります。

実用情報

フィルタリングが適切に行われていれば、結果として得られる周波数特性は低周波をフィルタリングし、一定のオフセットは実際には0Hzの信号であるため、フィルタ自体で除去されるため、デバイスに調整ボタンは必要ないはずである。

したがって、校正手順として、最初の3軸加速度サンプルのみをオフセットとして使用することができます 。(平均を実行する必要はありません)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions