Filter noise in logical vector
조회 수: 1 (최근 30일)
이전 댓글 표시
I have a logical vector that is meant to run over time (ms). It looks like this:
0000000000000110000000000001111111111111111111111111111111111111100000000000000000001000000000
'Time in ms--->'
In this example I only want a signal that ran 'true' longer then 3ms. The rest I want filtered back to zero's becuase I still need to plot it against time.
How should I do this?
댓글 수: 0
답변 (2개)
KALYAN ACHARJYA
2020년 1월 23일
Do Modification: Just Hint here (May Be)
loop
data_generation(i)=present_data;
if present_data==1
tic
while toc==
end
end
댓글 수: 0
Agustin Canalis
2021년 5월 15일
편집: Agustin Canalis
2021년 5월 15일
An interesting choice is to use movmin and movmax, which work along a sliding window in your vector:
A = [0 0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 0 1 0 1 0 0]
window_size = 3 % or scale to your needs
B = movmin(A,window_size)
C = movmax(B,window_size)
imshow([A;B;C]) % This is just to graph the result
Here's the result:
The idea is that movmin "triggers" when the sliding window contains 3 consecutive 1's, otherwise the minimum is 0.
However, this also clips useful portions of your signal at the start and end, which is why I have to use movmax to add them back.
Because it's vectorized I guess the performance is better than in a loop, but I haven't tested it.
Cheers!
댓글 수: 0
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!