How do I count the number of times zero is being crossed by a signal?

15 ビュー (過去 30 日間)
Rajesh Siraskar
Rajesh Siraskar 2020 年 1 月 8 日
編集済み: hossein 2022 年 2 月 2 日
Hi,
I am trying to build a control system and I want to count the oscillations in a time-span of say 100 seconds.
Can I count the number of times a signal crosses zero (probably using MATLAB's zer-crossing detection algo.) to count the oscillations?
I want it to happen within Simulink - is there any other better way? I just want a count say 10, that tells me there were 10 oscillations.
Oscilltions.PNG

採用された回答

Fangjun Jiang
Fangjun Jiang 2020 年 1 月 8 日
If you have the DSP toolbox, there is a Zero-Crossing counter block. If not, you can compare the signal with zero, which creates a square wave signal. Use the rising and falling edge to trig an triggered subsystem, inside which adding a Counter block.
  8 件のコメント
Fangjun Jiang
Fangjun Jiang 2020 年 1 月 9 日
I believe continuous solver should also work. You just need to add DataTypeConversion blocks to deal with those data type mismatches.
Rajesh Siraskar
Rajesh Siraskar 2020 年 1 月 10 日
Make sense - will try. Thanks a lot for your guidance.

サインインしてコメントする。

その他の回答 (1 件)

hossein
hossein 2022 年 2 月 2 日
編集済み: hossein 2022 年 2 月 2 日
You can count the number of times the product of the signal and the shifted signal becomse negative. The below formula gives the number of crossings I guess. I am not sure if this is bug free.
"Sig" is your signal data vector here.
sum(sign((Sig.*[Sig(2:end),Sig(end)]))<0)

製品


リリース

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by