Dear J.D.W,
I am shankar gangaju
I am doing a project on MIMOOFDM Beamforming. It will be a great help if i could get related matlab code or any kind of information is very appreciated.
Thanks in advance
On Thursday, September 18, 2008 1:40:49 PM UTC+5:45, jonn...@gmail.com wrote:
> Dear all,
>
> Unfortunately my maths is not very strong at the moment but I'm not
> completely useless. I have been trying to compare some simple wireless
> beamformer simulations.
>
> I have successfully recreated a Signal to leakage ratio (SLR)
> beamformer simulation as discussed in the paper  A. Tarighat, M.
> Sadek and A.H. Sayed, "A Multi User Beamforming Scheme For Downlink
> MIMO Channels Based On Maximizing SignalToLeakage Ratios", IEEE
> ICASP, 2005
>
> the code below produces the same results found in the paper using
> matlab:
>
> clear all
> clc
>
> N=5;
> K=3;
> M=3;
>
>
> imax=1000;
> SNRmin=10;
> SNRmax=10;
>
>
> for SNR=SNRmin:SNRmax
> scf=1/sqrt(10^(SNR*0.1));
> error=0;
> for count=1:imax;
>
> %symbols
> s=sign(randn(K,1))+j*sign(randn(K,1));
> s=s*sqrt(1/2);
>
> %channel
> H1=randn(M,N)+j*randn(M,N); %user 1 channel
> H2=randn(M,N)+j*randn(M,N); %user 2 channel
> H3=randn(M,N)+j*randn(M,N); %user 3 channel
>
> % extended matrices
> Hi1=[H2',H3']'; %for user 1
> Hi2=[H1',H3']'; %user 2
> Hi3=[H1',H2']'; %user 3
> %
>
> [V,D]=eig(H1'*H1,Hi1'*Hi1);
> w1=V(:,N)/sqrt(V(:,N)'*V(:,N));
> [V,D]=eig(H2'*H2,Hi2'*Hi2);
> w2=V(:,N)/sqrt(V(:,N)'*V(:,N));
> [V,D]=eig(H3'*H3,Hi3'*Hi3);
> w3=V(:,N)/sqrt(V(:,N)'*V(:,N));
>
> w=[w1,w2,w3];
>
> %transmit vector x
> x=w*s;
>
> %noise vector
> noise=(randn(M,1)+j*randn(M,1));
>
> %receive vector y
> y=H1*x+noise*scf;
>
> %detection of user 1
> num=(w1'*H1'*y);
> den=(w1'*H1'*H1*w1);
> if den==0
> %den=1;
> else
> r=(sign(real((num/den)))+j*sign(imag((num/
> den))))*sqrt(1/2);
> end
>
> %error of user 1
> if r~=s(1)
> if real(r)~=real(s(1))
> error=error+1;
> end
> if imag(r)~=imag(s(1))
> error=error+1;
> end
> end
>
> end
> BER(SNR+(1SNRmin))=error/(2*imax);
> Xaxis(SNR+(1SNRmin))=SNR
> end
> figure
> semilogy(Xaxis,BER)
> hold on
> xlabel('SNR per recieve antenna (dB)')
> ylabel('Uncoded BER')
> title([' N=',num2str(N),'M=',num2str(M),'K=',num2str(K)]);
>
>
> % the end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
>
>
>
> Now i'm really struggling to recreate an MMSE beamformer (MMSE to find
> the beamforming vector) to compare directly to the above simulation. 3
> types of beamforming equations: MaxSINR, MOE and MMSE. Can be found
> at http://www.comm.utoronto.ca/~rsadve/Notes/BeamForming.pdf
> I'm trying to simulate all but am mainly interested in MMSE.
>
> if anyone can help please contact me, I'm getting desperate...........
> and willing to compensate someone for their time to help me.
>
> below is the matlab code I tried to use to get MOE and max SINR
> beamformers but failed miserably:
>
> clear all
> clc
> % lots of RCOND errors probably due to DMI so added the line
> below to speed things up
> warning off all
>
> N=5;
> K=3;
> M=3;
>
> imax=1000;
> SNRmin=10;
> SNRmax=10;
>
>
> for SNR=SNRmin:SNRmax
> scf=1/sqrt(10^(SNR*0.1));
> error=0;
> for count=1:imax;
>
> %QPSK symbols
> s=sign(randn(K,1))+j*sign(randn(K,1));
> s=s*sqrt(1/2);
>
> %channel
> H1=randn(M,N)+j*randn(M,N); %user 1 channel
> H2=randn(M,N)+j*randn(M,N); %user 2 channel
> H3=randn(M,N)+j*randn(M,N); %user 3 channel
>
> %noise vector for user 1 > 3
> noise1=((randn(M,N)+j*randn(M,N))/N)*scf;
> noise2=((randn(M,N)+j*randn(M,N))/N)*scf;
> noise3=((randn(M,N)+j*randn(M,N))/N)*scf;
> %dividing through by N to make the noise scaleable per receive
> antenna to match other simulations
>
> desired1=s(1,1)*H1;
> interference1=s(2,1)*H2+s(3,1)*H3+noise1;
>
> desired2=s(2,1)*H2;
> interference2=s(1,1)*H1+s(3,1)*H3+noise2;
>
> desired3=s(3,1)*H3;
> interference3=s(2,1)*H2+s(1,1)*H1+noise3;
>
> %correlation matrices for users 1 > 3
> R1=desired1*desired1';
> Rn1=interference1*interference1';
>
> R2=desired2*desired2';
> Rn2=interference2*interference2';
>
> R3=desired3*desired3';
> Rn3=interference3*interference3';
> %
> %beamforming weights
> wmoe1=(inv(R1)*H1)/(H1'*inv(R1)*H1); %moe= minimum output
> energy beamformer
> wsinr1=(inv(Rn1)*H1)/(H1'*inv(Rn1)*H1); %sinr = max sinr
> beamformer
>
> wmoe2=(inv(R2)*H2)/(H2'*inv(R2)*H2);
> wsinr2=(inv(Rn2)*H2)/(H2'*inv(Rn2)*H2);
>
> wmoe3=(inv(R3)*H3)/(H3'*inv(R3)*H3);
> wsinr3=(inv(Rn3)*H3)/(H3'*inv(Rn3)*H3);
> %
> %not sure which line of the weight matrix to use here
> %it should be a 3x5 matrix by looking at the maths but I only
> need
> %1x5 weights, so just using the last line of weights for the
> hell
> %of it.... maybe you know which to use ?
>
> w1=wmoe1(3,:).';
> w2=wmoe2(3,:).';
> w3=wmoe3(3,:).';
> %
>
> %now calculating BER for just user 1, other users not needed
> except for interference purposes
> w=[w1,w2,w3];
> %transmit vector x
> tx=w*s;
>
> %receive vector y at user 1
> y=H1*tx;
>
> %detection of user 1
> num=(w1'*H1'*y);
> den=(w1'*H1'*H1*w1);
> if den==0
> %den=1;
> else
> r=(sign(real((num/den)))+j*sign(imag((num/
> den))))*sqrt(1/2);
> end
>
> %error of user 1
> if r~=s(1)
> if real(r)~=real(s(1))
> error=error+1;
> end
> if imag(r)~=imag(s(1))
> error=error+1;
> end
> end
>
> end
> BER(SNR+(1SNRmin))=error/(2*imax);
> Xaxis(SNR+(1SNRmin))=SNR
> end
> figure
> semilogy(Xaxis,BER)
> hold on
> xlabel('SNR per recieve antenna (dB)')
> ylabel('Uncoded BER')
> title([' N=',num2str(N),'M=',num2str(M),'K=',num2str(K)]);
>
>
> If anyone can help or point me in the right direction I'll be indebted
> to you for a long long time
>
> kindest regards,
>
> J.D.W
