MATLAB: Given below in this code,the error is; Index exceeds matrix dimensions in line 27. Error (Rt(k,n)=R​c.*(log2(1​+((1.6.*y.​*(norm(H(k​,n))).^2)/​(2.*log(0.​2./BERt)))​));.Please help me to remove this error.

please check my loops.my paper is "performance analysis of scheduling schemes for rate-adaptive mimo osfbc-ofdm systems."

clc;
close all;
clear all;
nt=2; %No. of Transmitting antenna
nr=1; %No. of Receiving antenna
Rc=1; %OSTBC code rate (for Alamouti code G2)
N0=10^-9; %
Es=10^4; %Energy of symbol
T=0.2; %adjuster between proportional faieness and throughput
k=[1 2 4 8 16 32];%no. of users
for i1=1:1:k
K=length(i1) %Kth user
end
%m %best user i.e user with the largest channel SNR
N=1:1:128; %frequency (1:1:128)
L=8; %mode of modulation(Discrete rate mode)
BERt=10^-4;
y=Es/N0;
for n=1:1:128
for m=1:1:6
h1=abs(sqrt(0.5)*(randn(k,n)+sqrt(-1).*randn(k,n))); %Channel
h2=abs(sqrt(0.5)*(randn(k,n)+sqrt(-1).*randn(k,n)));
H=[h1 h2]; %channel matrix
for j=1:1:nr
for i=1:1:nt
Rt(k,n)=Rc.*(log2(1+((1.6.*y.*(norm(H(k,n))).^2)/(2.*log(0.2./BERt)))));
Rt1(k,n)=mean(Rt(K,n));
for k=m
Rt2(k,n)=((1-(1./T)).*Rt1(k,n))+((1./T).*Rt(k,n));
end
for k=~m
Rt2(k,n)=(1-(1./T)).*Rt1(k,n);
end
m(k,n)=arg(max(Rt(k,n)./Rt1(k,n)));
bl(m,n)=randi([0 8],m,n);
gl=1.6/(nt.*Rc.*((2^bl(m,n))-1));
z=(((i+1).*nt.*Rc)/y)+gl;
snr(k,n)=(Es/(N0*nt*Rc)).*((norm(H(k,n))).^2); %instantaneous SNR
snrdb(k,n)=10.*log10(snr(k,n));
end
end
for l=1:8
for i=1:33
for t=1:i+1
if t==0
a_ti=1;
elseif t==1
a_ti=i;
elseif 2<=t && t<i
for k=1:min(t,1)
a_ti=(1/t)*(((k*(i+1)-t)/factorial(k)).*(a_t-ki));
end
else t=i;
a_ti=(factorial(1))^(-i);
end
end
if l==1
rl=0.5.*(qfuncinv(qfunc(10^-4))^2);
elseif l==2:L
rl=-((2^l-1)/1.5)*log(5*10^-4);
else l==L+1
rl=1/0;
end
if l==1
rlj=0.5.*(qfuncinv(qfunc(10^-4)).^(2.*j));
elseif l==2:1:L
rlj=(-((2^l-1)/1.5)*log(5*10^-4)).^j;
else l==L+1
rlj=1/0;
end
if (l+1)==1
rl1=0.5.*(qfuncinv(qfunc(10^-4)).^2);
elseif l+1==2:1:L
rl1=-((2^(l+1)-1)/1.5)*log(5*10^-4);
else l+1==L+1;
rl1=1/0;
end
if (l+1)==1
rl1j=0.5.*(qfuncinv(qfunc(10^-4))^(2.*j));
elseif l+1==2:L
rl1j=(-((2^(l+1)-1)/1.5)*log(5*10^-4))^j;
else l+1==L+1;
rl1j=1/0;
end
for j=1:t+2
BERl(m,n)=(0.2.*K).*(((factorial(K-1))./(factorial(K-1-i).*factorial(i))).*((-1).^i)).*(a_ti).*((2./y)^(t+2)).*(exp((-z).*rl)).*((factorial(t+1).*rlj)./((factorial(j)).*(z^(t+2-j))))-(exp(-z.*rl1)).*(((factorial(t+1)).*rl1j)/((factorial(j)).*(z^(t+2-1))));
end
ASE(m,n)=(Rc/N).*(bl(m,n)).*(factorial(K)/(factorial(K-i).*factotial(i))).*((-1).^i).*(((a_ti).*((nt.*Rc.*rl1/y).^t).*(exp(-i.*nt.*Rc.*rl1/y)))-(((nt.*Rc.*rl/y).^t).*(exp(-i.*nt.*Rc.*rl/y))));
BER(m,n)=1/(N.*ASE(m,n)).*bl(m,n).*BERl(m,n);
end
end
end
end
plot(snrdb,ASE);
xlabel('Average SNR');
ylabel('Average Spectral Efficiency(b/s/Hz)');
title('ASE versus Average SNR');

Best Answer

No, your code does not get that far.
In your lines near line 22 such as
h1=abs(sqrt(0.5)*(randn(k,n)+sqrt(-1).*randn(k,n))); %Channel
you need to be indexing k with m because your k is a vector and you cannot pass a vector as the first parameter to randn()
Related Question