Анализ функции описания нелинейных моделей Simulink

Этот пример показывает, как использовать оценку частотной характеристики, чтобы выполнить анализ функции описания синусоидального входа для модели с нелинейностью насыщения.

Фон согласно анализу функции описания

Анализ функции описания является широко известным методом, чтобы изучить частотную характеристику нелинейных систем. Это - расширение линейного анализа частотной характеристики. В линейных системах передаточные функции зависят только от частоты входного сигнала. В нелинейных системах, когда определенный класс входного сигнала такой, когда синусоидальное применяется к нелинейному элементу, можно представлять нелинейный элемент функцией, которые зависят не только от частоты, но также и от входной амплитуды. Эта функция упоминается как функция описания. Анализ функции описания имеет широкую область приложений от анализа частотной характеристики до прогноза предельных циклов.

Чтобы использовать анализ функции описания синусоидального входа, который является наиболее распространенным типом анализа функции описания, ваша модель должна удовлетворить эти условия:

  1. Нелинейность независима от времени.

  2. Нелинейность не генерирует субгармоники как ответа на синусоидальный вход.

  3. Система отфильтровывает супергармоники, сгенерированные нелинейностью (это предположение часто упоминается как фильтрация гипотезы).

В этом примере вы выполняете анализ функции описания модели с нелинейностью насыщения, которая удовлетворяет все предположения выше.

Шаг 1: открытие модели

Откройте модель Simulink с нелинейностью насыщения.

scdsaturationDF
mdl = 'scdsaturationDF';

Шаг 2: анализ функции описания нелинейности насыщения

Нелинейность насыщения имеет следующую синусоидальную входную функцию описания:

где для насыщения верхним и нижними пределами 0,5 и-0.5, соответственно где A является амплитудой синусоидального входного сигнала.

Вычислите и постройте функцию описания, N_A (A), по сравнению с амплитудой, A, для амплитуд, отличающихся между 0,1 и 2.1:

A = linspace(0.1,2.1,21);
N_A = saturationDF(0.5./A);
plot(A, N_A);
xlabel('Amplitude');ylabel('N_A(A)');title('Describing function for saturation');

Можно вычислить функцию описания для нелинейности насыщения с помощью FRESTIMATE по тому же набору амплитуд для фиксированной частоты 5 рад/с. Обратите внимание на то, что функция описания насыщения не зависит от частоты, таким образом достаточно запустить анализ на одной частоте. Запустите цикл по всем амплитудам, где вы создадите вход sinestream с (фиксированной) частотой и данной амплитудой, затем запустить FRESTIMATE, использующий этот входной сигнал в каждой итерации.

w = 5;
io(1) = linio('scdsaturationDF/In1',1,'input');
io(2) = linio('scdsaturationDF/Saturation',1,'output');
N_A_withfrest = zeros(size(N_A));
for ct = 1:numel(A)
    in = frest.Sinestream('Frequency',w,'Amplitude',A(ct));
    sysest = frestimate(mdl,in,io);
    N_A_withfrest(ct) = real(sysest.resp);
end
plot(A,N_A,A,N_A_withfrest,'r*')
xlabel('Amplitude');ylabel('N_A(A)');title('Describing function for saturation');
close_system(mdl);

Шаг 3: анализ функции описания с обратной связью

Можно также запустить анализ функции описания с обратной связью по частотному диапазону. Можно начать путем аналитичного вычисления частотной характеристики из ссылки, чтобы вывести функции описания использования. Для этого сначала вычислите амплитуду входного сигнала "nonlinear_input" для нелинейности, учитывая ссылочную амплитуду и частоту. Обратите внимание на то, что входная амплитуда для нелинейности не обязательно равна ссылочной амплитуде.

bdclose('scdsaturationDF');
scdsaturationDFcl
mdl = 'scdsaturationDFcl';

L = zpk([],[0 -1 -10],1);
w = logspace(-2,2,50);
A_DF = zeros(numel(A),numel(w));
for ct_amp = 1:numel(A)
    for ct_freq = 1:numel(w)
        % Compute the amplitude to nonlinearity solving the analytical
        % equation
        A_DF(ct_amp,ct_freq) = fzero(@(A_DF) solveForSatAmp(A_DF,L,w(ct_freq),A(ct_amp)),A(ct_amp),...
            optimset('Display','off'));
    end
end

Затем, вычислите аналитическую частотную характеристику замкнутого цикла из ссылки, чтобы вывести с функцией описания для каждой амплитуды и сохранить его в FRD-массиве.

L_w = freqresp(L,w);
for ct = 1:numel(A)
    N_A = saturationDF(0.5./A_DF(ct,:));
    cl_resp = N_A(:).*L_w(:)./(1+N_A(:).*L_w(:));
    cl(1,1,ct) = frd(cl_resp,w);
end

Можно получить частотную характеристику для замкнутого цикла из ссылки, чтобы ввести использование FRESTIMATE похожим способом к анализу функции описания насыщения выше.

io(1) = linio('scdsaturationDFcl/r',1,'input');
io(2) = linio('scdsaturationDFcl/Linear',1,'output');
for ct = 1:numel(A)
    in = frest.Sinestream('Frequency',w,'Amplitude',A(ct),...
        'NumPeriods',10,'SettlingPeriods',7);
    cl_withfrest(1,1,ct)  = frestimate(mdl,in,io);
end

Можно построить аналитически вычисленное значение с обратной связью наряду с тем от FRESTIMATE.

h = figure;bodemag(cl,'b',cl_withfrest,'r');
annotation(h,'textarrow',[0.64 0.58],[0.64 0.58],'String','Increasing A');

Закройте модель:

bdclose('scdsaturationDFcl')

Смотрите также

|