clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
rng('default')
load('data1');
load('data2');
BerEst2=zeros(10,1);
%估计当前信道质量
for channelNumber=1:10
dataIn =x2_all(channelNumber,:)'>0.5; %%第n个通道的输入通道数据
dataOut= y2_all(channelNumber,:)'>0.5; %将通道与输入卷积
BerEst2(channelNumber)=biterr(dataIn,dataOut)/length(dataIn);
end
figure
grid on
box on
grid minor
hold on
hold on
semilogy(1:10,BerEst2,'-.','LineWidth',2);
xlabel('channel通道号');
ylabel('误码率');
%LMS
load('data1');
load('data2');
LmsBerEst1=zeros(10,1);
LevBerEst1=zeros(10,1);
LmsBerEst2=zeros(10,1);
LevBerEst2=zeros(10,1);
filter_order=100;
b1=zeros(filter_order,1);
b2=zeros(filter_order,1);
%LMS自适应
for channelNumber = 1:10
channelNumber
x1 =x_all(channelNumber,:)'>0.5; %第n个通道的输入通道数据
d1 = y_all(channelNumber,:)'>0.5; %将通道与输入卷积
x2 =x2_all(channelNumber,:)'>0.5; %第n个通道的输入通道数据
d2 = y2_all(channelNumber,:)'>0.5; %将通道与输入卷积
lms=dsp.LMSFilter(filter_order,'StepSize',0.01,'WeightsOutputPort',true);
[~,e,w1]=lms(double(x1),double(d1)); %LMS滤波器权重
[~,e,w2]=lms(double(x2),double(d2)); %LMS滤波器权重
lms_filter1=w1./w1(1); %估计均衡器系数
lms_filter2=w1./w1(1); %估计均衡器系数
dataOut1=(filter(1,lms_filter1,d1))>0.5; %信息比特通过均衡器
dataOut2=(filter(1,lms_filter2,d2))>0.5; %信息比特通过均衡器
LmsBerEst1(channelNumber)=biterr(x1,dataOut1)/length(x1); %信道BER
LmsBerEst2(channelNumber)=biterr(x2,dataOut2)/length(x2); %信道BER
%Levinson Durbin
[a1 ~]=levinson(autocorr(d1,filter_order),filter_order-1);
[a2 ~]=levinson(autocorr(d1,filter_order),filter_order-1);
b1=a1;
b2=a2;
dataOut1=(filter(b1,1,d1))>0.5; %信息比特通过均衡器
dataOut2=(filter(b2,1,d2))>0.5; %信息比特通过均衡器
LevBerEst1(channelNumber)=biterr(x1,dataOut1)/length(x1);
LevBerEst2(channelNumber)=biterr(x2,dataOut2)/length(x2);
end
figure
grid on
box on
grid minor
hold on
semilogy(1:10,LmsBerEst1,'--','LineWidth',2);
hold on
semilogy(1:10,LevBerEst1,'-.','LineWidth',2);
hold on
semilogy(1:10,LmsBerEst2,'--','LineWidth',2);
hold on
semilogy(1:10,LevBerEst2,'-.','LineWidth',2);
hold on
xlabel('channel通道号');
ylabel('误码率');
legend( 'LMS 1','Levinson 1','LMS 2','Levinson 2')
%Neural Network
load data2.mat
number_of_layers=10;
neurons_per_layer=10;
training_fn='trainbfg';
NNBerEst2=zeros(10,1);
for channel_num=1:10
number_of_layers=10;
neurons_per_layer=10;
training_fn='trainbfg';
train_data_input=y2_all(channel_num,1:9000)>0.5;
train_data_output=x2_all(channel_num,1:9000)>0.5;
hiddensize=neurons_per_layer*ones(1,number_of_layers);
net=feedforwardnet(hiddensize,training_fn);
% view(net);
net=configure(net,train_data_input,train_data_output);
net=train(net,train_data_input,train_data_output);
%%Test network
test_data_input=y2_all(channel_num,9001:10000);
test_data_output=sim(net,test_data_input);
x_out=test_data_output>0.5;
x_ver=x2_all(channel_num,9001:10000)>0.5;
NNBerEst2(channel_num)=sum(x_out~=x_ver)/1000;
end
figure
grid on
box on
grid minor
hold on
semilogy(1:10,NNBerEst2,'-.','LineWidth',2);
pbaspect([1 1 1])
xlabel('channel通道号');
ylabel('误码率');
xlim([1 10])
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2022A,包含仿真操作录像和代码注释,操作录像使用windows media player播放。 2.领域:水下通信信道模型 3.内容: 基于LMS和神经网络的水下通信信道模型建模matlab仿真,。 4.注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。
资源推荐
资源详情
资源评论
收起资源包目录
基于LMS和神经网络的水下通信信道模型建模matlab仿真.rar (4个子文件)
仿真操作录像0019.avi 95.78MB
code
data2.mat 767KB
Runme.m 4KB
data1.mat 444KB
共 4 条
- 1
资源评论
- m0_675423412024-02-27资源质量不错,和资源描述一致,内容详细,对我很有用。
- m0_631344542024-01-26资源不错,对我启发很大,获得了新的灵感,受益匪浅。
- lizong1112222024-05-03资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
fpga和matlab
- 粉丝: 16w+
- 资源: 2557
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功