clear all
%设定常数
M=4;%表示调制方式为4fsk
freqseq=1e4;Fs=2e6;N=1000;t_end=1;%分别设定4fsk频率间隔为1e-4,采样率为2e6,仿真结束时间设定为1
fre_jump=1e5;
%下面循环进行误码率计算,snr表示干信比,由于各种干扰起作用的干信比不同,因此需要分别进行
for snr=0.7:.01:1
for i=1:100
select=randint(1,1,[1,10]);%设定跳频速率,用几个码字一跳来表示
freq_change=randint(1,fix(N/select)+1,[freqseq,Fs/2-10*freqseq]);%设定跳频频率,在一定范围内随机产生
x=randint(N,1,M);%产生随机的码字
x1=ones(N,1);%产生跟踪干扰码字
t=0:1/Fs:t_end-1/Fs;%设定仿真步进
%计算两个数组的长度,后面要用
len1=length(t);
NN=length(freq_change);
%下面循环产生干扰码,信号发射频率以及跟踪干扰信号跳频频率
for n=1:t_end*N
xx1((n-1)*fix(len1/N/t_end)+1:(n-1)*fix(len1/N/t_end)+fix(len1/N/t_end))=x1(n);
freq_c((n-1)*fix(len1/N/t_end)+1:(n-1)*fix(len1/N/t_end)+fix(len1/N/t_end))=x(n)*freqseq+freq_change(fix((n-1)/select)+1);
freq_c1((n-1)*fix(len1/N/t_end)+1:(n-1)*fix(len1/N/t_end)+fix(len1/N/t_end))=freq_change(fix((n-1)/N*NN)+1);
end
%产生发射信号
y=cos(2*pi*freq_c.*t);
%设定多音干扰信号
f1=1.2e5;f2=3.3e5;f3=4.2e5;
y1=1/3*(cos(2*pi*f1*t)+cos(2*pi*f2*t)+cos(2*pi*f3*t));
%产生梳状谱干扰信号
y2=1/10*(cos(2*pi*freqseq*t)+cos(2*pi*(fre_jump+freqseq)*t)+cos(2*pi*(2*fre_jump+freqseq)*t)+cos(2*pi*(3*fre_jump+freqseq)*t)+cos(2*pi*(4*fre_jump+freqseq)*t)...
+cos(2*pi*(5*fre_jump+freqseq)*t)+cos(2*pi*(6*fre_jump+freqseq)*t)+cos(2*pi*(7*fre_jump+freqseq)*t)+cos(2*pi*(8*fre_jump+freqseq)*t)+cos(2*pi*(9*fre_jump+freqseq)*t));
%产生跟踪干扰信号
y3=cos(2*pi*(xx1*freqseq+freq_c1).*t);
y_rf1=awgn(y+y1*(10^snr)^.5,-5);
%y_rf2=awgn(y+y2*(10^snr)^.5,-5);
%y_rf3=awgn(y+y3*(10^snr)^.5,-5);%通过高斯信道传输,信噪比为-5dB
for n=1:fix(t_end*N)
fft_y1=fft(y_rf1((n-1)*Fs/N+1:(n-1)*Fs/N+Fs/N));
%fft_y2=fft(y_rf2((n-1)*Fs/N+1:(n-1)*Fs/N+Fs/N));
% fft_y3=fft(y_rf3((n-1)*Fs/N+1:(n-1)*Fs/N+Fs/N));%对接收信号做频谱分析
%ppppp=abs(fft_y1(fix(freq_change(fix((n-1)/select)+1)/Fs*length(fft_y1)-4):fix(freq_change(fix((n-1)/select)+1)+3*freqseq)/Fs*length(fft_y1)+5));
% m1=fix(freq_change(fix((n-1)/select)+1)/Fs*length(fft_y1)-4);
% m2=fix((freq_change(fix((n-1)/select)+1)+3*freqseq)/Fs*length(fft_y1)+5);
[k1,n1]=max(abs(fft_y1(fix(freq_change(fix((n-1)/select)+1)/Fs*length(fft_y1)-4):fix((freq_change(fix((n-1)/select)+1)+3*freqseq)/Fs*length(fft_y1)+5))));
%[k2,n2]=max(abs(fft_y2(fix(freq_change(fix((n-1)/select)+1)/Fs*length(fft_y2)-4):fix((freq_change(fix((n-1)/select)+1)+3*freqseq)/Fs*length(fft_y2)+5))));
%[k3,n3]=max(abs(fft_y3(fix(freq_change(fix((n-1)/select)+1)/Fs*length(fft_y3)-4):fix((freq_change(fix((n-1)/select)+1)+3*freqseq)/Fs*length(fft_y3)+5))));%找出信号频率位置
%fre_r2=((n2-1)/length(fft_y2))*Fs;
% fre_r3=((n3-1)/length(fft_y3))*Fs;
x_r1(n)=fix(n1/10);%求出码字
%x_r2(n)=round((fre_r2-freq_change(fix((n-1)/N*NN)+1))/freqseq);
% x_r3(n)=round((fre_r3-freq_change(fix((n-1)/N*NN)+1))/freqseq);
end
mm1=length(x_r1);
pp1=x(1:mm1)-x_r1';
error1(i)=nnz(pp1)/mm1;
% Syy=10*log10(abs(fft_y1));
% plot(Syy(1:length(Syy)/2));
% mm2=length(x_r2);
% pp2=x(1:mm2)-x_r2';
% error2(i)=nnz(pp2)/mm2;
%下面对误码率进行统计
% mm3=length(x_r3);
% pp3=x(1:mm3)-x_r3';
% error3(i)=nnz(pp3)/mm3;
end
ss(fix((snr-0.7)*100+1))=snr;
err1(fix((snr-0.7)*100+1))=mean(error1);
% err2(fix((snr-1.6)*100+1))=mean(error2);
%err3(fix((snr-1.1)*100+1))=mean(error3);
end
%画出误码率图形
figure,semilogy(ss, err1, 'g'); xlabel('Eb/No (dB)'); ylabel('BER');grid on; axis([-1 1 10e-7 10e-3]);
% figure,semilogy(ss, err2, 'g'); xlabel('Eb/No (dB)'); ylabel('BER');grid on; axis([-1 1 10e-7 10e-3]);
%figure,semilogy(ss, err3, 'g'); xlabel('Eb/No (dB)'); ylabel('BER');grid on; axis([-1 1 10e-7 10e-3]);