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

📄 awgn_1213.m

📁 这是个扩频系统中的PN码仿真程序
💻 M
字号:
%通信信号处理作业
%
%百噪声情况下CDMA误码率
%
%
% clear;clc;%close all;
function pe_awgn=awng_cdma_pe(SNR)
err_num=0;
data_bit_length=0;
while
   err_num<10
    N=200;
    Lc=15%扩频增益;
    fd=5.6;
    rate=2400;%码片速率
    if_frequency=1800;%数字上变频1800Hz
    fs=14400;%抽样频率14400Hz
    j=sqrt(-1);
    d=1;
    rand('state',sum(100*clock));
    data_bit=round(rand(1,N));
    modula_data=QPSK_Modulate(data_bit);
    modua_data_I=real(modula_data);
    modua_data_Q=imag(modula_data);
    
    code_type=2;  %0 = random 1 = hadamard 2 = gold生成扩品吗
    code_seed=rand('state'); 
    codes=(cdma_codes(1,0,code_type,Lc,code_seed))'; %cdma_codes(K_in,K_out,code_type,L,code_seed) 
    % codes=[1 1 0 0 0 0 1 0 1 1 0 1 1 1 0];
    I_spread=kron(modua_data_I,codes);%kron函数是张量积生成一个更大的矩阵这里是生成扩频码我想也应该可以用相乘的形式
    Q_spread=kron(modua_data_Q,codes);
    over_sample=[1 0 0 0 0 0];%过抽样,消除isi
    I_spread_samp=kron(I_spread,over_sample);
    Q_spread_samp=kron(Q_spread,over_sample);
    % num=rcosine(2400,14400,'sqrt',0.2);
    num=rcosfir(0.2,6,6,1/rate,'sqrt');%成型滤波
    I_rcosed_delay=conv(I_spread_samp,num);
    Q_rcosed_delay=conv(Q_spread_samp,num);
    
    for i=1:length(I_spread_samp)%产生周期为36的信号
        I_rcosed(i)=I_rcosed_delay(i+36);
        Q_rcosed(i)=Q_rcosed_delay(i+36);
    end

    % % plot(I_rcosed(1:10));
    i=1:length(I_rcosed);
    IF_fre_I=cos(2*pi*if_frequency*(i-1)*(1/fs));%上变频 data_f=14.4/522,所以1.8*522/14.4=65.25就是中心载波所在的位置
    IF_fre_Q=sin(2*pi*if_frequency*(i-1)*(1/fs));
    I_if=I_rcosed.*IF_fre_I;
    Q_if=Q_rcosed.*IF_fre_Q;
    S_I_Q=I_if+Q_if;
    % 
    % % channel=rayleigh2(fd,fs,ns);
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    %信道
    %加入噪声
    % SNR=0;
    E=1;%归一化符号号能量
    E_chip=1;
    E_bit=E/2;
    snr=10^(SNR/10);
    sigma=sqrt(E_chip/(2*snr*4/15));%noise variance  (snr_in bit=E_bit/(N0))
    randn('state',sum(100*clock)+50);
    Noise=sigma*randn(size(S_I_Q));
    S_I_Q=S_I_Q+Noise;
    
    % %数字下变频
    I_down=S_I_Q.*IF_fre_I;
    f1=2*rate/fs;
    low_filter=fir1(34,f1);
    after_low_tem=conv(I_down,low_filter);
    for i=1:length(I_down)
        after_low_I(i)=after_low_tem(i+16);
    end
    % I_down_fft=fft(after_low);%比较滤波前后的频谱
    % figure(1);
    % plot(abs(I_down_fft));
    % figure(2);
    %plot(abs(fft(I_down)));
    Q_down=S_I_Q.*IF_fre_Q;
    after_low_tem=conv(Q_down,low_filter);
    for i=1:length(Q_down)
        after_low_Q(i)=after_low_tem(i+16);
    end
    % Q_down_fft=fft(Q_down);
    
    I_gr=conv((after_low_I),num);
    Q_gr=conv((after_low_Q),num);
    for i=1:length(I_spread_samp)
        I_after_gr(i)=I_gr(i+36);
        Q_after_gr(i)=Q_gr(i+36);
    end
    % I_down_samp=decimate(I_after_gr,6);
    % Q_down_samp=decimate(Q_after_gr,6);
    
    i=1;%和上两句完成的功能一样
    while (i*6)<=length(I_spread_samp)
        I_down_samp(i)=I_after_gr((i-1)*6+1);
        Q_down_samp(i)=Q_after_gr((i-1)*6+1);
        i=i+1;
    end
    
    % %验证
    % aa=fft(I_rcosed);
    % dd=fft(Q_rcosed);
    % bb=fft(I_down);
    % cc=fft(Q_down);
    % figure(1);
    % plot(abs(aa));
    % figure(2);
    % plot(abs(bb));
    % figure(3);
    % plot(abs(cc));
    % figure(4);
    % plot((abs(dd)));
    data_length=length(I_down_samp);
    length_symbol=round(data_length/Lc);
    for i=1:length_symbol
        tem=I_down_samp((i-1)*(Lc)+1:(i-1)*(Lc)+15);
        tem_sum=sum(tem.*codes);
        symbol_I(i)=tem_sum*2/Lc;
        tem=Q_down_samp((i-1)*(Lc)+1:(i-1)*(Lc)+15);
        tem_sum=sum(tem.*codes);
        symbol_Q(i)=tem_sum*2/Lc;
    end
    symbol=symbol_I+j*symbol_Q;
    
    symbol_demoulate=QPSK_Demodulate(symbol,d);
    err_num1=pe_bit(data_bit,symbol_demoulate);
    err_num=err_num+err_num1;
    data_bit_length=data_bit_length+length(data_bit);
end
pe_awgn=err_num/data_bit_length;
% pe_awgn=pe_bit(data_bit,symbol_demoulate);

⌨️ 快捷键说明

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