Этот пример затрагивает две темы: первые показы, как объединить модель Scattering-Parameter (S-Parameter) основополосного канала связи с аналоговым передатчиком и приемником в один S-параметр с 4 портами. Вторые показы возможный метод, чтобы соответствовать передаточной функции к S-параметру и найти его импульсную характеристику для использования с SerDes Toolbox™ с помощью функций rational
(RF Toolbox) и impulse
(RF Toolbox) от RF Toolbox™.
Файл S-параметра, представляющий основополосный канал, должен быть.s4p
с 4 портами файл со ссылочным импедансом 50 Ом (Дифференциал на 100 Ом). Для различного импеданса канала (такого как несимметричный или дифференциал на 85 Ом на 42,5 Ома), можно реконфигурировать аналоговые значения передатчика и приемника, чтобы соответствовать. Кроме того, вы будете видеть в этом примере значения для
Datarate
установлен в 10 ГГц и SamplesPerSymb
установлен в 32, и эти значения могут отличаться для вашей системы. Можно настроить время нарастания и амплитуду передатчика с помощью TxRiseTime
и TxAmplitude
, соответственно, и настройте длительность расчетной импульсной характеристики с помощью endTime
. Кроме того, можно оптимизировать подходящую модель с помощью функционального rational
путем корректировки параметров управления errorTolerance
и nPoles
.
showPlots = true; %Define system data rate and discrete sampling dataRate = 10*1e9; samplesPerSymbol = 32; stopTime = 100e-9; %(seconds) set the time duration of impulse response %Specify channel S-parameter ChannelFilename = 'default.s4p'; %Define transmitter analog model TxR = 50; % Ohms TxC = 0.1e-12; %Farads TxAmplitude = 1.2; %Voltage TxRiseTime2080 = 40e-12; % 20/80% rise time %Define receiver analog model RxR = 50; %Ohms RxC = 0.2e-12; %Farads %Specify rational fitting parameters nPoles = 1600; %Maximum number of poles to use errTolerance = -50; %(dB) desired error tolerance of fit %% Form channel modeling including transmitter/receiver termination Rshort = 1.0e-6;
Импортируйте файл данных S-параметра и сохраните исходное содержимое частоты.
%% Import Differential S-Parameter Model of Communication Channel %Import the S-Parameter data file and keep the original frequency content. origSparam = sparameters(ChannelFilename); freq = origSparam.Frequencies;
Вы видите, как использовать MATLAB, чтобы преобразовать характеристики импеданса аналоговых схем Tx и Rx в эквиваленты S-параметра. Они могут затем быть объединены S-параметром Канала связи, чтобы создать модель 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(ChannelFilename); % Create s-parameter circuit element from the 4-port S-parameter file. 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
для использования rational
функция. Используйте s2sdd
преобразовывать данные в дифференциальный S-параметр с 4 портами diffdata
. Примечание: RF Toolbox™ применяет порты сначала сверху донизу на S-параметр, затем слева направо. Следует иметь в виду, что порты на импортированном S-Paramter могут быть отформатированы как слева направо, затем от начала до конца, и, вероятно, придется реконфигурировать для использования RF Toolbox™.
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);
Можно найти передаточную функцию с помощью функции MATLAB s2tf
использование параметров управления для ссылочного импеданса zRef,
исходный импеданс zSource
и загрузите импеданс zLoad
.
Примечание: исходный импеданс собирается закоротить-circut и загрузить импеданс, установлен в разомкнутую цепь, потому что характеристики импеданса Tx и Rx уже являются включенной моделью S-Parameter системы LTI.
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);
Вы видите, как использовать рациональный получить подгонку:
Примечание: для функционального rational
, рекомендуется установить TendsToZero на true
для быстрых времен нарастания TX для того, чтобы смягчить потенциальные числовые артефакты в импульсной характеристике.
%Fit model to transfer function rationalResults = rational(freq,difftransfunc,errTolerance,'TendsToZero',true,'MaxPoles',nPoles,'Display',"off"); fprintf('\nThe derived rational function achieved %f dB fit with %d poles.\n',rationalResults.ErrDB,rationalResults.NumPoles);
The derived rational function achieved -51.339448 dB fit with 160 poles.
%% Extract impulse response from rational fit results %Determine symbol time, time steps and duration (in samples) of the impulse SymbolTime = 1/dataRate; ts = SymbolTime/samplesPerSymbol; pointsInImpulse = round(stopTime/ts);
Используйте функциональный impulse
найти импульсную характеристику подгонки:
impulseRaw = impulse(rationalResults,ts,pointsInImpulse);
Можно включать время нарастания TX и амплитуду путем свертки к меандру с импульсной характеристикой. Примечание: можно преобразовать 20-80% в 0-100%-е время нарастания, принимающее линейный пандус.
TxRiseTime = TxRiseTime2080/0.6;
risetimeSamples = round(TxRiseTime/ts); %Determine width of rise time pulse
Примечание: Используя линейную модель пандуса времени нарастания в дискретное время система приводит к возможности некоторой неопределенности в использовании линейного пандуса с данным интервалом выборки. Сокращение неопределенности может иметься путем увеличения разрешения выборки путем увеличения выборок на символ.
riseTimeUncertainty = (TxRiseTime - risetimeSamples*ts)/TxRiseTime*100;
fprintf('Rise time uncertainty is %g %%\n',riseTimeUncertainty);
Rise time uncertainty is 1.5625 %
%Create rise time pulse response riseTimePulse = zeros(risetimeSamples*2,1); riseTimePulse(1:risetimeSamples) = 1/risetimeSamples; %Convolve rise time pulse with raw impulse response and scale by tx amplitude. if risetimeSamples>1 impulseResponse = TxAmplitude*conv(impulseRaw,riseTimePulse,'same'); else impulseResponse = TxAmplitude*impulseRaw; end t = (0:length(impulseResponse)-1)*ts;
Можно сравнить исходные данные и соответствовать частотной характеристике дифференциального режима путем графического вывода величины и фазы исходной передаточной функции и esulting выхода rational
функция.
%Extract frequency response from fit freqsforresp = linspace(0,max(freq)*2,length(freq))'; resp = freqresp(rationalResults,freqsforresp); figure(1001) 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',rationalResults.NumPoles),'FontSize',12) ylabel('Magnitude (decibels)') xlabel('Frequency (GHz)') legend('Original data','Fit result') grid on subplot(2,1,2) origangle = unwrap(angle(difftransfunc))*180/pi; plotangle = unwrap(angle(resp))*180/pi; plot(freq*1.e-9,origangle,'r',freqsforresp*1.e-9,plotangle,'b--', ... 'LineWidth',2) ylabel('Phase (deg.)') xlabel('Frequency (GHz)') legend('Original data','Fit result') grid on
Здесь вы видите график Импульсной характеристики для комбинации аналогового фрагмента передатчика, основополосного канала и аналогового фрагмента приемника.
%% Visualize impulse response figure(1002) plot(t*1e9,impulseResponse) xlabel('Time (ns)') ylabel('Volts') title(sprintf('Impulse Response derived from\n%s\nand Tx/Rx analog model',ChannelFilename),'interpreter','none') grid on
Можно использовать импульсную характеристику основополосной модели канала в Разработчике Serdes путем выбора "Impulse response" для модели канала и ввести векторный impulseResponse
.