function [LT_brate, NT_brate, LT_margin, NT_margin]=calcResultSDSL(tfplan,res,lc,f); %% =========================================================================== % calcResultSDSL - calculates SDSL (using PAM) bitrates and margins % % Parameter: tfplan The TF plan used for calculating the bit rate % Parameter: res Result structure % Parameter: lc The linecode % Parameter: f Frequency axis % % Returns: LT and NT bitrates [Mbit/s] % LT and NT margins [dB] %% =========================================================================== %% =========================================================================== % Copyright (C) 2000 by Forschungszentrum Telekommunikation Wien, Austria; % All rights reserved. % Project : FSAN duplex model % Author(s) : Tomas Nordstrom (Tomas.Nordstrom@FTW.at) % : Gernot Schmid (schmid@ftw.at) % %% =========================================================================== % Change History % 2000-03-23 (GS) Created % 2000-04-12 (GS) Extensions for applying a receive filter % 2000-05-03 (ToNo) Modified the input parameters % 2000-05-17 (GS) Alternative margin calculation methods % 2000-05-23 (GS) % 2000-06-20 (ToNo) Cleaning up % 2000-07-11 (ToNo) Made it clip SNR %% =========================================================================== usefilters=0; % zero if no receive filter should be applied efficiencyLoss = lc.param.efficiencyLoss; SNRmax = lc.param.SNRMax; codingGain = lc.param.codingGain; SNRloss = lc.param.SNRloss; xtalk_margin = lc.param.xtalk_margin; signal_margin = lc.param.signal_margin; Px = lc.param.Px; reqSNR = lc.param.reqSNR; % Considered bitrates brate=lc.param.pam.brate.rate; ohead=lc.param.pam.brate.ohead; fsym=(brate+ohead)/3; % with UC 16-PAM we get 3 = log2(16)-1 bits/symbol %% =========================================================================== % Recieve filter if usefilters, % Find correct values in templates for receive filter data % (dep. on bitrate if symmetric or asymmetric SDSL is used) switch tfplan.name case 'SDSL-asym' tmpRxN_up=lc.param.pam.recfilterorder.up(1,:); tmpind=find(tmpRxN_up>brate); RxN_up=lc.param.pam.recfilterorder.up(2,tmpind(1)-1); tmpRxN_dn=lc.param.pam.recfilterorder.dn(1,:); tmpind=find(tmpRxN_dn>brate); RxN_dn=lc.param.pam.recfilterorder.dn(2,tmpind(1)-1); tmpRx3dBf_up=lc.param.pam.recfilter3dBf.up(1,:); tmpind=find(tmpRx3dBf_up>brate); Rx3dBf_up=lc.param.pam.recfilter3dBf.up(2,tmpind(1)-1); tmpRx3dBf_dn=lc.param.pam.recfilter3dBf.dn(1,:); tmpind=find(tmpRx3dBf_dn>brate); Rx3dBf_dn=lc.param.pam.recfilter3dBf.dn(2,tmpind(1)-1); case 'SDSL-sym' RxN_up=lc.param.pam.recfilterorder.up; RxN_dn=lc.param.pam.recfilterorder.dn; Rx3dBf_up=lc.param.pam.recfilter3dBf.up; Rx3dBf_dn=lc.param.pam.recfilter3dBf.dn; end RxTrcutoff=lc.param.pam.highpass3dBf; % Receive filter frequency response Rec_Filt_up= 1./(1+(f./Rx3dBf_up).^(2*RxN_up)).*f.^2./(f.^2+RxTrcutoff.^2); Rec_Filt_dn= 1./(1+(f./Rx3dBf_dn).^(2*RxN_dn)).*f.^2./(f.^2+RxTrcutoff.^2); %Apply the recieve filters: NT_Rx=res.NT.Rx_signal.*Rec_Filt_dn; LT_Rx=res.LT.Rx_signal.*Rec_Filt_up; NT_TotNoise=res.NT.Tot_noise.down.*Rec_Filt_dn; LT_TotNoise=res.LT.Tot_noise.up.*Rec_Filt_up; else % No filter NT_Rx=res.NT.Rx_signal; LT_Rx=res.LT.Rx_signal; NT_TotNoise=res.NT.Tot_noise.down; LT_TotNoise=res.LT.Tot_noise.up; end; %% =========================================================================== % Calculate SNR (with cross-talk margin and SNR maximum) % The total noise is increased by xtalk_margin dB:s, % and is not in the ShannonGap. noise_LT=LT_TotNoise.*10.^(xtalk_margin/10); noise_NT=NT_TotNoise.*10.^(xtalk_margin/10); SNR_LT = (LT_Rx)./(noise_LT); SNR_NT = (NT_Rx)./(noise_NT); % Clip at SNRmax tmp=find(SNR_LT>=10.^(SNRmax/10)); SNR_LT(tmp)=ones(size(tmp)).*10.^(SNRmax/10); tmp=find(SNR_NT>=10.^(SNRmax/10)); SNR_NT(tmp)=ones(size(tmp)).*10.^(SNRmax/10); %% =========================================================================== % Ideal DFE margin calculation ('folded SNR stuff') % Calc the folded SNR SumSNR_LT=calcFoldedSNR(SNR_LT,f,fsym); SumSNR_NT=calcFoldedSNR(SNR_NT,f,fsym); %% =========================================================================== % Values for function output arguments % (to fit this function to CALL from calcFSANresult) NT_margin = SumSNR_NT-reqSNR + codingGain-SNRloss-signal_margin; % in dB LT_margin = SumSNR_LT-reqSNR + codingGain-SNRloss-signal_margin; LT_brate = brate/1e6; % in Mbps NT_brate = brate/1e6;