Использование параметра 'NPoles' с рационализацией

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

Анализ выхода рационализации при использовании значения по умолчанию для '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. Axes 1 with title Default NPoles (Uses 48 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 соответствует исходным данным, похоже, что в то время как значения по умолчанию 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. 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.

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

Похожие темы