📄 multi_fh4fsk.m
字号:
% This procedure simulates the Bit Error Probability performace of the
% FH/MFSK system with independent multitone jamming
Eb_to_Nj_in_dB=[18];% Eb_to_Nj_in_dB到Eb_to_Nj的转换放到pp循环中了
Eb_to_No_in_dB=13.35;
Eb_to_No=10^(Eb_to_No_in_dB/10);
totalfreq_num=64;% 总共64个跳频频点
K=2;% 一个4FSK符号由两个比特组成
M=4;% FH/4FSK,M=2^K
Q=4;
Eb=1;
Es=K*Eb;
sgma=sqrt(Eb/(2*Eb_to_No));
N=1000;
times=100;
num_of_symbolerr=zeros(length(Eb_to_Nj_in_dB),times);
Ps=zeros(length(Eb_to_Nj_in_dB),1);
Pb=zeros(length(Eb_to_Nj_in_dB),1);
for pp=1:length(Eb_to_Nj_in_dB)
Eb_to_Nj=10^(Eb_to_Nj_in_dB(pp)/10);
Ej0=(Es*totalfreq_num)/(K*Q*Eb_to_Nj);% 每个干扰音的能量
for rep=1:times
datasymbolstream=randint(1,N,M);% 4进制数据符号流(符号为0~3)
PN=randint(1,N,totalfreq_num/M);% 整个频段划分为16个MFSK band(编号为0~15),PN用来选择跳频MFSK频带
R=zeros(M,N); % R矩阵用来存放每跳MFSK的M路能量输出,N表示时间推移,每列为一跳
rc=zeros(M,1);% 记住要养成在使用之前要先定义的习惯
rs=zeros(M,1);
for i=1:N % 对每一个数据符号
f(i)=4*PN(i)+datasymbolstream(i);% 信号所在的频率号0~63号
for j=0:M-1 %先给MFSK的每一路都加上噪声
if(j==datasymbolstream(i))
rc(j+1)=sqrt(Es)+sgma*randn;
rs(j+1)=sgma*randn;
else
rc(j+1)=sgma*randn;
rs(j+1)=sgma*randn;
end
end
theta=2*pi*rand;% 信号音与干扰音之间的相对相位
J=gen_multijammer(Q,totalfreq_num);% J 矩阵中存放Q个干扰音所在的频率号,干扰音所在频率号范围也是[0,63]而不是[1,64],J是个1行Q列的矩阵
jam_rayleigh=raylrnd(sqrt(Ej0/2));% 干扰音的幅度
for k=1:Q % 加入干扰
band_freq_num(k)=mod(J(k),M);%fjmod4取余数得到d,得到各个干扰音在某个MFSK band中的位置band_freq_num(k)=(0~3)
band_num(k)=(J(k)-band_freq_num(k))/M;%(fj-d)/4得商,得到各个干扰音处在第几号(第band_num(k)号)MFSK band内=(0~15)
if(band_num(k)==PN(i))% 这个干扰音处在当前跳信息符号的MFSK band内
for j=0:M-1 % 这个干扰音处在MFSK band的第几号频率上
if(j==band_freq_num(k))
rc(j+1)=rc(j+1)+jam_rayleigh*cos(theta);
rs(j+1)=rs(j+1)+jam_rayleigh*sin(theta);
end
end
end
end
for j=0:M-1 % R是个M行N列的矩阵,每列代表每一跳内M路能量输出,共N列代表数据符号流共N个数据符号
R(j+1,i)=rc(j+1)^2+rs(j+1)^2;% 解跳后信号所在的MFSK band 的 M 路能量输出
end
end
[max_energy Decision]=max(R,[],1);% MFSK判决,找出每跳信号所在的那一MFSK band 中能量最大的那一路,注意Decision矩阵是下标,范围是1-4,不是0-3
demodulation_output=Decision-1;% 把1-4转换成0-3,demodulation_output就是解调输出数据符号流
for i=1:N % 统计符号错误数
if(demodulation_output(i)~=datasymbolstream(i))
num_of_symbolerr(pp,rep)=num_of_symbolerr(pp,rep)+1;
end
end
end % 与最外层"多少遍" for rep=1:times循环对应的end
end % 与最最外层信干比循环 pp=1:length(Eb_to_Nj_in_dB)对应的end
Ps=sum(num_of_symbolerr,2)/(N*times)
Pb=Ps*M/(2*(M-1))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -