exponenta event banner

Описание функционального анализа нелинейных моделей симуляторов

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

Справочная информация по описанию анализа функций

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

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

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

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

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

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

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

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

scdsaturationDF
mdl = 'scdsaturationDF';

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

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

$$ N_A(\gamma) = -1 , if \gamma\le-1 $$

$$ N_A(\gamma) = \frac{2}{\pi}(sin^-1(\gamma)+(\gamma\sqrt(1-\gamma^2))) , if&#xA;-1<\gamma<1 $$

$$ N_A(\gamma) = 1 , if \gamma\ge1 $$

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

Вычислите и постройте график описательной функции, 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 рад/с. Следует отметить, что описывающая функция насыщения не зависит от частоты, поэтому достаточно выполнить анализ на одной частоте. Выполните цикл по всем амплитудам, где вы создадите вход синестрима с (фиксированной) частотой и заданной амплитудой, затем запустите 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')

См. также

|