Filter noise in logical vector

조회 수: 1 (최근 30일)
Randy Kwa
Randy Kwa 2020년 1월 23일
편집: Agustin Canalis 2021년 5월 15일
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?

답변 (2개)

KALYAN ACHARJYA
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

Agustin Canalis
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!

카테고리

Help CenterFile Exchange에서 Matched Filter and Ambiguity Function에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by