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

📄 msk_april_21st.asv

📁 5扩32 扩频方法仿真 进行SNR估计 产生pn码 基带仿真
💻 ASV
字号:
%5_32 基带 数据段仿真程序
clc
clear all
fprintf('begin,%s\n',datestr(now))
%设置相关参数
%%%%%%%%%%%%%%%%%%%%%%%
Fc=70e+6;
Fb=5e+6; %码片速率
Fs=40e+6;
N=1e4;   %单次产生数据块个数
Loop = 1e0;
NUM_pulse_snr = 10;

SW_ADD_NOISE = 1;           %加噪开关              1:开  0: 关
SW_MULTI = 0;               %多径开关              1:加入多径
%%%%%%%%%%%%%%%%%%%%%%%%

%产生PN码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pn_matrix = pn_code;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
%对PN码进行扩频和采样  基带仿真!!!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
NUM_pn = size(pn_matrix,1);                                %pn码个数
LEN_pn_mod = size(pn_matrix,2) * Fs / Fb;                  %pn码经调制后的数据长度
len_wave_per_symbol = LEN_pn_mod + LEN_pn_mod * 6.6 / 6.4; %加入保护间隔后数据长度
pn_spread = zeros(NUM_pn,LEN_pn_mod);                      %存储pn调制后的基带数据
for ii = 1 : NUM_pn
    pn_spread(ii,:)  = msk_mod_baseband(pn_matrix(ii,:),Fb,Fs);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

jjj = 1;
ber_snr_table = zeros(4,20);
for Eb_No = 0:10
    ber_snr_table(1,jjj) = Eb_No;
    snr = Eb_No + 10 * log10(5/32)- 10 * log10(Fs/Fb);
    
    snr = ;
    
    ber_snr_table(2,jjj) = Eb_No + 10 * log10(5/32);

    num_err_total = 0; %总的误码数
    for kk = 1:Loop
        %产生信源
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        % source=randsrc(N,5,[1,0;0.5,0.5]);%N为信源码元数目
        source_origin = randint(1,N*5);
        source = reshape(source_origin,5,N);

        
        source_msk_mod = zeros(1,len_wave_per_symbol*N);

        source_dec = 16 * source(1,:) + 8 * source(2,:) + 4 * source(3,:) + 2 * source(4,:) + source(5,:);
        for  k = 1:N
            source_msk_mod(1,((k-1)*(len_wave_per_symbol)+1):((k-1)*(len_wave_per_symbol)+LEN_pn_mod)) = pn_spread(source_dec(1,k)+1,:);                 
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
        
        %加入多径  
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        if SW_MULTI == 1;  
            s_multi = chan_multipath(source_msk_mod,Fs,[0   2e-6   3e-6],[0 -3 -6]);
        else
            s_multi = source_msk_mod;
        end;
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        %加噪声
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        if SW_ADD_NOISE == 1   
            linear_snr = 10^(snr/10);      %加复噪声
            I_signal_power = var(real(s_multi)) + (mean(real(s_multi))).^2;
            I_noise_sima = I_signal_power/linear_snr;
            I_noise_sima = I_noise_sima * (6.4+6.6) / 6.4;%平均功率只计算传送有用信号的时间
            I_noise = randn(1,length(s_multi)) * sqrt(I_noise_sima);

            Q_signal_power = var(imag(s_multi)) + (mean(imag(s_multi))).^2;
            Q_noise_sima = Q_signal_power/linear_snr;
            Q_noise_sima = Q_noise_sima * (6.4+6.6) / 6.4;
            Q_noise = randn(1,length(s_multi)) * sqrt(Q_noise_sima);    

            s_chan = s_multi + I_noise + 1j * Q_noise;
        else
            s_chan = s_multi;
        end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        
        %SNR estimation
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        xi = zeros(1,NUM_pulse_snr*LEN_pn_mod);
        for ii= 1 : NUM_pulse_snr
            xi((ii-1)*LEN_pn_mod+1 : ii*LEN_pn_mod) = s_chan((ii-1)*len_wave_per_symbol+1 : (ii-1)*len_wave_per_symbol+LEN_pn_mod);
        end
        xi_mod2 = real(xi).^2 + imag(xi).^2;
        mu = mean(xi_mod2);
        sigma2 = var(xi_mod2);        
        z = sigma2/mu.^2;
        snr_estimated = -10 * log10(sqrt(1/(1-z))-1);
        
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        
        %数据解调
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        out_bit=zeros(1,N*5);
        for iii=1 : N
            temp0 = s_chan((iii-1)*len_wave_per_symbol+1 : (iii-1)*len_wave_per_symbol+LEN_pn_mod);    
            corr = temp0 * pn_spread';
            corr_whole=abs(corr);
            [aaa,number]=max(corr_whole);
            if(1 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 0 0 0];
            elseif(2 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 0 0 1];
            elseif(3 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 0 1 0];
            elseif(4 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 0 1 1];
            elseif(5 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 1 0 0];
            elseif(6 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 1 0 1];
            elseif(7 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 1 1 0];
            elseif(8 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 0 1 1 1];
            elseif(9 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 0 0 0];
            elseif(10 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 0 0 1];
            elseif(11 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 0 1 0];
            elseif(12 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 0 1 1];
            elseif(13 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 1 0 0];
            elseif(14 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 1 0 1];
            elseif(15 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 1 1 0];
            elseif(16 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[0 1 1 1 1];
            elseif(17 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 0 0 0];
            elseif(18 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 0 0 1];
            elseif(19 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 0 1 0];
            elseif(20 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 0 1 1];
            elseif(21 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 1 0 0];
            elseif(22 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 1 0 1];
            elseif(23 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 1 1 0];
            elseif(24 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 0 1 1 1];
            elseif(25 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 0 0 0];
            elseif(26 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 0 0 1];
            elseif(27 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 0 1 0];
            elseif(28 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 0 1 1];
            elseif(29 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 1 0 0];
            elseif(30 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 1 0 1];
            elseif(31 == number)
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 1 1 0];
            else
                out_bit(1,(iii-1)*5+1:(iii-1)*5+5)=[1 1 1 1 1];
            end
        end;
        num = sum(abs(source_origin - out_bit));
        num_err_total = num + num_err_total;
    end
    ber = num_err_total /(5*N*Loop);
    ber_snr_table(3,jjj) = ber;
    ber_snr_table(4,jjj) = num_err_total;
    jjj=jjj+1;
    fprintf('Eb_No = %d dB, %s\n', Eb_No, datestr(now))
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%画出误码率~信噪比曲线
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
figure 
% hold
semilogy(ber_snr_table(1,:),ber_snr_table(3,:),'o-')
title(['5 expanded to 32 基带数据段仿真 脉冲发送 采样率',num2str(Fs/1e6),'MHZ E_b/N_o'])
xlabel('E_b/N_o')
ylabel('BER')
figure 
semilogy(ber_snr_table(2,:),ber_snr_table(3,:),'o-')
title(['5 expanded to 32 基带数据段仿真 脉冲发送 采样率',num2str(Fs/1e6),'MHZ SNR'])
xlabel('SNR')
ylabel('BER')
fprintf('end,%s\n',datestr(now))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


⌨️ 快捷键说明

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