📄 reverseaccess.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 + -