# How to calculate the duty cycle of a time signal in a for loop?

13 ビュー (過去 30 日間)
Susan 2023 年 3 月 14 日
コメント済み: Susan 2023 年 3 月 16 日
Hi All,
I have multiple time signals and like to compute their duty cycles automatically within a "for loop". For example the duty cycle of the following signal is 74.29%. The signal is attached and the sample rate is 15360000.
Assume I have a bunch of these signals. How can I calculate the ratio of the pulse width (duration of the on state) to the pulse period (the total duration of an on-and-off state) for each signal in a for loop?

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

### 採用された回答

Walter Roberson 2023 年 3 月 14 日
wr = real(waveform);
wi = imag(waveform);
subplot(2,1,1); plot(wr); ylabel('real');
subplot(2,1,2); plot(wi); ylabel('imag');
mr = movmedian(wr, 5);
mi = movmedian(wi, 5);
mean(abs(mr)<0.01) * 100
ans = 74.2301
mean(abs(mi)<0.01) * 100
ans = 74.4255
##### 9 件のコメント7 件の古いコメントを表示7 件の古いコメントを非表示
Walter Roberson 2023 年 3 月 15 日
We can tell from the graphs that the only part of the signal this is "repeatable" is the zeros.
You can do things like
wr = real(waveform(:).');
wi = imag(waveform(:).');
stopsr = strfind([maskr 0], [1 1 0]) + 2;
ans = 77.2091
stopsi = strfind([maski 0], [1 1 0]) + 2;
ans = 77.2091
This measures for the signal starting from end of the second stretch of zeros (so skipping the first pulse). But you can see it made little difference (gave a lower duty cycle in fact.)
To go much beyond that you would need a more explicit definition of what should be skipped.
Susan 2023 年 3 月 16 日
@Walter Roberson I see. Thanks again for your help. Appreciate it.

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

### カテゴリ

Help Center および File ExchangePulse and Transition Metrics についてさらに検索

### Community Treasure Hunt

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

Start Hunting!

Translated by