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

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

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

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

Чтобы поместить пример выше на практике, выполните шаги ниже.

  • Читайте в, ВИДЕЛ данные о фильтре, содержавшиеся в файле 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 objects. Axes object 1 contains an object of type line. This object represents dB(S_{21}). Axes object 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 objects. Axes object 1 with title Default Weight (Uses 16 poles) contains 2 objects of type line. These objects represent Original Data, Default rationalfit. Axes object 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 object. The axes object 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 objects. Axes object 1 with title Weight = 1./abs(s21) (Uses 48 poles) contains 2 objects of type line. These objects represent Original Data, Custom rationalfit. Axes object 2 contains 2 objects of type line. These objects represent Original Data, Custom rationalfit.

График показывает что custom '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 object. The axes object with title Accuracy at Small Magnitudes Using Custom Weight contains 2 objects of type line. These objects represent Original Data, Custom rationalfit.

Похожие темы