clear
close all
gpuDevice(1)
t = datetime('now');
%% Network parameters
ori_rate = 30e6;
rec_rate = 60e6;
rate_times = rec_rate/ori_rate;
equal_order = 30;
% add_zero = rate_times*equal_order/2;
headwindow = equal_order-(fix(equal_order/2)+1);
pilot_length = 2047;
zero_length = 3000;
data_length = 10000;
split_num = 10; % Cut a signal into split_num shares
inputSize = equal_order;
outputSize = 1; % y=h*x+n; y:(outputSize,m) h:(outputSize,inputSize) x:(inputSize,m)
% miniBatchSize = 40;
% bias_begin = 0.05;
% bias_step = 0.04;
% bias_end = 1.05;
% bias_scope = bias_begin : bias_step : bias_end;
bias_scope = 0.45;
bias_begin = bias_scope(1);
bias_end = bias_scope(end);
bias_step = 1;
bias_loop_num = (bias_end-bias_begin)/bias_step+1;
bias_loop_num = round(bias_loop_num);
% amp_scope = [0.1613 0.32106 0.48082 0.64058 0.8003 1];
% amp_scope = [0.005 0.007 0.015 0.024 0.034 0.045 0.08 0.18 0.25 0.3 0.48082 0.64058 0.8003 1];
amp_scope = 0.18;
amp_loop_num = numel(amp_scope) ;
load_begin = 61;
load_end = 80;
data_num = load_end-load_begin+1;
train_percent = 0.05;
save_folder = '6.18';
data_folder = '6.18';
net_folder = '7.11';
save_path = "data_save/light_data_"+save_folder;
data_path_ini = "/home/oem/Users/ruoxu/equalization-using-DNN/data_save/light_data_"+data_folder;
ver = 2;
%% Loop parameter settings
total_ver = 2;
for net_ver = 1:total_ver
net_type = [ver,1,net_ver];
net_path = save_path + "/result1/"+net_folder+"/mix_bias_amp/Threenonlinear"+net_type(1)+"/net/looptime"+net_type(2)+"/net"+net_type(3);
test_num_amp = 0;
band_power = zeros(1,round(amp_loop_num));
for amp_loop = 1:amp_loop_num
%% Load data
xTrain = [];
yTrain = [];
amp = amp_scope(amp_loop);
save_amp = zeros(1,round(bias_loop_num));
save_bias = zeros(1,round(bias_loop_num));
data_path = data_path_ini + "/data/"+ori_rate/1e6+"M/amp"+amp;
test_num_amp = test_num_amp +1;
test_num_bias = 0;
for bias = bias_begin : bias_step : bias_end
test_num_bias = test_num_bias + 1;
load_path = data_path+"/bias"+bias+"/mat";
fprintf(" load amp = %f ,bias = %f \n",amp,bias);
load_data
totalNum = data_num*split_num;
trainNum = totalNum*train_percent;
xTrain_tmp = data_received_load(1:trainNum);
yTrain_tmp = data_ori_load(1:trainNum);
xTest_bias_tmp = data_received_load(trainNum+1:end);
yTest_bias_tmp = data_ori_load(trainNum+1:end);
amp_nor = 32000*amp;
% save_amp(test_num_bias) = 10*log10(amp_nor^2);
save_amp(test_num_bias) = amp;
save_bias(test_num_bias) = bias;
yTrain_tmp = cellfun(@(cell1)(cell1*amp_nor),yTrain_tmp,'UniformOutput',false);
yTest_bias_tmp = cellfun(@(cell1)(cell1*amp_nor),yTest_bias_tmp,'UniformOutput',false);
xTest_bias_name = ['xTest_',num2str(test_num_bias)];
yTest_bias_name = ['yTest_',num2str(test_num_bias)];
eval([xTest_bias_name,'=xTest_bias_tmp;']);
eval([yTest_bias_name,'=yTest_bias_tmp;']);
xTrain = [xTrain xTrain_tmp];
yTrain = [yTrain yTrain_tmp];
clear x y
end
%% Normalize data
% load_path = "data_save/light_data_3.10/data/10M/rand_bias0.3/";
load_norm_path = "/home/oem/Users/ruoxu/channel-estimation-using-DNN/data_save/norm_factor/";
norm_mat = load(load_norm_path+"/save_norm.mat");
norm_names = fieldnames(norm_mat);
norm_factor = gather(eval(strcat('norm_mat.',norm_names{1})));
yTrain = cellfun(@(cell1)(cell1*norm_factor),yTrain,'UniformOutput',false);
band_power(amp_loop) = bandpower(yTrain{2});
for i = 1:bias_loop_num
yTest_nor = eval(['yTest_',num2str(i)]);
yTest_nor = cellfun(@(cell1)(cell1*norm_factor),yTest_nor,'UniformOutput',false);
eval([['yTest_',num2str(i)],'= yTest_nor;']);
end
%% Reshape data
for i = 1:numel(xTrain)
x_rate = [];
for j = 1:rate_times
x_rate_loop = xTrain{i}(j:rate_times:end);
x_rate_loop = toeplitz(x_rate_loop(equal_order:-1:1),x_rate_loop(equal_order:end));
x_rate = [x_rate x_rate_loop];
end
xTrain{i} = x_rate;
% xTrain_loop{i} = [xTrain_loop{i}; single( bias_loop_data(floor((i-1)/trainNum)+1) )*ones(1,size(xTrain_loop{i},2) )];
yTrain{i} = reshape(yTrain{i},outputSize,[]);
% yTrain_loop{i} = yTrain_loop{i}(:,1:size(xTrain_loop{i},2));
yTrain{i} = yTrain{i}(:,1:size(xTrain{i},2)/rate_times);
yTrain_loop_tmp = yTrain{i};
yTrain{i} = [];
for k = 1:rate_times
yTrain{i} = [yTrain{i} yTrain_loop_tmp];
end
end
for i = 1:bias_loop_num
xtop_tem = eval(['xTest_',num2str(i)]);
ytop_tem = eval(['yTest_',num2str(i)]);
for j = 1:numel(xtop_tem)
x_rate = [];
for k = 1:rate_times
x_rate_loop = xtop_tem{j}(k:rate_times:end);
x_rate_loop = toeplitz(x_rate_loop(equal_order:-1:1),x_rate_loop(equal_order:end));
x_rate = [x_rate x_rate_loop];
end
xtop_tem{j} = x_rate;
% xtop_tem{j} = [xtop_tem{j}; single( bias_loop_data(i) )*ones(1,size(xtop_tem{j},2) )];
ytop_tem{j} = reshape(ytop_tem{j},outputSize,[]);
% ytop_tem{j} = ytop_tem{j}(:,1:size(xtop_tem{j},2));
ytop_tem{j} = ytop_tem{j}(:,1:size(xtop_tem{j},2)/rate_times);
ytop_tem_2 = ytop_tem{j};
ytop_tem{j} = [];
for r = 1:rate_times
ytop_tem{j} = [ytop_tem{j} ytop_tem_2];
end
end
eval([['xTest_',num2str(i)],'= xtop_tem;']);
eval([['yTest_',num2str(i)],'= ytop_tem;']);
end
%% Test performance with trained networks
looptime = 2;
load(net_path+"/net.mat");
fprintf(" load net = %s \n",net_path);
for i = 1:bias_loop_num
for j = 1:rate_times
eval([['nmse_rate',num2str(j),'_bias',num2str(i),'_mat'],'= zeros(1,looptime);']);
end
end
for i = 1:looptime
for j = 1:bias_loop_num
%% Custom network
x_fortest = cell(1,rate_times);
y_fortest = cell(1,rate_times);
x_fortest_tmp = eval(['xTest_',num2str(j)]);
y_fortest_tmp = eval(['yTest_',num2str(j)]);
colNum_perRate = size(x_fortest_tmp{1},2)/rate_times;
for shuffle_loop = 1:numel(x_fortest_tmp)
for rate_loop = 1:rate_times
x_fortest{rate_loop} = [ x_fortest{rate_loop} x_fortest_tmp{shuffle_loop}( :,(rate_loop-1)*colNum_perRate+1:rate_loop*colNum_perRate ) ];
y_fortest{rate_loop} = [ y_fortest{rate_loop} y_fortest_tmp{shuffle_loop}( :,(rate_loop-1)*colNum_perRate+1:rate_loop*colNum_perRate ) ];
end
end
for shuffle_loop = 1:numel(x_fortest)
colNum_tmp = size(x_fortest{shuffle_loop},2);
idx = randperm(colNum_tmp);
x_fortest{shuffle_loop} = x_fortest{shuffle_loop}(:,idx);
y_fortest{shuffle_loop} = y_fortest{shuffle_loop}(:,idx);
end
x_fortest = cell2mat(x_fortest);
y_fortest = cell2mat(y_fortest);
x_fortest(:,:,1) = x_fortest;
y_fortest(:,:,1) = y_fortest;
x_fortest = dlarray(single(x_fortest),'CBT');
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 基于神经网络DNN实现信号均衡matlab完整源码.zip基于神经网络DNN实现信号均衡matlab完整源码.zip基于神经网络DNN实现信号均衡matlab完整源码.zip基于神经网络DNN实现信号均衡matlab完整源码.zip基于神经网络DNN实现信号均衡matlab完整源码.zip基于神经网络DNN实现信号均衡matlab完整源码.zip 基于神经网络DNN实现信号均衡matlab完整源码.zip 基于神经网络DNN实现信号均衡matlab完整源码.zip 基于神经网络DNN实现信号均衡matlab完整源码.zip 【备注】 1.项目代码均经过功能验证ok,确保稳定可靠运行。欢迎下载体验! 2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈!
资源推荐
资源详情
资源评论
收起资源包目录
基于神经网络DNN实现信号均衡matlab完整源码.zip (20个子文件)
load_pilot.m 2KB
signal_equal_ls.m 1KB
calculate_nmse.m 2KB
dnn_testdNet.m 13KB
modelGradientss.m 184B
load_dnn.m 5KB
cal_nmse.m 3KB
dnn_equal_custom.m 7KB
load_data.m 2KB
dnn_train_default.m 2KB
dnn_option.m 6KB
preluLayer.m 937B
test.m 264B
sample_layer.m 866B
origin
7.13.opju 44KB
dnn_train_custom.m 4KB
split_data.m 350B
merge_layer.m 397B
pamdemod.m 3KB
load_mmse.m 1KB
共 20 条
- 1
资源评论
北航程序员小C
- 粉丝: 2222
- 资源: 1823
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功