В этом примере показано, как использовать параметр «NPoles» для улучшения качества вывода rationalfit. По умолчанию rationalfit функция использует 48 или менее полюсов, чтобы найти рациональную функцию, которая лучше всего соответствует данным. Если 48 полюсов недостаточно, может быть выгодно изменить диапазон числа полюсов, используемых rationalfit.
Сначала считывайте данные полосового фильтра, содержащиеся в файле. npoles_bandpass_example.s2pи постройте график S21 данные. Далее используйте rationalfit для соответствия рациональной функции S21 данные, для параметра «NPoles» установлено значение по умолчанию, и визуально сравниваются с исходными данными. Наконец, использовать rationalfit опять же, на этот раз указывая большее количество полюсов, и посмотреть, улучшается ли результат.
S = sparameters('npoles_bandpass_example.s2p'); figure subplot(2,1,1) rfplot(S,2,1,'db') subplot(2,1,2) rfplot(S,2,1,'angle')

Используйте rfparam для извлечения S21 значения, а затем вызовите rationalfit.
s21 = rfparam(S,2,1); datafreq = S.Frequencies; defaultfit = rationalfit(datafreq,s21);
Warning: Achieved only -13.0 dB accuracy with 48 poles, not -40.0 dB. Consider specifying a larger number of poles using the 'NPoles' parameter.
Используйте freqresp функция для вычисления отклика выхода rationalfit.
respfreq = 2.25e9:2e5:2.75e9; 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 NPoles (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')

Анализ того, насколько хорошо результат rationalfit соответствует исходным данным, в то время как значения по умолчанию rationalfit выполнять достаточно хорошую работу в центре полосовой области, посадка плохая на краях полосовой области. Возможно, что использование более сложной рациональной функции позволит добиться лучшей подгонки.
Подогнать оригинал S21 данные, но на этот раз, инструктировать rationalfit для использования между 49 и 60 полюсами с использованием параметра NPoles.
customfit = rationalfit(datafreq,s21,'NPoles',[49 60]);
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 = ['NPoles = [49 60] (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 NPoles = [49 60] (Uses 58 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.](../../examples/rf/win64/UsingTheNpolesParameterWithRationalfitExample_03.png)
Посадка с использованием большего числа полюсов явно более точна.