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

📄 pushbutton100.asv

📁 在matlab下输入guide命令后打开main_main.gig 实现卷积编码
💻 ASV
字号:
clear 
global dt t f df N T
close all
clear Eb_N0 Pe

N=2^10; %采样点数
L=32;    %每码元的采样点数
M=N/L   %码元数
Rb=2;		%码速率是2Mb/s
Ts=1/Rb;        %码元间隔
dt=Ts/L;        %时域采样间隔
df=1/(N*dt)     %频域采样间隔
T=N*dt          %截短时间
Bs=N*df/2       %系统带宽
alpha=0.5 	%滚降系数
fc=15
t=linspace(-T/2,T/2,N); %时域横坐标
f=linspace(-Bs,Bs,N)+eps;   %频域横坐标

%升余弦
hr1=sin(pi*t/Ts)./(pi*t/Ts);
hr2=cos(alpha*pi*t/Ts)./(1-(2*alpha*t/Ts).^2);
hr=hr1.*hr2;
HR=abs(t2f(hr));%取模是为了忽略时延
GT=sqrt(HR);
GR=GT;

for loop1=1:10
    Eb_N0(loop1)=(loop1-1);  %Eb/N0 in dB
    eb_n0(loop1)=10^(Eb_N0(loop1)/10);
    Eb=1;	
    n0=Eb/eb_n0(loop1); %信道的噪声谱密度   
    sita=n0*Bs; %信道中噪声功率
    
    n_err=0;     %误码计数
    for loop2=1:3            %循环3次求Pe取平均值
        s4=round(rand(1,M));
        s5=zeros(1,M/2); %串并变换
        s6=zeros(1,M/2);
        s7=zeros(1,M/4); %数摸变换
        s8=zeros(1,M/4);
        for i=1:M/2,         %%第1路
            s5(i)=s4(2*i-1);    
        end
        for k=1:M/4
            if (s5(2*k-1)==0)&(s5(2*k)==0),   %数摸变换
                s7(k)=-3;
            elseif (s5(2*k-1)==0)&(s5(2*k)==1),
                s7(k)=-1;
            elseif (s5(2*k-1)==1)&(s5(2*k)==1),
                s7(k)=1;
            else 
                %         (s5(2*k-1)==1)&(s5(2*k)==0),
                s7(k)=3;
            end
        end
        imp1=zeros(1,N);    %产生冲激序列
        imp1(2*L:4*L:N)=s7/dt;
        IMP1=t2f(imp1);
        
        %%第二路
        for j=1:M/2,
            s6(j)=s4(2*j);
            %         m=2i-1;    
        end
        
        for m=1:M/4
            if (s6(2*m-1)==0)&(s6(2*m)==0),   %数摸变换
                s8(m)=-3;
            elseif (s6(2*m-1)==0)&(s6(2*m)==1),
                s8(m)=-1;
            elseif (s6(2*m-1)==1)&(s6(2*m)==1),
                s8(m)=1;
            else 
                %         (s6(2*m-1)==1)&(s6(2*m)==0),
                s8(m)=3;
            end
        end
        imp2=zeros(1,N);    %产生冲激序列
        imp2(2*L:4*L:N)=s8/dt;
        IMP2=t2f(imp2);
        
        
        s9=real(f2t(IMP1.*GT));
        s10=real(f2t(IMP2.*GT));
        s11=s9.*(sqrt(2)*cos(2*pi*fc*t));
        s12=-s10.*(sqrt(2)*sin(2*pi*fc*t));
        s13=s11+s12;
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%%%%%%%%%%%%%%%%%%%%%进入信道%%%%%%%%%%
        %%%%%%%%%%%%%%%%%%%%%%%调制完成%%%%%%%%%%%%%%%%%%%
        
        s15=s13+n0;
        s16=s15.*(sqrt(2)*cos(2*pi*fc*t));
        s17=-s15.*(sqrt(2)*sin(2*pi*fc*t));
        s18=real(f2t(t2f(s16).*GR));   %解调信号1
        s19=real(f2t(t2f(s17).*GR));   %解调信号2
        s1818=s18(2*L:4*L:N);		  %取样1
        s1919=s19(2*L:4*L:N);		  %取样2
        
        
        %%%%%%%%%%%判决%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        s20=zeros(1,M/2); %判决结果
        s21=zeros(1,M/2);
        for ii=1:M/4
            if  s1818(ii)>=2       %判决1
                s20(2*ii-1)=1; s20(2*ii)=0;
            elseif s1818(ii)>0
                s20(2*ii-1)=1;  s20(2*ii)=1;
            elseif s1818(ii)>-2
                s20(2*ii-1)=0;  s20(2*ii)=1;
            else
                s20(2*ii-1)=0; s20(2*ii)=0;
            end
        end
        
        for ii=1:M/4
            if  s1919(ii)>=2       %判决2
                s21(2*ii-1)=1; s21(2*ii)=0;
            elseif s1919(ii)>0
                s21(2*ii-1)=1;  s21(2*ii)=1;
            elseif s1919(ii)>-2
                s21(2*ii-1)=0;  s21(2*ii)=1;
            else
                s21(2*ii-1)=0; s21(2*ii)=0;
            end
        end   
        
        s22=zeros(1,M);%并串变换
        for n=1:2:M-1
            s22(n)=s20((n+1)/2);
            s22(n+1)=s21((n+1)/2);
        end
        
        n_err=n_err+length(find(s22~=s4))  ;
    end
    Pe(loop1)=n_err/(M*loop2);      %平均误码率=误码总数/(码元数×循环次数)
    figure(100) 
    semilogy(Eb_N0,Pe,'g');
    eb_n0=10.^(Eb_N0/10);
    hold on
    semilogy(Eb_N0,1.5*erfc(sqrt(0.5*eb_n0)));
    axis([0,9,1e-4,1])
    xlabel('Eb/N0')
    ylabel('Pe')
    legend('实际误比特率曲线','理论误比特率曲线')
end

⌨️ 快捷键说明

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