Этот пример затрагивает две темы: первое особое внимание на конкатенации трех рассеивающихся параметров (S-параметры), которые представляют канал связи наряду с аналоговыми компонентами передатчика и получателя в один S-параметр с 4 портами, второе особое внимание на преобразовании этого S-параметра с 4 портами к импульсной характеристике для использования с SerDes Toolbox™. Вы будете использовать rationalfit
функция от RF Toolbox™, чтобы найти импульсную характеристику S-параметра, который представляет канал связи, использующий Истинную и Дополнительную дифференциальную сигнализацию. Для получения дополнительной информации смотрите Моделирование Высокоскоростной Основной платы (S-параметры С 4 портами к Рациональной функции).
Файл S-параметра должен быть.s4p
с 4 портами файл. Нормируйте передатчик (Tx) и получатель (Rx) импедансы к
50
Омы. Datarate
и SamplesPerSymb
valuses должны совпадать с настройками системы SerDes и установлены в 10
GHz и 32, соответственно. Параметры управления для rationalfit
функция включает delayStart
, delayStep
, delayStop
, и nPoles
. Настройте разрешение импульсной характеристики с помощью pointsInImpulse.
filename = 'default.s4p';
TxR = 50;
TxC = 0.1e-12;
RxR = 50;
RxC = 0.2e-12;
datarate = 10*1e9;
samplespersymb = 32;
delayStart = 0.68;
delayStep = 0.01;
delayStop = 0.73;
nPoles = 120;
Rshort = 1.0e-6;
pointsInImpulse = 16384;
showPlots = true;
Вычислите время символа и демонстрационный интервал. Импортируйте файл данных S-параметра и сохраните исходное содержимое частоты.
pulsewidth = 1/datarate; ts = pulsewidth/samplespersymb; origSparam = sparameters(filename); freq = origSparam.Frequencies;
Создайте аналоговые схемы Tx и Rx как S-параметры. Затем объедините модели S-Paramater схем Tx и Rx с моделью S-Parameter Канала связи.
cktTx = circuit('txAnalog'); add(cktTx,[1 3],resistor(TxR,'R1')) add(cktTx,[3 0],capacitor(TxC,'C1')) add(cktTx,[2 4],resistor(TxR,'R2')) add(cktTx,[4 0],capacitor(TxC,'C2')) setports(cktTx,[1 0],[2 0],[3 0],[4 0]) StxAnalog = sparameters(cktTx,freq,50);
cktCh = circuit('ChannelSparam'); channel = nport(filename); % Create s-parameter circuit element add(cktCh,[1 3 2 4],channel); setports(cktCh,[1 0],[2 0],[3 0],[4 0]) Schannel = sparameters(cktCh,freq,50);
cktRx = circuit('rxAnalog'); add(cktRx,[1 0],resistor(RxR,'R3')) add(cktRx,[1 0],capacitor(RxC,'C3')) add(cktRx,[2 0],resistor(RxR,'R4')) add(cktRx,[2 0],capacitor(RxC,'C4')) add(cktRx,[1 3],resistor(Rshort,'R5')) add(cktRx,[2 4],resistor(Rshort,'R6')) setports(cktRx,[1 0],[2 0],[3 0],[4 0]) SrxAnalog = sparameters(cktRx,freq,50);
Конкатенация S-параметров с помощью cascadesparams
. Установите значения data
, freq
и z0
для использования rationalfit
функция. Используйте s2sdd
преобразовывать данные в дифференциальный S-параметр с 4 портами diffdata
и установленный порядок порта к 1234
. Примечание: RF Toolbox применяет порты сначала сверху донизу на S-параметр, затем слева направо.
sparamWithAnalog = cascadesparams(StxAnalog,Schannel,SrxAnalog); data = sparamWithAnalog.Parameters; freq = sparamWithAnalog.Frequencies; z0 = sparamWithAnalog.Impedance; diffdata = s2sdd(data,2); diffz0 = 2*z0; diffsparams = sparameters(diffdata,freq,diffz0);
Найдите передаточную функцию от diffdata
, ссылочный импеданс S-параметров, источник impedenance в аналоговой модели Tx и импедансе загрузки в аналоговой модели Rx.
zRef = diffz0; % Reference impedance of S-Parameters zSource = 1e-6; % Short circuit the source impedance since it is included in the Tx Analog model. zLoad = 1e6; % Open circuit the load impedance since it is included in the Rx Analog model. difftransfunc = s2tf(diffdata,zRef,zSource,zLoad);
Создайте rationalfit
из различного S-параметра. Разверните величину задержки и сохраните лучшую подгонку. Затем постройте выведенный rationalfit
результат.
bestErr = 0; bestDelay = 0; bestRationalFit = rfmodel.rational(); for delaySweep = delayStart:delayStep:delayStop [rationalfunc,errdb] = rationalfit(freq,difftransfunc,-50,'DelayFactor',delaySweep,'IterationLimit',100,'NPoles',nPoles); if errdb < bestErr bestErr = errdb; bestDelay = delaySweep; bestRationalFit = rationalfunc; end fprintf('.'); end
......
rationalfunc = bestRationalFit;
npoles = length(rationalfunc.A);
fprintf('\nThe derived rational function achieved %f dB fit with %f delay and %d poles.\n',bestErr,bestDelay,npoles);
The derived rational function achieved -70.053204 dB fit with 0.680000 delay and 120 poles.
Создайте импульсную характеристику.
[imp,impt]=impulse(rationalfunc,ts,pointsInImpulse);
Постройте величину и фазу исходной передаточной функции и выход rationalfit
.
freqsforresp = linspace(0,max(freq)*2,length(freq))'; resp = freqresp(rationalfunc,freqsforresp); figure(11) subplot(2,1,1) plot(freq*1.e-9,20*log10(abs(difftransfunc)),'r',freqsforresp*1.e-9, ... 20*log10(abs(resp)),'b--','LineWidth',2) title(sprintf('Rational Fitting with %d poles',npoles),'FontSize',12) ylabel('Magnitude (decibels)') xlabel('Frequency (GHz)') legend('Original data','Fitting result') subplot(2,1,2) origangle = unwrap(angle(difftransfunc))*180/pi+360*freq*rationalfunc.Delay; plotangle = unwrap(angle(resp))*180/pi+360*freqsforresp*rationalfunc.Delay; plot(freq*1.e-9,origangle,'r',freqsforresp*1.e-9,plotangle,'b--', ... 'LineWidth',2) ylabel('Detrended phase (deg.)') xlabel('Frequency (GHz)') legend('Original data','Fitting result')
Используйте передаточную функцию от rationalfit
найти импульсную характеристику с помощью impulse
.
[imp,impt]=impulse(rationalfunc,ts,pointsInImpulse); plot(impt,imp);