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

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

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

Для примера, если амплитуда входных данных имеет большую динамическую область значений, часто полезно быть более обеспокоенной относительной погрешностью в каждой точке данных, чем абсолютной ошибкой в каждой точке данных, так что точки данных с относительно меньшими величинами точно подгоняются. Общим способом сделать это является задать параметр 'Weight' равным 1./abs(data).

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

  • Считайте в фильтре SAW данные, содержащиеся в файле sawfilter.s2p, и постройте график S21 данные.

  • Используйте rationalfit функция для соответствия рациональной функции S21 данных, с 'Weight' Набор параметров к значению по умолчанию и визуально сравните результаты с исходными данными.

  • Использование rationalfit снова на этот раз установка 'Weight' параметр, который будет 1./abs(S21), и посмотреть, улучшится ли результат.

Чтение и визуализация данных

Считывайте и визуализируйте данные S-параметров фильтра SAW.

S = sparameters('sawfilter.s2p');
figure
subplot(2,1,1)
rfplot(S,2,1,'db')
subplot(2,1,2)
rfplot(S,2,1,'angle')

Figure contains 2 axes. Axes 1 contains an object of type line. This object represents dB(S_{21}). Axes 2 contains an object of type line. This object represents angle(S_{21}).

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

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

s21 = rfparam(S,2,1);
datafreq = S.Frequencies;
defaultfit = rationalfit(datafreq,s21);

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

respfreq = 1e9:1.5e6:4e9;
defaultresp = freqresp(defaultfit,respfreq);

Сравните исходные данные с частотной характеристикой рациональной функции по умолчанию, вычисленной rationalfit.

subplot(2,1,1)
plot(datafreq,20*log10(abs(s21)),'.-')
hold on
plot(respfreq,20*log10(abs(defaultresp)))
hold off
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
defaultnpoles = numel(defaultfit.A);
defaultstr = ['Default Weight (Uses ',num2str(defaultnpoles),' poles)'];
title(defaultstr)
legend('Original Data','Default rationalfit','Location','best')
subplot(2,1,2)
plot(datafreq,unwrap(angle(s21))*180/pi,'.-')
hold on
plot(respfreq,unwrap(angle(defaultresp))*180/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 Weight (Uses 16 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 не ужасно, это не совпадает с областями в данных, которые очень малы по величине.

figure
plot(datafreq,20*log10(abs(s21)),'.-')
hold on
plot(respfreq,20*log10(abs(defaultresp)))
hold off
axis([2.25e9 2.65e9 -75 -30])
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
title('Accuracy at Small Magnitudes Using Default Weight')
legend('Original Data','Default rationalfit','Location','best')

Figure contains an axes. The axes with title Accuracy at Small Magnitudes Using Default Weight contains 2 objects of type line. These objects represent Original Data, Default rationalfit.

Использование параметра 'Weight', чтобы сделать эти данные относительно более важными, может помочь точности подгонки.

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

При помощи 'Weight' 1./abs(s21), rationalfit минимизирует относительную погрешность системы вместо абсолютной ошибки системы.

customfit = rationalfit(datafreq,s21,'Weight',1./abs(s21));
Warning: Achieved only -39.7 dB accuracy with 48 poles, not -40.0 dB.  Consider specifying a larger number of poles using the 'NPoles' parameter.
customresp = freqresp(customfit,respfreq);

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

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

Figure contains 2 axes. Axes 1 with title Weight = 1./abs(s21) (Uses 48 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.

График показывает, что пользовательский 'Weight' параметр создал лучшую подгонку для точек данных с меньшими величинами.

figure
plot(datafreq,20*log10(abs(s21)),'.-')
hold on
plot(respfreq,20*log10(abs(customresp)))
hold off
axis([2.25e9 2.65e9 -75 -30])
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
title('Accuracy at Small Magnitudes Using Custom Weight')
legend('Original Data','Custom rationalfit','Location','best')

Figure contains an axes. The axes with title Accuracy at Small Magnitudes Using Custom Weight contains 2 objects of type line. These objects represent Original Data, Custom rationalfit.

Похожие темы