В этом примере показано, как использовать рациональный объект для создания рациональной подгонки к данным S-параметра, и различные свойства и методы, которые включены в рациональный объект.
Читайте в спараметрах, и создайте из них рациональный объект. Рациональная функция автоматически подходит для всех записей матриц S-параметра.
S = sparameters('sawfilter.s2p')
S = sparameters: S-parameters object NumPorts: 2 Frequencies: [334x1 double] Parameters: [2x2x334 double] Impedance: 50 rfparam(obj,i,j) returns S-parameter Sij
r = rational(S)
r = rational with properties: NumPorts: 2 NumPoles: 30 Poles: [30x1 double] Residues: [2x2x30 double] DirectTerm: [2x2 double] ErrDB: -41.2811
При настройках по умолчанию в этом примере рациональная функция достигает точности около -26 дБ, используя 30 полюсов. По конструкции рациональный объект является причинно-следственным, с ненулевым прямым термином.
Сгенерируйте частотную характеристику от рационального объекта и сравните одну из записей с исходными данными.
resp = freqresp(r, S.Frequencies);
plot(S.Frequencies, real(rfparam(S, 1, 1)), ...
S.Frequencies, real(squeeze(resp(1,1,:))))
Повторите подгонку, ограничив количество полюсов максимум 5. Рациональный объект может использовать меньше полюсов, чем указано. Заметьте, что качество подгонки ухудшается в отличие от исходной 30-полюсной подгонки.
r5 = rational(S, 'MaxPoles', 5)
r5 = rational with properties: NumPorts: 2 NumPoles: 4 Poles: [4x1 double] Residues: [2x2x4 double] DirectTerm: [2x2 double] ErrDB: -1.1618
resp5 = freqresp(r5, S.Frequencies);
plot(S.Frequencies, real(rfparam(S, 1, 1)), ...
S.Frequencies, real(squeeze(resp5(1,1,:))))
Повторите подгонку, запрашивая более жесткий допуск (-60 дБ), заметьте, что подгонка значительно улучшена, особенно в полосах стопора.
rgood = rational(S, -60)
rgood = rational with properties: NumPorts: 2 NumPoles: 202 Poles: [202x1 double] Residues: [2x2x202 double] DirectTerm: [2x2 double] ErrDB: -54.1050
respgood = freqresp(rgood, S.Frequencies);
plot(S.Frequencies, real(rfparam(S, 1, 1)), ...
S.Frequencies, real(squeeze(respgood(1,1,:))))