Этот пример показывает, как использовать оценку частотной характеристики для выполнения анализа функции синусоидального ввода, описывающего функцию, для модели с нелинейностью насыщения.
Описание анализа функции является широко известным методом для изучения частотной характеристики нелинейных систем. Это расширение линейной частотной характеристики анализа. В линейных системах передаточные функции зависят только от частоты входного сигнала. В нелинейных системах, когда к нелинейному элементу применяется определенный класс входного сигнала, такого как синусоидальный, можно представлять нелинейный элемент функцией, которая зависит не только от частоты, но и от входной амплитуды. Эта функция упоминается как описывающая функция. Описание функционального анализа имеет широкую область применения от анализа частотной характеристики до предсказания предельных циклов.
Чтобы использовать синусоидальный входной параметр, описывающий анализ функции, который является наиболее распространенным типом описания анализа функции, ваша модель должна удовлетворять этим условиям:
Нелинейность является инвариантной во времени.
Нелинейность не генерирует никакой субгармонии как ответ на вход синусоидальный.
Система отфильтровывает супер-гармоники, сгенерированные нелинейностью (это предположение часто упоминается как гипотеза фильтрации).
В этом примере вы выполняете описание анализа функции на модели с нелинейностью насыщения, которая удовлетворяет всем вышеприведенным допущениям.
Откройте модель Simulink с нелинейностью насыщения.
scdsaturationDF
mdl = 'scdsaturationDF';
Нелинейность насыщения имеет следующую синусоидальную входную функцию описания:
где для насыщения с верхним и нижним пределами 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);
Можно также запустить замкнутый цикл, описывающий анализ функции в частотной области значений. Можно начать с аналитического вычисления частотной характеристики от ссылки до вывода с помощью функций описания. Для этого сначала вычислите амплитуду входного сигнала «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')