6

信号データの移動平均をとって、matlab で独自のローパス フィルターを作成しました。しかし、移動平均がローパス フィルターを作成する場合、ハイパス フィルターの方程式を正確にどのように設計すればよいのでしょうか? ローパスに平均を使用することに関する直感を理解しています(高周波数はゼロに平均化されますが、低周波数は信号値に近い数値に平均化されます)。

しかし、ハイパスフィルターに使用される式はありますか?

4

2 に答える 2

9

そのための方程式はたくさんあります!おそらく最も単純なものは、1 サンプル遅延差関数です。

y[n] = x[n] - x[n-1]

または、その Z 変換を取る

H(z) = 1 - z^-1

はフィルターH(z) = Y(z) / X(z)のシステム方程式です。

MatPlotLib (Python) で AudioLazyを使用すると、入力することで、このハイパス フィルターの周波数応答プロットを表示できます。(開示:私はAudioLazyの作者です

from audiolazy import z
(1 - z ** -1).plot().show()

単純なハイパス フィルター

信号にも適用できます

from audiolazy import z, Stream
filt = 1 - z ** -1
sig = Stream(1, 3, 1, -1, -3, -1) # Periodic signal
filt(sig).take(7)

最初の 7 つのサンプルの結果:

[1.0, 2, -2, -2, -2, 2, 2]

GNU Octave (または MatLab) でも同じことができます。

filter([1, -1], [1], [1, 3, 1, -1, -3, -1, 1])

どちらが返されますか

[1, 2, -2, -2, -2, 2, 2]

これは、この例では[-3;3]振幅範囲から範囲に減衰する 6 サンプル周期信号の FIR フィルターです。[-2;2]12 サンプル信号 (低周波数) で試す場合:

filt = 1 - z ** -1
sig = Stream(1, 2, 3, 2, 1, 0, -1, -2, -3, -2, -1, 0)
filt(sig).take(13)

結果は別の方形波になりますが、[-1;1]範囲内です。正弦波で同じことを試してください。これは周波数応答にとって意味があり、同じ周波数でフィルターの出力として別の正弦波を保持する必要があります。

ナイキスト周波数で共振器を使用して、IIR フィルターを提供することもできます。さまざまなニーズに合わせて、これを行うことができる他のフィルター設計がいくつかあります (例: バターワース、チェビシェフ、楕円)。最小位相、線形位相、フィルターの安定性、およびリップル振幅の最小化は、フィルターの設計中に設定できる設計目標 (または制約) の一部です。

于 2013-08-28T00:17:06.933 に答える
8

元のデータからローパス フィルターを差し引くことで、非常に単純なハイ パス フィルターを作成できます。低エネルギー成分を差し引くと、高エネルギー成分が残り、ハイパスフィルターが作成されます. うまくいけば、これは直感的です。

data = %some data here
low_pass_data = %calc low pass here
high_pass_data = data - low_pass_data

@HD にははるかに広範な回答がありますが、OP には複雑すぎる可能性があることに注意してください。

于 2013-08-28T02:58:59.830 に答える