matlab代码

%%%%随机共振参数优化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% close all;
clear;
clc;
% tic
N =200;                        % 每个码元的持续时间
fs=10;                          % 随机共振,龙格库塔算法频率
% n = 10;
%rr = zeros(n,100000);
%M = 1;
SNR_index = -13;                 % 输入信号的信噪比 dB
%load('ns_test');            % 读取码元文件
load('bits_2000')
%%%%load('sim_test')
% bit_num = 100;                  %码元个数
% bits = rand_seed(bit_num);
% save('bits');
%noise_amp =1            % 加性方式添加噪声
 
% AN= 4;          % 噪声范围参数
% noise_ampx=0:0.01:AN;
% AN_x =  noise_ampx.*5;      % 噪声的分辨率

%%  选择调制方式,由数字码元生成波形
signal_set = 'BNRZ'; % either 'BNRZ', 'bpsk2', 'ask', or 'fsk'

if strcmp(signal_set, 'BNRZ')
    signal1 =0.3*ones(1,N);
    signal0 = -signal1;
elseif strcmp(signal_set, 'bpsk1')
    signal1 = ones(1,N);
    signal0 = -signal1;
elseif strcmp(signal_set, 'bpsk2')
    signal1 = sqrt(2)*sin(2*pi*[0:N-1]/N);
    signal0 = -signal1;
elseif strcmp(signal_set,'fsk')
    signal1 = sqrt(2)*sin(2*pi*2*[0:N-1]/N);
    signal0 = sqrt(2)*sin(2*pi*3*[0:N-1]/N);
elseif strcmp(signal_set, 'ask')
    signal1 = 0.3*ones(1,N);
    signal0 = zeros(1,N);

    
else
    perror(sprintf('Unknown signal set %s\n',signal_set));
end
% 
 x = [];    % 信号波形的数组
 y = [];
% 
% 
%
    m=new_bits_two(:,536:536);
    for n=1:length(m)
        %%%%   for n=1:length(simple_test)
        %if bits(n)== 0
        
        if m(n)== 0
            %%%%       if simple_test(n)== 0
            x=[x signal0];
            %x = zeros(1,100);
        else x=[x signal1];
            %else x = ones(1,100);
        end
            
                                                                 
    end
  
    %%  波形添加噪声
    r=noisegen(x,SNR_index);                    % 加入指定信噪比的高斯白噪声
    %r = x + noise_amp*randn(1,length(x));     % 加性方式加噪声,混合信号r
    
    
    %%  随机共振参数
    h=1/fs;              % 时间步长
    % a_move=1;            % 可根据所考察参数,平移输出图形,使其更容易理解
    % b_move=1;
    %for M = 0:0.01:4
    % for j=1:1:10
    %
    %     r = x+ j*randn(1,length(x));
    %
    % for a =0.1:0.1:2       % 遍历参数a,b的取值,求误码率
    %     for b = 0.1:0.1:2
    for a =1:1:5      % 遍历参数a,b的取值,求误码率
        for b = 1:1:5
            %         for M = 1:1:10
            
            %r = x+ sqrt(2*M).*randn(1,length(x));
            %             r = x+ sqrt(2*M).*randn(1,length(x));
            %
            %             data{M} = r;
            c = fix(a);
            d = fix(b);
            %             e = fix(M);
            
            
            %         aa=a+a_move;
            %         bb=b+b_move;
            %         a=a./1;      % 参数的考察精度
            %         b=b./1;      % 参数的考察精度
            
            r1=sr(a,b,h,r);     % 随机共振处理
            %             sr_data{c,d,e} = r1;
            sr_data{c,d} = r1;
            %         a=a.*1;      % 参数的考察精度
            %         b=b.*1;      % 参数的考察精度
            
            r2=-r1;    % 码元判别的中间参数
            
            %for n=1:length(bits)                  %累加,用和做判决
            for n=1:length(m)
                %%%%   for n=1:length(simple_test)
                sum1=0; sum2=0;
                
                for k=N/4:N/1              % 积分判别码元,积分的范围
                    sum1=sum1+r1((n-1)*N+k);
                    sum2=sum2+r2((n-1)*N+k);
                end
                if sum1>= sum2
                    output(1,n)=1;
                    
                else
                    output(1,n)=0;
                end
            end
            %         save output.dat output;
            %  求出判决的值,输出为数列,便于比较计算误码率
            c = fix(a);
            d = fix(b);
            %             e = fix(M);
            error_num=0;
            %for i=1:length(bits)
            for i=1:length(m)
                %%%% for i=1:length(simple_test)
                %if bits(i)~=output(i)
                if m(i)~=output(i)
                    %%%%     if simple_test(i)~=output(i)
                    error_num=error_num+1;      % 统计误码个数
                end
            end
            %error_rate=error_num/length(bits);   % 计算误码率
            error_rate=error_num/length(m);
            %             error_ra(c,d,e)=error_rate;
            error_ra(c,d)=error_rate;
            %error_ra(a,b,j)=error_rate;
        end
    end
    
    
    %% 输出最佳参数及相应的最小误码率
    %BER_min=min(min(error_ra));          %输出最小误码率
    %BER_min=min(min(min(error_ra)));
    BER_min = min(error_ra(:));
    % s=size(error_ra);%计算三维维数组的大小
    % Lin=find(x<=BER_min);%计算最小值位置的单下标
    [min_val, position_min] = min(error_ra(:));
    % [c,d,e] = ind2sub(size(error_ra),position_min);
    [c,d] = ind2sub(size(error_ra),position_min);
    %Lax=find(x>=max_x);%计算最大值位置的单下标
    
    %[j,a,b]=ind2sub(s,Lin);%将最小值单下标转为三维多下标
    
    %[m,n,p]=ind2sub(s,Lax);%将最大值单下标转为三维多下标
    
    %Loc_in=[j,a,b];%最小值位置下标
    
    
    %[best_jj best_aa, best_bb]=find(error_ra==BER_min);      %定位最小误码率时的参数取值%[best_cc, best_dd, best_ee]=find(error_ra==BER_min);
    %[best_ee, best_cc, best_dd]=find(error_ra==BER_min);
    %[BER_min, position, index] = min(min(min(error_ra)));
    % [~ , ~]=find(error_ra==BER_min);
    % [best_aa, ~]=find(error_ra==BER_min);
    % [best_jj,  best_bb]=find(error_ra==BER_min);
    % best_a = a; %- a_move;                   %最小误码率时的参数a
    % best_b = b; %- b_move;                   %最小误码率时的参数b
    % best_j = j;
    best_c = c; %- a_move;                   %最小误码率时的参数a
    best_d = d; %- b_move;                   %最小误码率时的参数b
    % best_e = e;
    
    best_a = c;
    best_b = d;
    % best_M = e;
    % r_d = x + sqrt(2*e).*randn(1,length(x));
    % r1_d = sr(best_a,best_b,h,r_d);
    % r2_d = -r1_d;
    %            %for n=1:length(bits)                  %累加,用和做判决
    %             for n=1:length(m)
    %           %%%%   for n=1:length(simple_test)
    %                 sum1=0; sum2=0;
    %
    %                 for k=N/4:N/1              % 积分判别码元,积分的范围
    %                     sum1=sum1+r1_d((n-1)*N+k);
    %                     sum2=sum2+r2_d((n-1)*N+k);
    %                 end
    %                 if sum1>= sum2
    %                     output(n)=1;
    %
    %                 else
    %                     output(n)=0;
    %                 end
    %             end
    %             error_num1=0;
    %             %for i=1:length(bits)
    %             for i=1:length(m)
    %            %%%% for i=1:length(simple_test)
    %                 %if bits(i)~=output(i)
    %                 if x22(i,10)~=output(i)
    %            %%%%     if simple_test(i)~=output(i)
    %                     error_num1=error_num1+1;      % 统计误码个数
    %                 end
    %             end
    %            error_rate1=error_num1/length(m);
    % best_parameters_one = [best_j best_a]
    % best_parameters_two = [best_a best_b]
    % best_parameters_three =[best_j best_b]
    best_parameters = [best_a best_b]
    % best_parameters = [best_a best_b best_M]
    %best_parameters =[BER_min, position, index]
    %BER_min      % 输出最小误码率
    % best_r = data(1,best_M);
    % best_r1 = sr_data{best_c,best_d,best_M};
    best_r1 = sr_data{best_c,best_d};
    peak=max(abs(best_r1));
    rms=sqrt(sum(best_r1.^2)/length(best_r1));
    averageAmplitude=mean(abs(best_r1));
    
    %E = sum(r)/100000;%均值
    % E = mean(best_r{1,1});
    E = mean(best_r1);
    %D = (sum((r-E).*(r-E)))/100000;%方差
    
    S = sum(r);
    % D = var(best_r{1,1});
    D = var(best_r1);
    %P =(sum(r.*r.*r))/100000;%偏度
    % P = skewness(best_r{1,1});%偏度
    P = skewness(best_r1);%偏度
    best_a ;
    best_b;
    % best_M ;
    SNR = SNR_calculate(x,best_r1); %信噪比
    BER_min %误码率
    %C = (max(r1)-min(r1))/(sqrt(sum(r1.*r1)));%波峰指数
    %C_C = C*100000;
    C= peak/rms;%波峰指数
    %I = (max(r1)-min(r1))/sum(abs(r1));%脉冲指数
    %I_I = I*100000;
    I = peak/averageAmplitude;%脉冲指数
    D_net = [E D P best_a best_b SNR_index SNR BER_min C I];
    
    D_net = D_net';
    % D_nett(j) = D_net;
    % figure(2)
    % plot(best_r1)
%     save('dnet535.mat','D_net');


%% 输出图像
% figure(1) 
% surf(error_ra,'EdgeColor','None');%绘制误码率的3D图
% axis ([0 25 0 20 0 1])
% xlim([1 10]);
% colorbar;
% shading interp;
% title('Effects of SR parameters on BER');    %标题
% x1=xlabel('Parameter b');        %x轴标题
% x2=ylabel('Parameter a');        %y轴标题
% x3=zlabel('BER');        %z轴标题

%plot(D_net)



%%
% 如果参数的考察精度小于1,则输出的图像横纵坐标并不是随机共振参数,则可以下方的标记方式做标记
% title('随机共振参数与信号误比特率的关系');    %标题
% x1=xlabel('随机共振 参数b,减1为实际参数');        %x轴标题
% x2=ylabel('随机共振 参数a,减1为实际参数');        %y轴标题
% x3=zlabel('误比特率');        %z轴标题

%% 输出图像
xlim_max=10000;
ylim_max=2;

%% 输出图像
t=[0:length(r)-1];
figure(1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
subplot(311)    % 原始波形
plot(t,x); axis([0 xlim_max -ylim_max ylim_max]); hold on;
% plot(t,r1,'k');   xlim([0 xlim_max]);ylim([-ylim_max ylim_max]);
title('Original Signal');
subplot(312)
plot(t,r); axis([0 xlim_max -5 5]); hold on;
subplot(313)
plot(t,best_r1); axis([0 xlim_max -ylim_max ylim_max]); hold on;
%% 计算信噪比增益
befor_SNR = SNR_calculate(x,r)
after_SNR = SNR_calculate(x,best_r1)
SNR_gain= after_SNR - befor_SNR

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值