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

📄 mequal_estimation_bit_improve.m

📁 Convolution_decoder_bit_by_bit for DS-UWB is revising信号模板的估计
💻 M
📖 第 1 页 / 共 4 页
字号:
			buf_len = zeros(K,buflength);
			a_buf(1:K,1:buflength/2+1,1:nstates)=aa(1:K,(PN-buflength)/2+1:PN/2+1,1:nstates);
			%errord = zeros(1,M+PN);
			%u = zeros(M,fix(bit_extension/fs)); 
			% i_end=(length(encoderout)-PN)/2+1;%解码次数,前buflength/2次是训练比特,不计。
			out_up=zeros(K,block+buflength/2);
			out_down=zeros(K,block+buflength/2);
			out=zeros(K,block+buflength/2);
			
               
			buf_len(1:K,1:buflength) =soft_PNandData(1:K,2*(nn-1)*(PN/2+block)+PN-buflength+3:2*(nn-1)*(PN/2+block)+PN+2);% 偏移2比特
			
			beg1 = (nn-1)*(PN/2+block)+PN/2+2;
			beg2 = (nn-1)*(PN/2+block)+PN/2+block+buflength/2+1;
			%template_signal1(1:K,:)=template_signal(1:K,:);
            
			for i = beg1:beg2  %(length(encoderout)-PN)/2+1-3 % 信息比特数,每次读2比特。
              
                    u1 = zeros(1,fix(bit_extension/fs)); 
                    u2 = zeros(1,fix(bit_extension/fs)); 
				
                                         %假设i时,信道发生改变
                        
                        %-----------------信道的时变特性--------------------------
						%此处根据信道时变特性对生成的信道进行的修改	
						%假设信道仅有10%发生变化并且最强的脉冲没有变化,取消该假设
						% 
                      for jj = 1:K                %根据信道1的改变,改变v(:,,:)的值
                           if i == variance_position(1,jj) 
						    NumOfTimevariance(jj)=ceil( NumOfMultipath(jj)*variance_rate ); %信道1冲击的改变
						
							  for channel_loop= 1 : NumOfTimevariance(jj)
								  while 1                            %选择那条脉冲变化
                                    X=floor(rand(1)*1000);
                                    if  X < tailend && X ~= 0 
                                        break;
                                    end
								  end
								
								  while 1                            %脉冲的新位置          
                                    New_P=floor(rand(1)*1000);
                                    if  New_P < tailend && New_P ~= 0 
                                        break;
                                    end
								  end			
								XX=mod(X,2);
								path_sign=sign(random('norm',0,1));             %冲击响应改变时,多径增益变化的符号
								path_gain=(0.5+XX);                             %冲击响应改变时,多径幅度变化                            
								% 	Channel_Out_Data(1,New_P)=Channel_Out_Data(1,X);               %多径位置的变化
								Channel_Out_Data(jj,X)=Channel_Out_Data(jj,X)*path_gain*path_sign;        %多径增益的变化
							end
                            
			                for ii = 1:(fix(tailend/fs))                %根据信道1的改变,改变zkj(1,:)的值
                            
                                zkj(jj,ii) = Channel_Out_Data(jj,fs*ii);
                            
                            end
                        
						    %------------------------------------------------------------------					
							% Parse the signal zkj into overlapping segments v
						    for ii = 1:fix(tailend/90)-(across-1)
                                
                                for kk = 1:fix(bit_extension/fs) 
                                    
                                    v(ii,kk,jj) = zkj(jj,kk+(ii-1)*fix(90/fs));             %   V就是窗口长度截取的数据V(1~20,180,USER),(1 2) (2 3) (3 4)......
                                    
                                end
                                
                            end
%                             
%                         else
%                             break;
%                         end
                        
                     end   %结束信道的时变特性  %假设在(beg1+beg2)/2时,信道发生改变
                    %结束信道的时变特性  对应  if i == variance_position(1,jj) 
                   end   %jj 
                        
                    for j = 1:K % 叠加各个用户的有用信号,这时最大能量区间可能已经改变,但因为不重新同步,所以仍采用原来的区间datav。
                            
                        t = min(2*i-1,datav(j,3)-datav(j,2)+1);
                        
                        for kk = (datav(j,1)-datav(j,2)+1):1:t
                           
                            u1 = u1 + encoder_positive_nagetive(j,2*i-1-kk+1)*v((kk+datav(j,2)-1),:,j);
                            
                        end
                         t = min(2*i,datav(j,3)-datav(j,2)+1);
                        
                        for kk = (datav(j,1)-datav(j,2)+1):1:t
                           
                            u2 = u2 + encoder_positive_nagetive(j,2*i-kk+1)*v((kk+datav(j,2)-1),:,j);
                            
                        end
                          
                    end   %j
                    %plot(u)
                    
                    if(open==1) % 考虑高斯噪声
                        
                        u1 = u1 + noise;
                        
                        tempnoise1 = noise(fix(90/fs)+1:fix(bit_extension/fs));
                        
                        tempnoise2 = normrnd(MU,SIGMA);
                        
                        noise = tempnoise2;
                        
                        noise(1:round((across-1)*90/fs)) = tempnoise1;
                        
                        u2 = u2 + noise;
                        
                        tempnoise1 = noise(fix(90/fs)+1:fix(bit_extension/fs));
                        
                        tempnoise2 = normrnd(MU,SIGMA);
                        
                        noise = tempnoise2;
                        
                        noise(1:round((across-1)*90/fs)) = tempnoise1;
                        
                    end
                    % plot(u)
                    
                    
    
                 
                    %移位寄存u1,u2的值,用于后面信道估计
                    for mm= 1 : buflength/2
                        temp_variant( 2*mm-1,:) = temp_variant( 2*(mm+1)-1,:);
                        temp_variant( 2*mm,:) = temp_variant( 2*(mm+1),:);
                    end
                    temp_variant( buflength+1,:) = u1;
                    temp_variant( buflength+2,:) = u2;

                    
                  %相关处理,去除多用户及噪声干扰,接收信号数据用模版相关  
                  % if i>beg1+buflength+150     


                        for j=1:K
                            template_signal1(j,:)=v( datav(j,2) , 1:180 , j );%加入理想模板,平时不用,注释掉!!!!!========================================
                            template_u1(j,:) = template_signal1(j,:).*u1;
                            template_u2(j,:) = template_signal1(j,:).*u2;
                        end
%                     else
%                         for j=1:K
%                             template_u1(j,:) = u1;
%                             template_u2(j,:) = u2;
%                         end
% 
%                     end
                    %adjust u1,u2 end
  
                  if   algorithp==1           % input('输入采用何种算法更新判决权系数[0-LMS,1-RLS,2-LMS_modify] algorithd =‘ ');
                    
                        for jj = 1:K
                            pai(jj,:) = template_u1(jj,:) * P(:,:,jj);     % for all users u1
                            k(:,jj) = pai(jj,:)'/( nmda+pai(jj,:) * template_u1(jj,:)' );    % for all users
                            soft_PNandData(jj,2*i-1) = template_u1(jj,:) * w(:,jj);
                            w(:,jj) = w(:,jj) + (sign(soft_PNandData(jj,2*i-1)) - soft_PNandData(jj,2*i-1))*k(:,jj); % for different users ,RLS,change
                            P(:,:,jj) = (P(:,:,jj)-k(:,jj)*pai(jj,:))/nmda; % for all users u2
                        end
                                        
                        for jj = 1:K
                            
                            pai(jj,:) = template_u2(jj,:) * P(:,:,jj);% for all users
                            k(:,jj) = pai(jj,:)'/( nmda+pai(jj,:) * template_u2(jj,:)' ); % for all users
                            soft_PNandData(jj,2*i)=template_u2(jj,:)*w(:,jj);
                            w(:,jj) = w(:,jj) + (sign(soft_PNandData(jj,2*i)) - soft_PNandData(jj,2*i))*k(:,jj); % for different users ,RLS,change
                            P(:,:,jj) = (P(:,:,jj)-k(:,jj)*pai(jj,:))/nmda; % for all users u2
                        end

                
                         
						%---------------译码-------------------------------
                        %此部分内容和前面相似
                        %在此之后的内容已看懂
						for ii=1:nstates
                          
                            bb(1:K,ii)=1.0/(2*block);
						end
						
						for jj =1:K
                                 x(jj,i-1)=soft_PNandData(jj,2*i-1);
                                 y(jj,i-1)=soft_PNandData(jj,2*i);
                                 var1=computevariance(x);
                                  if (var1<= 0.01)
                                   var1=0.01;
                               end
                                 var2=computevariance(y);
                                  if (var2<= 0.01)
                                   var2=0.01;
                               end
                                 Lc1(jj)=2/var1;
                                 Lc2(jj)=2/var2;
                                 
                         %compute the value of b
                                for kk=buflength/2:-1:2
                                  factor=0;
                                  for fm=1:8   %前一个状态
                                   temp(fm)=0;
                                    for m=1:8  %后一个状态
                                      if (judge(fm,m)==0)
                                        gama_with_info=0;
                                      else
                                        x_up=(2*d(fm,m,1)-1);  %*(0.1746);
							            x_down=(2*d(fm,m,2)-1);%*(0.1746);
                                        gama_with_info=exp(0.5*(x_up*Lc1(jj)*buf_len(jj,2*kk-1)+Lc2(jj)*buf_len(jj,2*kk)*x_down)); 
                                           if (gama_with_info==inf)
                                               gama_with_info=300;
                                           elseif(gama_with_info>300)
                                               gama_with_info=300;
                                           
                                           end
                                      end
                                    %factor=factor+gama_with_info*a(k,fm);
									temp(fm)=temp(fm)+gama_with_info*bb(jj,m);  
                                      if (temp(fm)==inf)
                                        temp(fm)=300;
                                      end
                                  
                                   end%m
                                   factor=factor+temp(fm);
                                 end%fm    
                                 for ii=1:8
								bb(jj,ii)=temp(ii)/factor;
                                 end
                                end   %求bb值结束
                         
						%---compute decode (第i bit)---
                        %compute the output y_up and y_down
						%for k=2:len+1
                            tempu0=0;  %out(k-1)=log(temp1/temp0);						
                            tempu1=0;
                            tempd0=0;
                            tempd1=0;
                            
                            temp0=0;  %out(k-1)=log(temp1/temp0);
                            temp1=0;
                             for m=1:8
                                 for fm=1:8
                                     if (judge(fm,m)==0)
                                        gama_yu0=0;
                                        gama_yu1=0;
                                         gama_yd0=0;
                                        gama_yd1=0;
                                        
                                        gama_yk0=0;
                                        gama_yk1=0;
                                    else
                                        x_up=(2*d(fm,m,1)-1);%*(0.1746);
                                        x_down=(2*d(fm,m,2)-1);
                                        gama_up=exp(0.5*Lc1(jj)*buf_len(jj,1)*x_up);
                                        
                                            if (gama_up==inf)
                                               gama_up=300;
                                           elseif(gama_up>300)
                                               gama_up=300;
                                            end
                                         gama_down=exp(0.5*Lc2(jj)* buf_len(jj,2)*x_down);
                                            if (gama_down==inf)
                                               gama_down=300;
                                           elseif(gama_down>300)
                                               gama_down=300;
                                            end
                                            if (d(fm,m,1)==1)    %Only change here
                                            gama_yu0=0;
                                            gama_yu1=gama_up;
                                            else
                                            gama_yu0=gama_up;
                                            gama_yu1=0;
                                            end
                                            if (d(fm,m,2)==1)   %Only change here
                                            gama_yd0=0;
                                            gama_yd1=gama_down;
                                            else
                                            gama_yd0=gama_down;
                                            gama_yd1=0;
                                           end
                                           
                                            if (c(fm,m)==1)
                                            gama_yk0=0;
                                            gama_yk1=exp(0.5*(Lc1(jj)*buf_len(jj,1)*x_up+Lc2(jj)*buf_len(jj,2)*x_down));%y(x)=0,表示删余。gama_yk=1,对求a(k-1,fm),b(k,m)无影响。
                                            else
                                            gama_yk0=exp(0.5*(Lc1(jj)*buf_len(jj,1)*x_up+Lc2(jj)*buf_len(jj,2)*x_down));
                                            gama_yk1=0;
                                            end
                             
                                            if (gama_yk0==inf)
                                               gama_yk0=300;
                                           elseif(gama_yk0>300)
                                               gama_yk0=300;
                                            end
                                            
                                            if (gama_yk1==inf)
                                               gama_yk1=300;

⌨️ 快捷键说明

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