Используя Параметр 'DelayFactor' С rationalfit

В этом примере показано, как использовать параметр 'DelayFactor', чтобы улучшить качество выхода rationalfit.

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

В этих случаях, когда входные данные содержит большой отрицательный наклон (т.е. данные с достаточно большой задержкой), мы можем спросить rationalfit сначала удалить часть задержки из данных, и затем найти рациональную функцию что лучшие подгонки остающиеся "незадержанные" данные. rationalfit функционируйте составляет удаленную задержку путем хранения его в параметре 'Задержки' выхода. По умолчанию, rationalfit не удаляет задержки из данных.

Во-первых, создайте дифференциальные данные о передаточной функции из S-параметров основной платы с 4 портами. Затем попытайтесь соответствовать данным с помощью настроек по умолчанию rationalfit функция. Наконец, используйте параметр 'DelayFactor', чтобы улучшить точность выхода rationalfit.

Создайте передаточную функцию

Читайте в данных S-параметра основной платы с 4 портами из 'значения по умолчанию s4p'.

S = sparameters('default.s4p');
fourportdata = S.Parameters;
freq = S.Frequencies;
fourportZ0 = S.Impedance;

Преобразуйте несимметричные S-параметры с 4 портами в дифференциальные S-параметры с 2 портами

diffdata = s2sdd(fourportdata);
diffZ0 = 2*fourportZ0;

Создайте передаточную функцию из дифференциальных 2 данных порта

tfdata = s2tf(diffdata,diffZ0,diffZ0,diffZ0);

Анализируйте Выход rationalfit При использовании Значения по умолчанию для 'DelayFactor'

Используйте freqresp функция, чтобы вычислить ответ выхода rationalfit.

defaultfit = rationalfit(freq,tfdata)
Warning: Achieved only -10.2 dB accuracy with 48 poles, not -40.0 dB.  Consider specifying a larger number of poles using the 'NPoles' parameter.
defaultfit = 
   rfmodel.rational with properties:

        A: [48x1 double]
        C: [48x1 double]
        D: 0
    Delay: 0
     Name: 'Rational Function'

respfreq = 0:4e6:20e9;
defaultresp = freqresp(defaultfit,respfreq);

Обратите внимание на то, что параметр 'Задержки' является нулем (никакая задержка, удаленная из данных).

Отобразите исходные данные на графике по сравнению с выходом по умолчанию rationalfit.

figure
subplot(2,1,1)
tfdataDB = 20*log10(abs(tfdata));
plot(freq,tfdataDB,'.-')
hold on
plot(respfreq,20*log10(abs(defaultresp)))
hold off
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
defaultnpoles = numel(defaultfit.A);
defstr = ['Default DelayFactor (Uses ',num2str(defaultnpoles),' poles)'];
title(defstr)
legend('Original Data','Default rationalfit','Location','best')
subplot(2,1,2)
tfdataphase = 180*unwrap(angle(tfdata))/pi;
plot(freq,tfdataphase,'.-')
hold on
plot(respfreq,180*unwrap(angle(defaultresp))/pi)
hold off
xlabel('Frequency (Hz)')
ylabel('Angle (degrees)')
legend('Original Data','Default rationalfit','Location','best')

Обратите внимание на то, что результаты при использовании настроек по умолчанию rationalfit плохи. Поскольку фаза исходных данных имеет очень большой отрицательный наклон, может быть возможно улучшить точность рациональной функции при помощи параметра 'DelayFactor'.

Анализируйте Выход rationalfit При использовании Пользовательского Значения для 'DelayFactor'

'DelayFactor' должен быть установлен в значение между 0 и 1. Выбор, какое значение является упражнением в методе проб и ошибок. Для некоторых наборов данных (те, фаза которых имеет полный восходящий наклон), изменяя значение 'DelayFactor' не окажет влияния на результат.

Содержание всех других возможных параметров rationalfit постоянный, 0.98, как находят, создает хорошую подгонку.

customfit = rationalfit(freq,tfdata,'DelayFactor',0.98)
customfit = 
   rfmodel.rational with properties:

        A: [31x1 double]
        C: [31x1 double]
        D: 0
    Delay: 6.5521e-09
     Name: 'Rational Function'

customresp = freqresp(customfit,respfreq);

Обратите внимание на то, что параметр 'Задержки' не является нулем (rationalfit удаленный некоторая задержка из данных).

Отобразите исходные данные на графике по сравнению с пользовательским выходом rationalfit.

subplot(2,1,1)
plot(freq,tfdataDB,'.-')
hold on
plot(respfreq,20*log10(abs(customresp)))
hold off
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
customnpoles = numel(customfit.A);
customstr = ['DelayFactor = 0.98 (Uses ',num2str(customnpoles),' poles)'];
title(customstr)
legend('Original Data','Custom rationalfit','Location','best')
subplot(2,1,2)
plot(freq,tfdataphase,'.-')
hold on
plot(respfreq,180*unwrap(angle(customresp))/pi)
hold off
xlabel('Frequency (Hz)')
ylabel('Angle (degrees)')
legend('Original Data','Custom rationalfit','Location','best')

Рациональная функция, созданная при помощи пользовательского значения для 'DelayFactor', намного более точна, и использует меньше полюсов.