matlab 一个UDP server 简单实现。
就一个简单的udp 服务端接收客户端数据并返回结果给客户端,让我从博客到官网文档,没一个符合的,matlab 文档也是醉了。上代码:
功能简介:
代码是udp服务端,接收客户端传来的参数,神经网络预测输出,并把结果返回给客户端。
clc
clear all
close all
packet_size = 1000; % Size of 1 Packet
buffer_size = 1*packet_size; % Buffer to store 1024 packets each of Packet_Size
buffer_read_count = 10; % How many times the buffer must be read
%u=udp('127.0.0.1','RemotePort',4660,'Localport',9090);
u=udp('127.0.0.1','RemotePort',4660,'Localport',9090);
set(u,'DatagramTerminateMode','off');
set(u, 'InputBufferSize', buffer_size);
set(u,'Timeout',0.5);
fopen(u);
x=tic;
net=BPtrain()
while 1
[a, count,info,addr,port] = fread(u,buffer_size); % 这里是获取客户端地址端口的关键
if count>0
try
data = sprintf("%s",a);
ndata=str2num(data);
mdata= reshape(ndata,2,1);
%网络预测输出
an=sim(net,mdata);
disp(an);
u.RemoteHost=addr;
u.RemotePort=port;
fwrite(u,num2str(an));
% u.send(an,addr,port)
catch err
disp(err)
end
end
end
fclose(u);
delete(u);
t=toc(x);
bw = (buffer_read_count*buffer_size*8)/t; %Speed / BW of UDP Reception
function s = BPtrain()
% 清空环境变量
clc
clear
%此处以后代码可以忽略不看,就是计算处理收到的数据用简单神经网络预测
%% 训练数据预测数据提取及归一化
%下载输入输出数据
load input8 ;
load output8;
a=input8;
b=output8;%乘10后单位为频差hz*10
% b=b*10e7;
b=b';
%从1到2000间随机排序
% k=rand(1,1344);
% [m,n]=sort(k);
% f0=10000000;
%找出训练数据和预测数据
% input_train=a(n(1:1244),:)';
% output_train=b(n(1:1244));
% input_test=a(n(1245:1344),:)';
% output_test=b(n(1245:1344));
input_train=a(1:3840,:)';%一个月后的40数据训练1:2016 1:7680 1:7680
output_train=b(1:3840);
input_test=a(3841:3936,:)';%后两天预测 7681:787 27681:7872
output_test=b(3841:3936);
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
%% BP网络训练
% %初始化网络结构
net=newff(inputn,outputn,19);
%因为newff默认训练、确认、测试样本比例,所以要对其进行修改
net.divideParam.trainRatio = 1;
net.divideParam.valRatio = 0;
net.divideParam.testRatio = 0;
net.trainParam.epochs=1000;
net.trainParam.lr=0.01;
net.trainParam.goal=0.0000000000001;
%网络训练
net=train(net,inputn,outputn);
s=net
end
function s=RBFtrain()
clear;
clc;
%% 构造样本集
% 数据个数
load input8 ;
load output8;
a=input8;
b=output8;
b=b';
P_train=a(1:2880,:)';% 1:7680
T_train=b(1:2880);%
P_test=a(2881:2976,:)';% 7681:7872
T_test=b(2881:2976);
%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(P_train);
[outputn,outputps]=mapminmax(T_train);
% %% 划分训练、测试样本
%
%
% P_train = Z_n(1:96, 1:7680);%
% T_train = Z_n(97, 1:7680);
%
% P_test = Z_n(1:96, 7681:7872);
% T_test = Z_n(97, 7681:7872);
%%
N =size(P_test,2);
%% III. RBF神经网络创建及仿真测试
%%
% 1. 创建网络
net = newrb(inputn,outputn,0.0000000000001,1,130,10);
%%
% % 2. 仿真测试
% T_sim = sim(net,P_test);
%预测数据归一化
inputn_test=mapminmax('apply',P_test,inputps);
s=net
end
本文介绍了一个使用Matlab实现的简单UDP服务器程序,该服务器能够接收客户端发送的数据,利用神经网络进行预测处理,并将结果反馈给客户端。文章提供了完整的代码示例。
760





