基于BP/RBF神经网络的在线信道估计均衡算法matlab仿真
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于BP/RBF神经网络的在线信道估计均衡算法matlab仿真相关的知识,希望对你有一定的参考价值。
目录
一、理论基础
RBF网络是一种三层前向网络,由输入到输出的映射是非线性的,而隐含层空间到输出空间的映射是线性的,从而大大加快了学习速度并避免局部极小问题。RBF网络结构如下图1所示。
二、案例背景
1.问题描述
通过对导频序列和已知的导频序列进行神经网络训练,得到一个神经网络,对输入的新号进行实时的预测和估计。最后得到所要的接受信号。我们再介绍使用改进后的遗传算法对RBF神经网络进行优化,并进行信道估计的方法。
2.思路流程
整个仿真系统的结构如上所示。
这里,我们主要是通过对导频序列和已知的导频序列进行神经网络训练,得到一个神经网络,对输入的新号进行实时的预测和估计。最后得到所要的接受信号。
整个流程基本如下所示:
检测导频位置;
提取导频
使用神经网络,将检测到的导频和已知的导频序列进行训练;
最后进行实时的预测和估计。
三、部分MATLAB仿真
clc;
clear all;
close all;
warning off;
addpath 'func\\'
sel = 4;%选择1为RBF,选择2为BP,选择3为最理想情况,选择4为最垃圾情况
%%
%参数初始化
%是否加入多径
IF_multi = 1;
%导频
mod_type = 'QPSK';
IFFT_len = 64;
Carriers = 50;
bits_symbol = 2;
symbols_per_carrier = 12;
%导频间隔
interval = 5 ;
Np = ceil(Carriers/interval)+1;
N_number = Carriers*symbols_per_carrier*bits_symbol;
carriers = 1:Carriers+Np;
%保护间隔长度
Cps = 8;
SNR = [0:2.5:25];
Stimes = 10;%蒙特卡洛的仿真思路,每次SNR循环多次计算平均
X = zeros(1,N_number);
X1 = [];
X2 = [];
X3 = [];
X4 = [];
X5 = [];
X6 = [];
X7 = [];
Y1 = [];
Y2 = [];
Y3 = [];
Y4 = [];
Y5 = [];
Y6 = [];
Y7 = [];
XX = zeros(1,N_number);
dif_bit = zeros(1,N_number);
dif_bit1 = zeros(1,N_number);
dif_bit2 = zeros(1,N_number);
dif_bit3 = zeros(1,N_number);
for tt = 1:Stimes
tt
%产生二进制随即序列
X = func_signal_gen(N_number,Carriers);
%QPSK调制
[X1,X_initial] = func_QPSK(X,N_number);
%导频
[pilot,training_symbols] = func_pilot(symbols_per_carrier,Np,interval,Carriers);
%串并
X2 = reshape(X1,symbols_per_carrier,Carriers);
%插入导频
[X3,signal] = func_pilot_insert(X2,pilot,Carriers,Np,training_symbols);
%IFFT
IFFT_modulation = zeros(symbols_per_carrier,IFFT_len);
IFFT_modulation(:,carriers) = X3;
X4 = ifft(IFFT_modulation,IFFT_len,2);
%加循环前缀
X6 = func_cp(X4,symbols_per_carrier,IFFT_len,Cps);
%并串
X7 = reshape(X6.',1,symbols_per_carrier*(IFFT_len+Cps));
%信道
if sel == 3
Tx_data = X7;
else
Tx_data = func_multipath_channel(X7,Carriers,IF_multi);
end
%高斯白噪声
Error_ber = [];
Error_mse = [];
for snr_db = SNR
RandStream.setDefaultStream(RandStream('mt19937ar','seed',tt));
code_power = 0;
code_power = [norm(Tx_data)]^2/(length(Tx_data));
bit_power = code_power/bits_symbol;
noise_power = 10*log10((bit_power/(10^(snr_db/10))));
noise = wgn(1,length(Tx_data),noise_power,'complex');
%最后接收到的信号
Y7 = Tx_data + noise;
%串并变换
Y6 = reshape(Y7,IFFT_len+Cps,symbols_per_carrier).';
%去保护间隔
Y5 = func_cp_del(Y6,symbols_per_carrier,IFFT_len,Cps);
%FFT,傅立叶变换
Y4 = fft(Y5,IFFT_len,2);
Y3 = Y4(:,carriers);
%进行信道估计
if sel == 1 | sel == 3 | sel == 4
%实部
[HLs_real,Y2_real] = func_RBF_channel_est(real(Y3),signal,pilot,symbols_per_carrier,Np,real(training_symbols),Carriers,interval);
%虚部
[HLs_imag,Y2_imag] = func_RBF_channel_est(imag(Y3),signal,pilot,symbols_per_carrier,Np,imag(training_symbols),Carriers,interval);
end
if sel == 2
%实部
[HLs_real,Y2_real] = func_BP_channel_est(real(Y3),signal,pilot,symbols_per_carrier,Np,real(training_symbols),Carriers,interval);
%虚部
[HLs_imag,Y2_imag] = func_BP_channel_est(imag(Y3),signal,pilot,symbols_per_carrier,Np,imag(training_symbols),Carriers,interval);
end
Y2 = Y2_real +sqrt(-1)*Y2_imag;
HLs = HLs_real+sqrt(-1)*HLs_imag;
if sel == 4
Y1 = Y3(:,signal);
else
Y1 = Y2;
end
YY1 = reshape(Y1,N_number/bits_symbol,1);
%QPSK解调
[y_real1,y_image1,y_re1,y_im1] = func_deqpsk(YY1);
r01 = [];
r11 = [];
for k=1:length(y_re1);
r11 = [r11,[y_re1(k),y_im1(k)]];
end
dif_bit1 = round(X_initial - r11);
ber_snr1=0;
for k=1:N_number;
if dif_bit1(k)~=0;
ber_snr1=ber_snr1+1;
end
end
mse_snr1=0;
for k=1:N_number;
mse_snr1 = mse_snr1 + (dif_bit1(k))^2;
end
Error_ber = [Error_ber,ber_snr1];
Error_mse = [Error_mse,mse_snr1];
end
BERs(:,tt) = Error_ber./N_number;
MSEs(:,tt) = Error_mse./N_number;
end
Ber_avg = mean(BERs,2);
MSE_avg = mean(MSEs,2);
figure;
subplot(121);
semilogy(SNR,Ber_avg,'b-o');
grid on;
title('信噪比和误码率曲线');
xlabel('信噪比');
ylabel('误码率');
axis square;
axis([0,25,1e-4,1e0]);
subplot(122);
semilogy(SNR,MSE_avg,'b-o');
grid on;
title('信噪比和误码率曲线');
xlabel('信噪比');
ylabel('MSE');
axis square;
axis([0,25,1e-4,1e0]);
if sel == 1
save rbf.mat SNR Ber_avg MSE_avg
end
if sel == 2
save bp.mat SNR Ber_avg MSE_avg
end
if sel == 3
save best.mat SNR Ber_avg MSE_avg
end
if sel == 4
save worst.mat SNR Ber_avg MSE_avg
end
四、仿真结论分析
这里,我们增加了一组仿真对比,就是加入了最理想的情况和最恶劣的情况,最理想的情况是多径被完全抵消,即信道估计0误差的误码率,最恶劣的情况,是信道估计不工作的时候的误码率。从仿真结果可知,BP神经网络的估计性能略优于RBF神经网络的性能。
五、参考文献
[1]佚名. 基于免疫机制的RBF网络在OFDM信道估计中的应用[J]. 信息技术, 2007, 31(12):4.A05-13
以上是关于基于BP/RBF神经网络的在线信道估计均衡算法matlab仿真的主要内容,如果未能解决你的问题,请参考以下文章
信道估计均衡基于FPGA的MMSE信道估计均衡verilog实现
m基于rbf神经网络和遗传算法优化的MIMO-OFDM系统信道估计算法matlab仿真