exponenta event banner

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

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

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

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

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

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

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

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

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

Считывание и визуализация данных S-параметров фильтра ПАВ.

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.

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

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

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