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

📄 num3.m

📁 array processing code for communication engineering
💻 M
字号:
clear all;
k=0.5;
N=10;
kn=101*N;
m_carlo=50;
m_ignore=10;
a_step=[0.001  0.0005  0.0001];
dir_signal=0;
dir_gan=0.15;
snr_db=[0];
inr_db=10;
inr_fact=sqrt(10^(inr_db/10));
v = zeros(N,1);
u = zeros(N,1);
n = zeros(N,1);
Rs = zeros(N,N);
Ru = zeros(N,N);
W_lmsend = zeros(N,1);
W_l=zeros(N,1);


for i = 1:N
   v(i) = exp(sqrt(-1)*(-(N+1)/2+i)*2*pi*k*sin(dir_signal));
   u(i) = exp(sqrt(-1)*(-(N+1)/2+i)*2*pi*k*sin(dir_gan));
end 

for i_snr=1:1:length(snr_db)
   snr_fact=sqrt(10^(snr_db(i_snr)/10));
   snr_fact2=10^(snr_db(i_snr)/10);
   signal_power=snr_fact.*exp(j*2*pi*rand);
   gan_power=inr_fact.*exp(j*2*pi*rand);
   Rs=signal_power*v*v'*signal_power';
   Ru=gan_power*u*u'*gan_power'+eye(N);
   R=Rs+Ru;
   
   for j_monte=1:1:m_carlo
      j_monte
      for a_s=1:1:length(a_step)
         W_lms = zeros(N,kn+1);
         W_lms(:,1)=v/N;     
         for temp=1:1:kn
   
           signal_lms = snr_fact.*exp(j*2*pi*rand);
           gan_lms = inr_fact.*exp(j*2*pi*rand);
           signal_lms_w = signal_lms.*((randn+sqrt(-1)*randn)/(sqrt(2)));
           gan_lms_w = gan_lms.*((randn+sqrt(-1)*randn)/(sqrt(2)));
           n = (randn(N,1)+j*randn(N,1))/(sqrt(2));
      
           x_temp = signal_lms_w*v+gan_lms_w*u+n;
           Rx_lms = x_temp*(x_temp');
           W_lms(:,temp+1) = W_lms(:,temp)+a_step(a_s)*(snr_fact2*v-Rx_lms*W_lms(:,temp));
   
           W_lmsend = W_lms(:,temp+1);
           if temp>m_ignore
              diedai(temp-m_ignore) = temp-m_ignore;
              snr_temp = abs((W_lmsend'*Rs*W_lmsend)/(W_lmsend'*Ru*W_lmsend));
              if a_s==1
                 if j_monte==1             
                    snr_vary(i_snr,temp-m_ignore)=10*log10(snr_temp);
                 else
                    snr_vary(i_snr,temp-m_ignore)=((j_monte-1)*snr_vary(i_snr,temp-m_ignore)+10*log10(snr_temp))/j_monte;
                 end
             elseif a_s==2
                 if j_monte==1             
                    snr_varyn(i_snr,temp-m_ignore)=10*log10(snr_temp);
                 else
                    snr_varyn(i_snr,temp-m_ignore)=((j_monte-1)*snr_varyn(i_snr,temp-m_ignore)+10*log10(snr_temp))/j_monte;
                 end
             else
                    if j_monte==1             
                    snr_varynw(i_snr,temp-m_ignore)=10*log10(snr_temp);
                 else
                    snr_varynw(i_snr,temp-m_ignore)=((j_monte-1)*snr_varynw(i_snr,temp-m_ignore)+10*log10(snr_temp))/j_monte;
                 end
              end  
          end
                  
           if temp>m_ignore
             W_l = inv(R)*v*inv(v'*inv(R)*v);
             snr_l_temp = abs((W_l'*Rs*W_l)/(W_l'*Ru*W_l));
             snr_l(i_snr,temp-m_ignore) = 10*log10(snr_l_temp);
           end  
        end  
      end
    end  
end
figure(107);
wyy=10:length(diedai)+9;
wy=log10(wyy);

semilogx(10.^wy,snr_vary(1,:),'r-');
hold on;
semilogx(10.^wy,snr_varyn(1,:),'g:');
hold on;
semilogx(10.^wy,snr_varynw(1,:),'b-.');
hold on;
semilogx(10.^wy,snr_l(1,:),'c*');
hold on;
hold off;
title('SNR=0db,INR=10db');
xlabel('The iterative number');
ylabel('Average SINR(db)');
legend('steplenth=0.001','steplenth=0.0005','steplenth=0.0001','optimum'); 
axis([10,1000,0,31]);
grid on;

⌨️ 快捷键说明

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