📄 bitloading.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%
%%%%% Bit Loading Algorithm
%%%%%
%%%%% A Practical Discrete Multitone Transceiver Loading Algorithm
%%%%% for transmission over Spectrally Shaped Channel
%%%%% Authors: Peter S Chow, John M Coffi, John A C Bingham
%%%%% IEEE Transactions on Communications Vol 43, No 2/3/4, Feb/Mar/Apr
%%%%% 1995
%%%%%
%%%%% Written By: Jaganathan Gnanavelu
%%%%% E mail Id: jaganathang@ieee.org
%%%%% Date: June 2006
%%%%% Updated: July 2007
%%%%%
%%%%% Step 1 Compute SNR of all subchannels
%%%%%
%%%%% CTLM CPE Null Loop UpStream SNR value at G.992.5 mode is taken from lab.
%%%%%
%%%%% Step 2 Let Gamma Margin is 0 dB
%%%%%
%%%%% Step 3 For 1 to N compute Bi_Value, Bi_Round, Diff_Value
%%%%% bi = log2( 1 + SNR/(GammaMargin+SNRGap))
%%%%% Bi_Round = round(Bi_Value)
%%%%% Diff_Value = Bi_Value - Bi_Round
%%%%%
%%%%% Step 4 Compute sum(Bi_Value)
%%%%%
%%%%% Step 5 Compute New Gamma Margin
%%%%% Gamma Margin = Gamma Margin +
%%%%% 10log10(2((Bi_Total-Bi_Target)/Used Carrier))
%%%%%
%%%%% Step 6 Increment the counter
%%%%%
%%%%% Step 7 If Bi_Total ~= Bi_Target and Count < Max Count
%%%%% Used Carrier = N and Goto Step 3
%%%%%
%%%%% Step 8 If Bi_Total > Bi_Target
%%%%% Subtract 1 bit from sub-carrier having
%%%%% smallest difference and Repeat Until
%%%%% Bi_Total = Bi_Target
%%%%%
%%%%% Step 9 If Bi_Total < Bi_Target
%%%%% Add 1 bit, sub-carrier having
%%%%% largest difference and Repeat Until
%%%%% Bi_Total = Bi_Target
%%%%%
%%%%%
%%%%% Initial Gamma Margin 0 dB
%%%%%
%%%%% SNR Gap 9.8 dB
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all
clc
close all
NSC = 32;
SNRGap = 10^(9.8/10);
GammaMargin = 1;
Rx_Carrier = 32;
snr = loadhex32('snr1.out',20);
snr_32 = snr(1:Rx_Carrier);
SNR_UpStream = 10*log10(snr+1);
figure,stem(SNR_UpStream(1:Rx_Carrier),'m*');
title('UpStream SNR ');
xlabel('Bin'), ylabel('dB')
grid on
%%% Bit Loading Step Starts
Bi_Target = 325 % Initialize the Bit Target
for i=1:20,
Used_Carrier = Rx_Carrier;
SNR_Gamma = GammaMargin*SNRGap;
Bi_Value = log2(1+ snr_32/SNR_Gamma);
Bi_Round = round(Bi_Value);
Diff_Value = Bi_Value - Bi_Round; % Step 3
for m = 1:Rx_Carrier,
if Bi_Value(m)==0
Used_Carrier = Used_Carrier - 1;
end
end
Bi_Total = sum(Bi_Round); % Step 4
power_2 = 2^((Bi_Total-Bi_Target)/Used_Carrier);
GammaMargin = GammaMargin + 10*log10(power_2);
if Bi_Total==Bi_Target
break;
end
end
Min_Diff = Diff_Value(1);
if Bi_Total > Bi_Target,
while Bi_Total > Bi_Target,
Min_Diff = Diff_Value(1);
for m = 2:Rx_Carrier,
if Min_Diff > Diff_Value(m)
Min_Diff = Diff_Value(m);
Min_Index = m;
end
end
Bi_Round(Min_Index) = Bi_Round(Min_Index)-1;
Bi_Total = sum(Bi_Round);
Diff_Value = Bi_Value - Bi_Round;
end
end
% Max_Diff = Diff_Value(1);
if Bi_Total < Bi_Target,
while Bi_Total < Bi_Target,
Max_Diff = Diff_Value(1);
for m = 2:Rx_Carrier,
if Max_Diff < Diff_Value(m)
Max_Diff = Diff_Value(m);
Min_Index = m;
end
end
Bi_Round(Min_Index) = Bi_Round(Min_Index)+1;
Bi_Total = sum(Bi_Round);
Diff_Value = Bi_Value - Bi_Round;
end
end
figure,stem(Bi_Round)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -