1.算法描述
MIMO-OFDM的信道估計(jì):時(shí)哼转,頻明未,空三個(gè)域都要考慮,尤其是在空域壹蔓,不同天線發(fā)射的導(dǎo)頻序列需要相互正交亚隅,否則在接收端無法區(qū)分各個(gè)導(dǎo)頻,造成導(dǎo)頻污染庶溶,就無法正確地估計(jì)信道煮纵。正交的方法有很多,可以是時(shí)間上錯(cuò)開偏螺,在某個(gè)時(shí)間只允許某個(gè)天線發(fā)送行疏。也可以在頻率上錯(cuò)開。還可以讓導(dǎo)頻信號(hào)本身就是正交的(例如Alamouti coding)套像。如下圖所示:
算法上的區(qū)別我不是很清楚了酿联,不是研究這一塊,太深的也不懂夺巩。但常用的信道估計(jì)算法比如LS/ML估計(jì)贞让,LMMSE估計(jì)都可以用,只是形式上有點(diǎn)變化柳譬。值得一提的是喳张,配備了OFDM的MIMO系統(tǒng),往往工作在頻率選擇性衰落信道中美澳,一般稱為寬帶MIMO系統(tǒng)销部,在某種程度上其信道估計(jì)比平衰落信道中的窄帶MIMO要容易。因?yàn)閷?dǎo)頻在空域的正交使得我們僅需要將多對(duì)收發(fā)天線考慮成多個(gè)單對(duì)收發(fā)天線即可制跟,也就是說可以將MIMO系統(tǒng)變?yōu)镾ISO系統(tǒng)來分析舅桩。
MIMO-OFDM系統(tǒng)模型的接收端原理圖如圖4所示。即各個(gè)接收天線收到相應(yīng)的OFDM符號(hào)后雨膨,先進(jìn)行時(shí)頻同步處理擂涛,然后去掉相應(yīng)的CP,接著進(jìn)行OFDM解調(diào)(FFT)聊记,最后根據(jù)信道估計(jì)的結(jié)果進(jìn)行檢測(cè)解碼撒妈,恢復(fù)出接收比特流。
RBF網(wǎng)絡(luò)是一種三層前向網(wǎng)絡(luò)甥雕,由輸入到輸出的映射是非線性的踩身,而隱含層空間到輸出空間的映射是線性的胀茵,從而大大加快了學(xué)習(xí)速度并避免局部極小問題社露。RBF網(wǎng)絡(luò)結(jié)構(gòu)如下圖1所示。
這里琼娘,我們主要是通過對(duì)導(dǎo)頻序列和已知的導(dǎo)頻序列進(jìn)行神經(jīng)網(wǎng)絡(luò)訓(xùn)練峭弟,得到一個(gè)神經(jīng)網(wǎng)絡(luò)附鸽,對(duì)輸入的新號(hào)進(jìn)行實(shí)時(shí)的預(yù)測(cè)和估計(jì)。最后得到所要的接受信號(hào)瞒瘸。我們?cè)俳榻B使用改進(jìn)后的遺傳算法對(duì)RBF神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化坷备,并進(jìn)行信道估計(jì)的方法。
遺傳算法(Genetic Algorithm-GA)是一種基于自然選擇和基因遺傳學(xué)原理的優(yōu)化搜索方法情臭。它將“優(yōu)勝劣汰省撑,適者生存”的生物進(jìn)化原理引入待優(yōu)化參數(shù)形成的編碼串群體中,按照一定的適配值函數(shù)及一系列遺傳操作對(duì)各個(gè)體進(jìn)行篩選俯在,從而使適配值高的個(gè)體被保留下來竟秫,組成新的群體,新群體中各個(gè)體適應(yīng)度不斷提高跷乐,直至滿足一定的極限條件肥败。此時(shí),群體中適配值最高的個(gè)體即為待優(yōu)化參數(shù)的最優(yōu)解愕提。正是由于遺傳算法獨(dú)具的工作原理馒稍,使它能夠在復(fù)雜空間進(jìn)行全局優(yōu)化搜索,并且具有較強(qiáng)的魯棒性浅侨。
遺傳算法是一類可用于復(fù)雜系統(tǒng)優(yōu)化的具有魯棒性的搜索算法纽谒,與傳統(tǒng)的優(yōu)化算法相比,具有以下特點(diǎn):
(1)以決策變量的編碼作為運(yùn)算對(duì)象如输。傳統(tǒng)的優(yōu)化算法往往直接利用決策變量的實(shí)際值本身來進(jìn)行優(yōu)化計(jì)算佛舱,但遺傳算法是使用決策變量的某種形式的編碼作為運(yùn)算對(duì)象。這種對(duì)決策變量的編碼處理方式挨决,使得我們?cè)趦?yōu)化計(jì)算中可借鑒生物學(xué)中染色體和基因等概念请祖,可以模仿自然界中生物的遺傳和進(jìn)化激勵(lì),也可以很方便地應(yīng)用遺傳操作算子脖祈。
(2)直接以適應(yīng)度作為搜索信息肆捕。傳統(tǒng)的優(yōu)化算法不僅需要利用目標(biāo)函數(shù)值,而且搜索過程往往受目標(biāo)函數(shù)的連續(xù)性約束盖高,有可能還需要滿足“目標(biāo)函數(shù)的導(dǎo)數(shù)必須存在”的要求以確定搜索方向慎陵。遺傳算法僅使用由目標(biāo)函數(shù)值變換來的適應(yīng)度函數(shù)值就可確定進(jìn)一步的搜索范圍,無需目標(biāo)函數(shù)的導(dǎo)數(shù)值等其他輔助信息喻奥。直接利用目標(biāo)函數(shù)值或個(gè)體適應(yīng)度值也可以將搜索范圍集中到適應(yīng)度較高部分的搜索空間中席纽,從而提高搜索效率。
(3)使用多個(gè)點(diǎn)的搜索信息撞蚕,具有隱含并行性润梯。傳統(tǒng)的優(yōu)化算法往往是從解空間的一個(gè)初始點(diǎn)開始最優(yōu)解的迭代搜索過程。單個(gè)點(diǎn)所提供的搜索信息不多,所以搜索效率不高纺铭,還有可能陷入局部最優(yōu)解而停滯寇钉;遺傳算法從由很多個(gè)體組成的初始種群開始最優(yōu)解的搜索過程,而不是從單個(gè)個(gè)體開始搜索舶赔。對(duì)初始群體進(jìn)行的扫倡、選擇、交叉竟纳、變異等運(yùn)算撵溃,產(chǎn)生出新一代群體,其中包括了許多群體信息锥累。這些信息可以避免搜索一些不必要的點(diǎn)征懈,從而避免陷入局部最優(yōu),逐步逼近全局最優(yōu)解揩悄。
(4) 使用概率搜索而非確定性規(guī)則卖哎。傳統(tǒng)的優(yōu)化算法往往使用確定性的搜索方法,一個(gè)搜索點(diǎn)到另一個(gè)搜索點(diǎn)的轉(zhuǎn)移有確定的轉(zhuǎn)移方向和轉(zhuǎn)移關(guān)系删性,這種確定性可能使得搜索達(dá)不到最優(yōu)店亏娜,限制了算法的應(yīng)用范圍。遺傳算法是一種自適應(yīng)搜索技術(shù)蹬挺,其選擇维贺、交叉、變異等運(yùn)算都是以一種概率方式進(jìn)行的巴帮,增加了搜索過程的靈活性溯泣,而且能以較大概率收斂于最優(yōu)解,具有較好的全局優(yōu)化求解能力榕茧。但垃沦,交叉概率、變異概率等參數(shù)也會(huì)影響算法的搜索結(jié)果和搜索效率用押,所以如何選擇遺傳算法的參數(shù)在其應(yīng)用中是一個(gè)比較重要的問題肢簿。
綜上,由于遺傳算法的整體搜索策略和優(yōu)化搜索方式在計(jì)算時(shí)不依賴于梯度信息或其他輔助知識(shí)蜻拨,只需要求解影響搜索方向的目標(biāo)函數(shù)和相應(yīng)的適應(yīng)度函數(shù)池充,所以遺傳算法提供了一種求解復(fù)雜系統(tǒng)問題的通用框架。它不依賴于問題的具體領(lǐng)域缎讼,對(duì)問題的種類有很強(qiáng)的魯棒性收夸,所以廣泛應(yīng)用于各種領(lǐng)域,包括:函數(shù)優(yōu)化血崭、組合優(yōu)化生產(chǎn)調(diào)度問題卧惜、自動(dòng)控制
厘灼、機(jī)器人學(xué)、圖像處理(圖像恢復(fù)序苏、圖像邊緣特征提取…)手幢、人工生命捷凄、遺傳編程忱详、機(jī)器學(xué)習(xí)。
2.仿真效果預(yù)覽
matlab2022a仿真結(jié)果如下:
3.MATLAB部分代碼預(yù)覽
%參數(shù)初始化
Ta_num ?????????????= 2;%發(fā)送天線數(shù)目
Ra_num ?????????????= 2;%接收天線數(shù)目
%導(dǎo)頻
mod_type ???????????= 'QPSK';
IFFT_len ???????????= 64;
Carriers ???????????= 50;
bits_symbol ????????= 2;
symbols_per_carrier = 12;
%導(dǎo)頻間隔
interval ???????????= 5 ;
Np ?????????????????= ceil(Carriers/interval)+1;
N_number ???????????= Carriers*symbols_per_carrier*bits_symbol;
carriers ???????????= 1:Carriers+Np;
%保護(hù)間隔長(zhǎng)度
Cps ????????????????= 8; ????????????
SNR ????????????????= [-8:2:20]; ??
%蒙特卡洛的仿真思路跺涤,每次SNR循環(huán)多次計(jì)算平均
Stimes ?????????????= 100;
X ?= zeros(1,N_number);
X1 = [];
X2 = [];
X3 = [];
X4 = [];
X5 = [];
X6 = [];
X7 = [];
Y1 = [];
Y2 = [];
Y3 = [];
Y4 = [];
Y5 = [];
Y6 = [];
Y7 = [];
Y70 ??= [];
Y7_ZJ = [];
XX ??????= zeros(1,N_number);
dif_bit ?= zeros(1,N_number);
for tt = 1:20
tt
%產(chǎn)生二進(jìn)制隨即序列
X ??????????????????????????= func_signal_gen(N_number,Carriers);
%QPSK調(diào)制
[X1,X_initial] ?????????????= func_QPSK(X,N_number);
%導(dǎo)頻
[pilot,training_symbols] ???= func_pilot(symbols_per_carrier,Np,interval,Carriers);
%串并
X2 ?????????????????????????= reshape(X1,symbols_per_carrier,Carriers);
%插入導(dǎo)頻
[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);
%加循環(huán)前綴
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,Ta_num,Ra_num);
%設(shè)置由中繼節(jié)點(diǎn)轉(zhuǎn)換的信號(hào)
%如果是多個(gè)中繼匈睁,那么選擇功率最大的一個(gè),因此桶错,本質(zhì)就是選擇計(jì)算一個(gè)中繼點(diǎn)
%所以這里就設(shè)置一個(gè)中繼點(diǎn)來計(jì)算
Tx_data_ZJ ?????????????????= func_multipath_channel_DJ(X7,Carriers,Ta_num,Ra_num);
%高斯白噪聲
Error_ber ?= [];
for snr_db = SNR
snr_db
% ????????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))));
noise1 ?????= wgn(1,length(Tx_data),noise_power,'complex');
% ????????RandStream.setDefaultStream(RandStream('mt19937ar','seed',tt+1));
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))));
noise2 ?????= wgn(1,length(Tx_data),noise_power,'complex'); ?
%最后接收到的信號(hào)
Y70 ????????= Tx_data+noise1;
%中繼接收到的信號(hào)
Y7_ZJ ??????= Tx_data_ZJ+noise2;
%MRC接收
Y7 ?????????= Y70+Y7_ZJ;
%串并變換
Y6 ?????????= reshape(Y7,IFFT_len+Cps,symbols_per_carrier).';
%去保護(hù)間隔
Y5 ?????????= func_cp_del(Y6,symbols_per_carrier,IFFT_len,Cps);
%FFT航唆,傅立葉變換
Y4 ?????????= fft(Y5,IFFT_len,2);
Y3 ?????????= Y4(:,carriers);
%進(jìn)行信道估計(jì)
%實(shí)部
Y2_real ????= func_RBF_channel_est(real(Y3),signal,pilot,symbols_per_carrier,Np,real(training_symbols),Carriers,interval);
%虛部
Y2_imag ????= func_RBF_channel_est(imag(Y3),signal,pilot,symbols_per_carrier,Np,imag(training_symbols),Carriers,interval);
Y2 ?????????= Y2_real +sqrt(-1)*Y2_imag;
YY1 ????????= reshape(Y2,N_number/bits_symbol,1);
%QPSK解調(diào)
[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
Error_ber = [Error_ber,ber_snr1];
end
BERs(:,tt) = Error_ber./N_number;
end
Ber_avg = mean(BERs,2);
01_083_m