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

В этом примере показано, как использовать параметр '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')

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 При использовании Значения по умолчанию для 'NPoles'

Используйте 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')

Figure contains 2 axes objects. Axes object 1 with title Default NPoles (Uses 48 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 совпадает с исходными данными, кажется что в то время как значения по умолчанию rationalfit сделайте довольно хорошее задание в центре полосовой области, подгонка плоха на ребрах полосовой области. Возможно, что использование более комплексной рациональной функции достигнет лучшей подгонки.

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

Соответствуйте исходному 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 objects. Axes object 1 with title NPoles = [49 60] (Uses 58 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.

Подгонка с помощью большего числа полюсов ясно более точна.

Похожие темы