リアルタイムでトレンド分析

私は、除去すべき線形傾向を有する特定の信号を有する:

enter image description here

問題は、信号をリアルタイムで処理する必要があることです(サンプリングレートは20Hzです)。 私が20サンプルのウインドウごとにデントナンバーを適用し、デントナリング結果を連結した場合、信号は中断されます。

ウィンドウごとにリアルタイムでデータを捕捉し、それを連結して最終的な信号が意味をなされるような効率的な手法があるのだろうか?それとも効率的ではない古いデータで新しく入ってくるすべてのデータを取り除くべきなのでしょうか?

MATLABの detrend を使用してシグナル全体を取り出し、オフラインで処理することは正しく機能します。この問題は、シグナルを特定の固定サイズのウィンドウに分割し、それぞれに detrend を適用すると発生します。

ありがとう、 マイク

1
幸運、マイク?
追加された 著者 alumb,
SE.DSPはあなたの質問やその答えがあなたからの何らかの行動(編集、更新、投票、受諾など)を必要とするかもしれないという思い出させる信号を付けて、幸せな新年2017を願っています。
追加された 著者 Laurent Duval,

3 答え

私は、これを行うために DCブロックフィルタを使用して成功しました。

下の青いグラフは、騒々しい傾向を示しています。赤いグラフは、DC阻止フィルタが適用されていることを示しています。

以下はそれを実装するためのシラバスのコードです。 Scilabはmatlabに非常に近いですが(かなりです!)

enter image description here

// 25189
N=1024;
t=[0:N-1];
trend = 0.1*t;
noisy_trend = trend + 10*rand(1,1024,"normal");

clf
plot(t,noisy_trend)
dc_blocked = [];
for idx = [2:N]
    dc_blocked(idx) = noisy_trend(idx) - noisy_trend(idx-1) + 0.9*dc_blocked(idx-1)
end
plot(t,dc_blocked,'r')
1
追加された
面白い。私は私の信号でそれを確認します。私はこれが私が探しているものだと思います。
追加された 著者 Jason Sperske,

トレンドの性質は何ですか?

傾向がDCドリフトによるものである場合(おそらく、信号取得装置のため)、0.1〜0.5Hz程度の単純なハイパスフィルタで除去することができます。これにより、リアルタイムの後処理が不要になります。

DCドリフトは、最初の図ここ

enter image description here

1
追加された
信号は次のようになります。 walterbressert.com/Images/AboutWB/interview2.gif。そして、ハイパスフィルターは、仕事をしていませんでした。
追加された 著者 Jason Sperske,
SE.DSPはあなたの質問やその答えがあなたからの何らかの行動(編集、更新、投票、受諾など)を必要とするかもしれないという思い出させる信号を付けて、幸せな新年2017を願っています。
追加された 著者 Laurent Duval,

Let me suggest you to perform the filtering in sliding blocks, not separate. Assume you want to filter the signal $\{ x_i\}$. At each index $k$, you can estimate the linear trend on the block $$X_k=[ x_{k-K_l},\ldots,x_k,\ldots, x_{k+K_r}],$$ taken at indices $$I_k=[ {k-K_l},\ldots,k,\ldots, {k+K_r}],$$ in the form $\beta_k x + \alpha_k$, and remove $\beta x_k + \alpha$ from $x_k$. If $$ denotes the average of the block $Y_k$, then $\beta_k = \frac{ - }{-^2}$, and $\alpha_k = - \beta_k $. All the averages $$, $$, $$ and $$ can be computed recursively with few computations.

LOESSまたはLOWESSの平滑化とも呼ばれるローカル線形回帰の実装になります。

たとえば、 Hodrick-Prescottフィルタのような代替案を考えることができます。

0
追加された
ありがとう、私はこれを試してみます。 HPフィルタの唯一の問題は、トレンドを取り除くだけでなく、信号を滑らかにすることができることです。望ましくない平滑化は、0.05Hzのハイパス2次IIRフィルタを信号に適用したときにも現れます。
追加された 著者 Jason Sperske,
問題は、ハイパスフィルタリングを行うよりも悪い場合です。データ全体にmatlabの恩恵を与えることは、データを平滑化するようには見えないか、少なくとも目立たない。私はあなたの提案をまだ試していない、私はそれがデータを円滑にすると期待する必要がありますか?
追加された 著者 Jason Sperske,
ところで、私は本当に信号からトレンドを取り除くことがなぜそれを滑らかにすべきかわかりません。
追加された 著者 Jason Sperske,
私はHPの大ファンではなく、これを多くの選択肢の1つとして言及したかっただけです。私はMatlabで上記のソリューションを実装することを開始しました。それは動作するようです。ところで、とにかくスムージング効果があります。
追加された 著者 Laurent Duval,
「スムージング」と「トレンド」はあいまいに定義された概念なので、データとトレンドとノイズの明確で健全なモデルと、それを分離することを前提としていない限り、私が述べていることでは、すべてがやや線形なので、一種の適応フィルタが得られます。固定ハイパスフィルタよりも優れている可能性があります
追加された 著者 Laurent Duval,