Использование параметра 'DelayFactor' с rationalfit

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

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

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

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

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

Считайте в 4-портовой объединительной плате данные S-параметра от 'default.s4p'.

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

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

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

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

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

Анализ выхода рационализации при использовании значения по умолчанию для '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);

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

Постройте график исходных данных по сравнению с выходами по умолчанию 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')

Figure contains 2 axes. Axes 1 with title Default DelayFactor (Uses 48 poles) contains 2 objects of type line. These objects represent Original Data, Default rationalfit. Axes 2 contains 2 objects of type line. These objects represent Original Data, Default rationalfit.

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

Анализ выхода рационализации при использовании пользовательского значения для '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);

Обратите внимание, что параметр 'Delay' не равен нулю (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')

Figure contains 2 axes. Axes 1 with title DelayFactor = 0.98 (Uses 31 poles) contains 2 objects of type line. These objects represent Original Data, Custom rationalfit. Axes 2 contains 2 objects of type line. These objects represent Original Data, Custom rationalfit.

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

Похожие темы