exponenta event banner

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

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

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

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

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

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

Считывайте данные S-параметра 4-портовой объединительной платы из файла 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, намного точнее и использует меньшее количество полюсов.

Связанные темы