How can I get the maximum difference in the specific range?

1 回表示 (過去 30 日間)
horizon
horizon 2019 年 5 月 8 日
コメント済み: Walter Roberson 2019 年 5 月 8 日
I am trying to find the value of the maximum difference of the wave, but I would like to eliminate some part of the graph.
In this case, I would like to delete the range from 0.0 to 0.5 and get the maximum value from 0.5 to 3.
I have no idea how to execute the above process.
t = 0:1/1000:3;
q1 = sin(2*pi*7*t).*exp(-t/2);
plot(t,q1)
[up,lo] = envelope(q1,100,'analytic');
hold on
plot(t,up,'-',t,lo,'--')
hold off
envelope(q1,300)
maxDiff = peak2peak(up-lo);
disp(maxDiff)
  4 件のコメント
Walter Roberson
Walter Roberson 2019 年 5 月 8 日
data(data >= 0 & data <= 0.5) = [];
horizon
horizon 2019 年 5 月 8 日
Thank you for your answer.
When I opened the array t, it has these consequtive data.
t = [0 0.00100000000000000 0.00200000000000000 0.00300000000000000 0.00400000000000000 0.00500000000000000 0.00600000000000000 0.00700000000000000 0.00800000000000000 0.00900000000000000 0.0100000000000000 0.0110000000000000 0.0120000000000000 0.0130000000000000 ....]
I can understand that your answer substitutes data range from 0 to 0.5 null, but in this case, what does it applied to data?
data(data >= 0 & data <= 0.5) = [];

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

採用された回答

KSSV
KSSV 2019 年 5 月 8 日
Let t, data be your time and data. You have two options:
First option
% Remove the specified data, this will reduce the length of your arrays.
idx = data >= 0 & data <= 0.5 ;
t(idx) = [] ;
data(idx) = [] ;
Second option
% Make the unwanted data to NaN, this will not change the length of the array
idx = data >= 0 & data <= 0.5 ;
data(idx) = NaN ;
  3 件のコメント
horizon
horizon 2019 年 5 月 8 日
t = 0:1/1000:3;
q1 = sin(2*pi*7*t).*exp(-t/2);
% Make the unwanted data to NaN, this will not change the length of the array
for idx = (1:20)-1
t(idx) = nan;
q1(idx) = nan;
end
plot(t,q1)
[up,lo] = envelope(q1,100,'analytic');
hold on
plot(t,up,'-',t,lo,'--')
hold off
envelope(q1,300)
maxDiff = peak2peak(up-lo);
disp(maxDiff)
If I write the above, since idx is array index and it is required to reduce data for y-axis. However, I got an error message.
Array indices must be positive integers or logical values.
Error in cutSentwave (line 6)
t(idx) = nan;
Walter Roberson
Walter Roberson 2019 年 5 月 8 日
Where did you obtain the line
for idx = (1:20)-1
? I do not see anyone having suggested that.
MATLAB indices start with 1. Your 1:20 would be [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]. Then you subtract 1 to get [0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19] . Then you try to use that first value, 0, as an index, which is a problem.
Perhaps you are accustomed to Python, which indexes from 0 but has the odd range() construct that generates 0 to N-1 .

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

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeProgramming についてさらに検索

製品


リリース

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by