✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
采用DNN 深度神经网络作为模型训练架构,具体如图 3 所示.模型输入
将网络训练中的每层输出特征数据分成“小批”样本,对每个“小批”样本结合标准差拟合方法进行批量归一化算法后再输入到神经网络的下一层,克服了极化滤波算法在数据集中数据不完整情况下预测不佳的问题.模型训练过程主要包括训练样本的网络前向传播以及误差项的网络反向传播过程. 网络前向传播得到学习后的滤波器系数预测值,通过损失函数计算网络在这批数据上的输出值与目标值之间的误差,以此衡量网络在训练数据后的预测值与预期结果的匹配程度,计算损失相对于网络权重的梯度,通过梯度下降法来一步步的迭代更新各个神经元的权重以及偏置参数,直至达到模型预先设定的迭代次数或者所得误差在指定的范围为止.
本文使用10000 个数据进行训练,设定一批数据包含的样本数目为 64,迭代次数的初始阈值设为 156,经观测预测值与实际值间误差 Loss 图,可知在训练初期,误差值会迅速降低,随后趋于稳定. 若迭代次数过高,则会导致资源浪费,算法耗时较长. 因此设置 H1、H2与 H3迭代次数均为 55
⛄ 部分代码
clc;clear all;
SNRdB=0:0.25:3; %SNR in dB
k=512/4;
n=1024/4; % 码长
niter= 60;% 最大迭代此时
nb_err = zeros(1,length(SNRdB));
nb_code = zeros(1,length(SNRdB));
nb_err_max= 100 ;
nb_code_max= 1e4;
H= gen_h(n,6,3);% 产生H
[Hs,H]=gen_Hs(H); % 化为系统码
Q= Hs(:,1:k)'; % 生成矩阵的Q
for s= 1:length(SNRdB)
sigma = 10^(-SNRdB(s)/20);% 其平方是噪声功率
while nb_err(s)<nb_err_max && nb_code(s)<nb_code_max
nb_code(s) = nb_code(s)+1;
b = rand(1,k)<0.5;
c=[b,rem(b*Q,2)];% 系统码编码
x=(-1).^c;% BPSK modulation
noise = sigma * randn(1,length(x));
y = x+noise;
lam_ch= 2*y/sigma^2;%软解调
hat_c= msa(lam_ch,niter,H);
err = any(hat_c~=c); %c是发送码字,hat_c是硬判决
if err
nb_err(s)= nb_err(s)+err;
disp([nb_err;nb_code])
end
end
end
WER= nb_err./nb_code;
EbN0dB= SNRdB+10*log10(n/k/2);%化成Eb/N0,参考式(1)
figure(1)
semilogy(EbN0dB, WER,'o-','LineWidth',2)
xlabel('Eb/N0')
ylabel('WER')
grid on;
hold on
SNRdB=0:0.25:3; %SNR in dB
k=512/2;
n=1024/2; % 码长
niter= 60;% 最大迭代此时
nb_err = zeros(1,length(SNRdB));
nb_code = zeros(1,length(SNRdB));
nb_err_max= 100 ;
nb_code_max= 1e4;
H= gen_h(n,6,3);% 产生H
[Hs,H]=gen_Hs(H); % 化为系统码
Q= Hs(:,1:k)'; % 生成矩阵的Q
for s= 1:length(SNRdB)
sigma = 10^(-SNRdB(s)/20);% 其平方是噪声功率
while nb_err(s)<nb_err_max && nb_code(s)<nb_code_max
nb_code(s) = nb_code(s)+1;
b = rand(1,k)<0.5;
c=[b,rem(b*Q,2)];% 系统码编码
x=(-1).^c;% BPSK modulation
noise = sigma * randn(1,length(x));
y = x+noise;
lam_ch= 2*y/sigma^2;%软解调
hat_c= msa(lam_ch,niter,H);
err = any(hat_c~=c); %c是发送码字,hat_c是硬判决
if err
nb_err(s)= nb_err(s)+err;
disp([nb_err;nb_code])
end
end
end
WER= nb_err./nb_code;
EbN0dB= SNRdB+10*log10(n/k/2);%化成Eb/N0,参考式(1)
figure(1)
semilogy(EbN0dB, WER,'s-','LineWidth',2)
xlabel('Eb/N0')
ylabel('WER')
grid on;
hold on
SNRdB=0:0.25:3; %SNR in dB
k=512;
n=1024; % 码长
niter= 60;%最大迭代此时
nb_err = zeros(1,length(SNRdB));
nb_code = zeros(1,length(SNRdB));
nb_err_max= 100 ;
nb_code_max= 1e4;
H= gen_h(n,6,3);%产生H
[Hs,H]=gen_Hs(H); %化为系统码
Q= Hs(:,1:k)'; %生成矩阵的Q
for s= 1:length(SNRdB)
sigma = 10^(-SNRdB(s)/20);%其平方是噪声功率
while nb_err(s)<nb_err_max && nb_code(s)<nb_code_max
nb_code(s) = nb_code(s)+1;
b = rand(1,k)<0.5;
c=[b,rem(b*Q,2)];%系统码编码
x=(-1).^c;%BPSK modulation
noise = sigma * randn(1,length(x));
y = x+noise;
lam_ch= 2*y/sigma^2;%软解调
hat_c= msa(lam_ch,niter,H);
err = any(hat_c~=c); %c是发送码字,hat_c是硬判决
if err
nb_err(s)= nb_err(s)+err;
disp([nb_err;nb_code])
end
end
end
WER= nb_err./nb_code;
EbN0dB= SNRdB+10*log10(n/k/2);%化成Eb/N0,参考式(1)
figure(1)
semilogy(EbN0dB, WER,'^-','LineWidth',2)
xlabel('Eb/N0')
ylabel('WER')
grid on;
legend('n=256','n=512','n=1024')
⛄ 运行结果
⛄ 参考文献
[1]张嘉纹, 党小宇, 杨凌辉,等. 海面短波地波通信中基于DNN神经网络的单样本极化滤波器预测研究[J]. 电子学报, 2020, 48(11):2250-2257.