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

📄 duo_jing_5.m

📁 短波跳频信号协议仿真,考虑了 多径的影响,协议传输的准确性
💻 M
字号:
% 编一个统计qpsk调制的误码率程序;
% clc; clear all; close all;
ray_factor=0.25;
% 发送的二进制点数;
N=480; m=10;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 下面的程序只设置五条多径;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

snr_plot=-20:20;
rate_winning_1=[];

for snr=-20:20
        counter_n=0;
    for loop_n=1:100
        % 初始是0101的代码;
        input_signal=ceil(rand(1,N)-0.5);
        % 再转化为+-1的双极性码;
        input_signal=sign(input_signal-0.5);

        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        % 很关键的一点就是:
        % 设置基带信号的采样点数,用于将来的延迟设置
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        % 模拟发送信号;一路二进制比特信号被分成两路sin和cos正交的信号,
        % 这两路信号是不会相互干扰的,两路信号分别有延迟和噪声;
        for i=1:2:size(input_signal,2)-1
            channel_i((i+1)/2)=input_signal(i);
        end;
        for i=2:2:size(input_signal,2)
            channel_q((i)/2)=input_signal(i);
        end;

        % 转化为发送信号的形式;
        channel_i_i=symbol_sample(channel_i,m);
        channel_q_q=symbol_sample(channel_q,m);


        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        % 经过瑞利多径信道后的结果
        % 加噪声;
        sigma=sqrt(1/10^(snr/10));
        channel_i_ray=Rayleigh_DuoJing...
            (channel_i_i,sigma,5,ray_factor,[0,1,2,3,4],[0,-1,-2,-3,-4]);
        channel_q_ray=Rayleigh_DuoJing...
            (channel_q_q,sigma,5,ray_factor,[0,1,2,3,4],[0,-1,-2,-3,-4]);
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        % 以下是检测部分;
        matrix_4=[ones(m,1),ones(m,1),(-1)*ones(m,1),(-1)*ones(m,1);
            ones(m,1),(-1)*ones(m,1),ones(m,1),(-1)*ones(m,1)];

        output_signal=zeros(2,size(input_signal,2)/2);

        for i=1:size(input_signal,2)/2
            i_q=[channel_i_ray((i-1)*m+1:i*m),...
                channel_q_ray((i-1)*m+1:i*m)];
            temp_i_q=i_q*matrix_4;
            max_i_q=max(i_q*matrix_4);
            if temp_i_q(1)==max_i_q
                output_signal(:,i)=[1;1];
            elseif temp_i_q(2)==max_i_q
                output_signal(:,i)=[1;-1];
            elseif temp_i_q(3)==max_i_q
                output_signal(:,i)=[-1;1];
            elseif temp_i_q(4)==max_i_q
                output_signal(:,i)=[-1;-1];
            end;
        end;

        end_out=[];% 最后输出的比特信息;
        for i=1:size(input_signal,2)/2
            temp_out=output_signal(:,i)';
            end_out=[end_out,temp_out];
        end;

        xx=find(input_signal-end_out);
        x_len=length(xx);
        ber_temp_1=x_len/N;
        if ber_temp_1<0.1
           counter_n=counter_n+1;
        else counter_n=counter_n;
        end;
    end;
    temp_winning=counter_n/100;
    rate_winning_1=[rate_winning_1,temp_winning];
end;
figure;
semilogy(snr_plot,rate_winning_1,'b^-'); hold on; grid on;




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 上面的门限是0.9,下面的门限是0,95;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%





ray_factor=0.25;
% 发送的二进制点数;
N=480; m=10;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 下面的程序只设置五条多径;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

snr_plot=-20:20;
rate_winning=[];

for snr=-20:20
        counter_n=0;
    for loop_n=1:100
        % 初始是0101的代码;
        input_signal=ceil(rand(1,N)-0.5);
        % 再转化为+-1的双极性码;
        input_signal=sign(input_signal-0.5);

        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        % 很关键的一点就是:
        % 设置基带信号的采样点数,用于将来的延迟设置
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        % 模拟发送信号;一路二进制比特信号被分成两路sin和cos正交的信号,
        % 这两路信号是不会相互干扰的,两路信号分别有延迟和噪声;
        for i=1:2:size(input_signal,2)-1
            channel_i((i+1)/2)=input_signal(i);
        end;
        for i=2:2:size(input_signal,2)
            channel_q((i)/2)=input_signal(i);
        end;

        % 转化为发送信号的形式;
        channel_i_i=symbol_sample(channel_i,m);
        channel_q_q=symbol_sample(channel_q,m);


        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        % 经过瑞利多径信道后的结果
        % 加噪声;
        sigma=sqrt(1/10^(snr/10));
        channel_i_ray=Rayleigh_DuoJing...
            (channel_i_i,sigma,5,ray_factor,[0,1,2,3,4],[0,-1,-2,-3,-4]);
        channel_q_ray=Rayleigh_DuoJing...
            (channel_q_q,sigma,5,ray_factor,[0,1,2,3,4],[0,-1,-2,-3,-4]);
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

        % 以下是检测部分;
        matrix_4=[ones(m,1),ones(m,1),(-1)*ones(m,1),(-1)*ones(m,1);
            ones(m,1),(-1)*ones(m,1),ones(m,1),(-1)*ones(m,1)];

        output_signal=zeros(2,size(input_signal,2)/2);

        for i=1:size(input_signal,2)/2
            i_q=[channel_i_ray((i-1)*m+1:i*m),...
                channel_q_ray((i-1)*m+1:i*m)];
            temp_i_q=i_q*matrix_4;
            max_i_q=max(i_q*matrix_4);
            if temp_i_q(1)==max_i_q
                output_signal(:,i)=[1;1];
            elseif temp_i_q(2)==max_i_q
                output_signal(:,i)=[1;-1];
            elseif temp_i_q(3)==max_i_q
                output_signal(:,i)=[-1;1];
            elseif temp_i_q(4)==max_i_q
                output_signal(:,i)=[-1;-1];
            end;
        end;

        end_out=[];% 最后输出的比特信息;
        for i=1:size(input_signal,2)/2
            temp_out=output_signal(:,i)';
            end_out=[end_out,temp_out];
        end;

        xx=find(input_signal-end_out);
        x_len=length(xx);
        ber_temp_1=x_len/N;
        if ber_temp_1<0.05
           counter_n=counter_n+1;
        else counter_n=counter_n;
        end;
    end;
    temp_winning=counter_n/100;
    rate_winning=[rate_winning,temp_winning];
end;
semilogy(snr_plot,rate_winning,'r*-.'); grid on;
title('协议单次传输正确接受概率');
xlabel('Eb/No(dB)'); ylabel('正确接受概率');
legend('正确检测门限0.9','正确检测门限0.95');

⌨️ 快捷键说明

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