В этом примере показано, как использовать рациональный объект создать рациональную подгонку к данным S-параметра, и различные свойства и методы, которые включали в рациональный объект.
Читайте в sparameters и создайте рациональный объект от них. Рациональная функция автоматически соответствует всем записям матриц 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: -25.7720
С настройками по умолчанию на этом примере рациональная функция достигает точности приблизительно-26 дБ, с помощью 30 полюсов. Конструкцией рациональный объект является причинным с ненулевым прямым термином.
Сгенерируйте частоту reponse от рационального объекта и сравните одну из записей с исходными данными.
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: 5
Poles: [5x1 double]
Residues: [2x2x5 double]
DirectTerm: [2x2 double]
ErrDB: -4.0095
resp5 = freqresp(r5, S.Frequencies);
plot(S.Frequencies, real(rfparam(S, 1, 1)), ...
S.Frequencies, real(squeeze(resp5(1,1,:))))
Восстановите подгонку, прося более трудный допуск (-60dB), Уведомление, что подгонка значительно улучшена, особенно в полосах задерживания sawfilter.
rgood = rational(S, -60)
rgood =
rational with properties:
NumPorts: 2
NumPoles: 151
Poles: [151x1 double]
Residues: [2x2x151 double]
DirectTerm: [2x2 double]
ErrDB: -53.5987
respgood = freqresp(rgood, S.Frequencies);
plot(S.Frequencies, real(rfparam(S, 1, 1)), ...
S.Frequencies, real(squeeze(respgood(1,1,:))))