⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reverseaccess.m

📁 Reerse Access channel.
💻 M
字号:
% Reverse Access Channel Simulater

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1. Access Channel Information bits rate = 4.8kbps
% Frame length(96bits) = Information bit(88bits) + Encoder tail bits(9bits)

frame = 20*10^-3;                   % One frame is 20ms
bit = randint(1,(4.4*10^3*frame));  % Generate Information bits randomly.
tail = zeros(1,8);                  % Encoder tail = 8bits
fr_4800_bits = [bit,tail];          % Frame length = 88+8 = 96 bits


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 2. Convolutional Encoder[R = 1/3, K = 9 = register(8)+input data(1)]
k0 = 1;                             % Input data
g = [1 0 1 1 0 1 1 1 1; 1 1 0 1 1 0 0 1 1; 1 1 1 0 0 1 0 0 1];

if rem(length(fr_4800_bits), k0) > 0
    fr_4800_bits = [fr_4800_bits, zeros(size(1:k0-rem(length(fr_4800_bits),k0)))];
end

n1 = length(fr_4800_bits)/k0;

% Check the size of matrix g
if rem(size(g,2),k0) > 0
    error('Error')
end

% Determine l and n0
l = size(g,2)/k0;
n0 = size(g,1);

% Add extra zeros
v = [zeros(size(1:(l-1)*k0)),fr_4800_bits,zeros(size(1:(l-1)*k0))];

% Generate uu, a matrix whose columns are the conents of conv.encoder at
% various clock cycles.
v1 = v(l*k0:-1:1);
for k1 = 1:n1+l-2
    v1 = [v1,v((k1+l)*k0:-1:k1*k0+1)];
end
vv = reshape(v1,l*k0,n1+l-1);

% Determine the output
out = reshape(rem(g*vv,2),1,n0*(l+n1-1));
output = out(1:length(fr_4800_bits)*3); % 288 symbols.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 3-1. Symbol Repetition
re_4800 = zeros(1,2);

for l = 1:length(output)
    if output(l) == 1
        re_4800(l,:) = ones(1,2);
    else
        re_4800(l,:) = [0 0];
    end
end

% 3-2. The value of symbols after Repetition
rep_4800 = reshape(re_4800',1,576);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 4-1. Block Interleaver
for m = 1:18
    in_4800(:,m) = (rep_4800(32*(m-1)+1:32*(m-1)+32))';
end

for n = 1:8
    re = [in_4800(1+4*(n-1),:),in_4800(2+4*(n-1),:),in_4800(3+4*(n-1),:),in_4800(4+4*(n-1),:)];
    ou_4800(n,:) = re;
end

% 4-2. The value of symbols after Block Interleaver
out_4800 = reshape(ou_4800',1,576);


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 5-1. Generate Walsh code for 64-ary orthogonal modulation
mod1 = hadamard(64);

for i = 1:64
    for j = 1:64
        if mod1(i,j) == 1
            mod1(i,j) = 0;      % Change 1 to 0
        else 
            mod1(i,j) = 1;      % Change -1 to 1
        end
    end
end

walsh = mod1;

% 5-2. take a group every 6 bit
var = 0;
for i = 1:96
    out_4800_div = out_4800((1+var):(6+var));
    var = var+6;
    out_4800_6g(i,:) = out_4800_div;
end
out_4800_6g;

% 5-3 Encode with Walsh code.
for i = 1:96
    twos = pow2(5:-1:0);
    ary_4800(i) = sum(out_4800_6g(i,:));
    mod_4800(i,:) = walsh(ary_4800(i)+1,:);
end
mod_4800;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 6. Simulation Display
figure(1)
subplot(2,1,1);
grid on, stairs(bit),axis([-0 96 -0.2 1.2]), title('Information bits(4.8 kbps)');

subplot(2,1,2);
grid on, stairs(fr_4800_bits),axis([0 96,-0.2 1.2]),title('Frame length = 96 bits');

figure(2)
subplot(2,1,1);
grid on, stairs(output),axis([0 288 -0.2 1.2]),title('Convolutional encoder(288 symbols)');

subplot(2,1,2);
grid on, stairs(rep_4800),axis([0 576 -0.2 1.2]),title('Repetition symbols(576 symbols)');

figure(3)
subplot(2,1,1);
grid on, stairs(out_4800),axis([0 576 -0.2 1.2]),title('Block intereaver(576 symbols)');

subplot(2,1,2);
grid on, stairs(mod_4800),axis([0 96 -0.2 1.2]),title('Orthogonal mod(4800bps)');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -