2016-07-27 11 views
0

の停止を見つける:私は真ん中の部分の開始と終了を見つけるための方法を見つけるしたいと思います enter image description hereMathWorks社のMATLAB - 私はこのようになります信号持ち始めると面白い信号

を。

私がしたことは、0.5以上の値が定数==> 1であることです。行内に何度も1が見つかると、それは私の信号であることを意味します...しかし、それは良い方法ではありません私は推測する!まず、私の「閾値」は毎回0.5ではないでしょう。それを行うにはもっと良い方法があると確信しています。

あなたたちはそのことについて、いくつかのドキュメンテーションやアイデアをお持ちの場合...

はどうもありがとうございました。

+0

信号ファイルの例を挙げることはできますか?あなたのすべての信号に共通する特徴は何ですか? – Finn

+0

https://www.dropbox.com/s/lm5pm9232yphwwb/acceleration.txt?dl=0ここでは、信号がある.txtファイル(Fe = 101Hz)です。信号は、走っている人の加速です。一般的な特徴は、5Hzでローパスフィルタを使用して信号をフィルタリングすると、正弦波の繰り返しが存在することです。 @Finnありがとう – YLM

+0

この質問は、実際のプログラミングよりもDSPに関連するように思われるので、おそらくこれはhttp://dsp.stackexchange.com/でより良い答えを得るでしょう。 Matlabの知識を持った人がいなければならないし、Matlabで書かれたコードを使っている(そして答えのサンプルコードを要求しているようだが)、それはDSPに関する質問ではないというわけではない。 – patrik

答えて

1

他の人が述べたように、それはDSPの質問の詳細ですとdsp.stackexchange.comがpropablyあなたのより良い答えを与えるだろうが、それまで、これは役立つかもしれない:

data=csvread('acceleration.txt',1) 

threshold_y=max(data)*0.5; %Thanks to GameOfThrows 
thershold_x=101; %how many zeros can be between to ones to still count as continuous 
addframe=50; %if you want a little bit of data before and after the active area 
logic_index=data>threshold_y; 
num_index=find(logic_index); 
distance=diff(num_index); 

gaps=[1 ; find(distance>thershold_x)]; %find the gaps bigger than your threshold 
final_index=false(length(data),1); 

for i=1:length(gaps)-1 %add ones between 
    final_index(num_index(gaps(i)+1)-addframe:num_index(gaps(i+1))+addframe)=true; 
end 
plot(x,data,x,final_index); 

それはあなたがdecribed何基本的にあなたの質問ではなく、領域の中のゼロを扱うことが追加されています。 @GameofThrowsに感謝します。

+0

素晴らしい!ありがとう、それは完全に動作します:)それは本当に良い方法です! @Finn – YLM

関連する問題