1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y52YmZlp
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
生物神经网络主要是指人脑的神经网络,它是人工神经网络的技术原型。人脑是人类思维的物质基础,思维的功能定位在大脑皮层,后者含有大约10^11个神经元,每个神经元又通过神经突触与大约103个其它神经元相连,形成一个高度复杂高度灵活的动态网络。作为一门学科,生物神经网络主要研究人脑神经网络的结构、功能及其工作机制,意在探索人脑思维和智能活动的规律。人工神经网络是生物神经网络在某种简化意义下的技术复现,作为一门学科,它的主要任务是根据生物神经网络的原理和实际应用的需要建造实用的人工神经网络模型,设计相应的学习算法,模拟人脑的某种智能活动,然后在技术上实现出来用以解决实际问题。因此,生物神经网络主要研究智能的机理;人工神经网络主要研究智能机理的实现,两者相辅相成。
常用的信道估计算法比如LS/ML估计,LMMSE估计都可以用,只是形式上有点变化。值得一提的是,在某种程度上其信道估计比平衰落信道中的窄带MIMO要容易。因为导频在空域的正交使得我们仅需要将多对收发天线考虑成多个单对收发天线即可,也就是说可以将MIMO系统变为SISO系统来分析。系统模型的接收端原理图如图所示。即各个接收天线收到相应的OFDM符号后,先进行时频同步处理,然后去掉相应的CP,接着进行OFDM解调(FFT),最后根据信道估计的结果进行检测解码,恢复出接收比特流。
4.部分源码
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));
%信道
Tx_data = func_multipath_channel(X7,Carriers,IF_multi);
%高斯白噪声
Error_ber = [];
Error_mse = [];
for snr_db = SNR
% RandStream.setDefaultStream(RandStream('mt19937ar','seed',tt));
rng(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/20))));
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
%实部
[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
Y1_real = Y2_real./repmat(HLs_real,1,Carriers);
Y1_imag = Y2_imag./repmat(HLs_imag,1,Carriers);
Y1 = Y1_real + sqrt(-1)*Y1_imag;
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 = (X_initial - r11);
ber_snr1=0;
for k=1:N_number;
if dif_bit1(k)~=0;
ber_snr1=ber_snr1+1;
end
end
Error_ber = [Error_ber,ber_snr1];
Error_mse = [Error_mse,mse(X_initial - r11)];
end
BERs(:,tt) = Error_ber./N_number;
MSEs(:,tt) = Error_mse;
end
Ber_avg = mean(BERs,2);
MSE_avg = mean(MSEs,2);
05_013_m