Интегрирующая часть сигнала в Matlab (или Octave) - PullRequest
0 голосов
/ 27 апреля 2020

Мне нужно выполнить численное интегрирование смещенной синусоидальной волны или синусоидальной волны с добавленным экспоненциальным затухающим сигналом. Это первичный сигнал (ip), записанный в matlab со следующим кодом

    for k=1:1:m 
          t(k)=k*dt;     
          ip(k) = Ik*(exp(-t(k)/T1)-cos(w*t(k)));
          is(k) =(ip(k)/CT);
          if trapz(is) > AreaValue
                is(k) = 0;
          end
    ...

Однако вторичный сигнал "is" не является простым масштабированием, как в строке 4, но имеет некоторые дополнительные ограничения. Мне нужно сравнить размер области ниже кривой с фиксированным значением (например, AreaValue). Я думал об использовании функции trapz (есть).

Проблема, которую необходимо решить, заключается в следующем. Когда область под вторичным сигналом становится больше, чем «например, AreaValue», вторичный ток должен падать до нуля до следующего пересечения нуля. Затем процесс интеграции должен начаться заново, учитывая, что переход от положительного к отрицательному или наоборот. Если значение AreaValue не достигнуто, следующие переходы через ноль не должны иметь значения. Ожидается, что эти интервалы будут длиннее и длиннее, поскольку происходит затухание экспоненциального сигнала.

Итак, подведем итоги. Интеграция должна начинаться до достижения значения AreaValue и находиться в режиме ожидания до следующего перехода через ноль. Затем он должен начинаться снова с нуля и не должен останавливаться до тех пор, пока снова не будет достигнуто AreaValue.

Если у кого-то есть идея, как запрограммировать это на matlab или octave, я был бы признателен. Мой код делает это только для первой половины цикла, но мне нужно было бы расширить его, чтобы он работал для всех циклов до полного затухания сигнала.

Спасибо

...