一, 廢話..
? 起因是這樣的。最近剛寫完專利,腦殼巨大無比,所以想寫點文章陶冶下情操。但是我這個大老粗爺們也寫不來言情小說,搞得我很是痛苦。我唯一會的也就只有 matlab了,, 所以寫一篇文章自我陶醉一下,哈哈哈。。
? 最近也是天氣晴朗,霧霾飄香。最痛苦的是下周OFDM的通信系統(tǒng)測試。想必同學(xué)們也是腦殼比我還大,也有很多同學(xué)問我這個 OFDM咋個做哦。我也簡單的說下在高斯信道下的 OFDM系統(tǒng),其實也講了講瑞利,萊斯信道下的 OFDM。 但是不要求嘛 ,確實那個有點難。
二. OFDM與傅里葉曖昧關(guān)系
? 一.?物理層的小知識
他們我們通信就是裝點寬帶啊,電線啊,但是不然。我們要自奮強大,還是要懂點小常識
信源編碼:著重對信號容量壓縮,提高傳輸效率
信道編碼:針對多變的信道插入冗余信息,增加傳輸穩(wěn)定性(設(shè)計的OFDM插入的CP(循環(huán)前綴),引頻信號就是冗余信息)。
信號調(diào)制:將比特流轉(zhuǎn)換成穩(wěn)定的波形進行傳輸
? 二.信號的正交性
比如: sint ?和 ?sin2t ?為一對正交信號,因為 sint*sin2t 在區(qū)間[0,2 pi]上的積分為0.
?sint和 sin2t是用來承載信號的,我們稱為子載波
加入 sint 信號傳送信號a ,采用AM調(diào)制,它變?yōu)?asint
加入 sin2t信號傳送信號b,采用AM調(diào)制,它變?yōu)?bsin2t
那么我們的和信號就變成 xn = asint+ bsin2t
接收a信號時候:將xn * sint 再通過[0,2pi]積分,sin2t的分量信號就變?yōu)榱?,只剩下帶有a的信號
接收b信號時候:將xn * sin2t 再通過[0,2pi]積分,sint的分量信號就變?yōu)榱?,只剩下帶有b的信號
%還不曉得的話,動一動筆寫一下就明白了。?
擴展一下
我們將sint離散化 ?就變成了 sin(2*pi*Δf*K*T) ?其中K = 1,2,3.....?
Δf為子載波間間隔.?
我們的f(t) 則可以變成
f(t) = a1·sin(2π·Δf·t) +
a2·sin(2π·Δf·2t) +
a3·sin(2π·Δf·3t) .....
再擴展一下
因為sint 和 cost 是正交的。 對吧
f(t) =?b1·cos(2π·Δf·t) +
b2·cos(2π·Δf·2t) +
b3·cos(2π·Δf·3t) .....
那么f(t)就可以找到合適的系數(shù)ak,和bk,將
f(t) = a1·sin(2π·Δf·t) +
a2·sin(2π·Δf·2t) +
a3·sin(2π·Δf·3t) +
...
ak·sin(2π·Δf·kt) +
b1·cos(2π·Δf·t) +
b2·cos(2π·Δf·2t) +
b3·cos(2π·Δf·3t) +
...
bk·cos(2π·Δf·kt)?
綜上f(t)=∑ak·sin(2π·Δf·kt) + ∑bk·cos(2π·Δf·kt)
對f(t)進行復(fù)數(shù)化 :f(t) =∑Fk·e(j·2π·Δf·kt) ?
這個啥子!!!!這是這就是傅里葉級數(shù),是不是很magical.
簡單的小實驗
設(shè)計一段曉得bit流,使其分別進行ifft后 與?f(t) =∑Fk·e(j·2π·Δf·kt)公式 兩種方法進行對比
現(xiàn)在假定待發(fā)送序列00011011,OFDM符號時長為1s,調(diào)制方式為QPSK
輸入信號 IQ信號 輸出信號相位
%00? ? ? ? ? 1/2,1/2? ? ? ? pi/4
%01? ? ? ? ? -1/2,1/2? ? ? ? 3pi/4
%10? ? ? ? ? -1/2,-1/2? ? ? 5pi/4
%11? ? ? ? ? 1/2,-1/2? ? ? ? 7pi/4
根據(jù)QPSK的映射關(guān)系,求出輸入函數(shù):
d1 = 1/2+1i*1/2;
d2 = -1/2+1i*1/2;
d3 = 1/2+1i*(-1/2);
d4 = -1/2 + 1i*(-1/2);
對輸入序列進行IFFT
xk = [0,d1,d2,d3,d4,0,0,0]; %輸入序列xk
sn = ifft(xk); ? %IFFT后輸出的sn序列
?即可得到輸入序列后的IFFT曲線
%////////////////////////////////////////////////////////////////////////////////////////////////////
采用公式法:f(t) =∑Fk·e(j·2π·Δf·kt)
我們QPSK調(diào)制,則一個OFDM符號里有2個bit
(一個OFDM符號與調(diào)制方式對應(yīng)的bit數(shù)目:(QPSK:2),(16QAM:4),(64QAM:6) ? )
根據(jù)公式求出子載波
%子載波
e1 = exp(1i*2*pi*f*t);
e2 = exp(1i*2*pi*f*t*2);
e3 = exp(1i*2*pi*f*t*3);
e4 = exp(1i*2*pi*f*t*4);
OFDM基帶復(fù)信號表達式
st = d1*e1 + d2*e2 + d3*e3 + d4*e4; ? %將上述公式展開
畫出st的圖像
我們將上述的st與sn圖像進行對比
(上圖形為實部,下圖形為虛部)
可以驚訝的發(fā)現(xiàn):IFFT后的圖形就是公式圖形的離散值!所以O(shè)FDM系統(tǒng)和傅里葉級數(shù)有種親密而不可分離的感情,如同牛郎和織女,楊貴妃和唐玄宗,葫蘆娃和爺爺。。。。。 好像有點奇怪
? 所以IFFT模塊的功能相當(dāng)于說:別麻煩發(fā)送N個子載波信號了,我直接算出你們在空中會疊加成啥樣子吧;FFT模塊的功能相當(dāng)于說:別用老式的積分方法來去除其余的正交子載波了,我?guī)湍阋淮伟袾個攜帶信號全算出來吧
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(圖片來自小白)
三.OFDM系統(tǒng)設(shè)計
終于要進行設(shè)計了,前面一大堆,我打字都打累了。原來寫文章那么辛苦,我覺得司馬遷好牛比。。
我們先從最簡單的高斯信道說起走嘛。
前面說了傅里葉變化在OFDM系統(tǒng)中的舉足輕重的作用,所以我們OFDM系統(tǒng)的仿真才使用IFFT和FFT算法
高斯信道
高斯信號就是在信號通過此信道中加入高斯白噪聲。
在maltab通信系統(tǒng)仿真中我們用awgn(TrData1,SNR,'measured'); 函數(shù)來給信號TrData1添加高斯白噪聲
瑞利信道
信號通過無線信道之后,其信號幅度是隨機的,即“衰落”,并且其包絡(luò)服從瑞利分布.
接受信號具有四種效應(yīng):1.陰影 2.遠(yuǎn)近 3.多徑 4.多普勒頻移
萊斯信道
簡單的說萊斯信道比瑞利信道多了一條直流分量。
CP
就是我們所謂的循環(huán)前綴,為什么要加入CP循環(huán)前綴這個冗余信息呢。為了抵抗由于多徑效應(yīng)帶來的ICI(載波間干擾),設(shè)計的時候也要注意下:一個CP占用了每個OFDM符號約的1/15的資源
引頻信號的意義
插入引頻信號通過訓(xùn)練序列的信息,實時估計信道,從而再做信號的矯正,從而再解調(diào)的時候減少誤碼率之類。
高斯信道下的OFDM通信系統(tǒng)matlab仿真
發(fā)送端:
第一步:產(chǎn)生隨機數(shù)列 ??Signal=rand(1,para*Ns*2)>0.5
其中我們所設(shè)置的 para為并行傳輸?shù)淖虞d波個數(shù)
Ns為一個禎結(jié)構(gòu)中OFDM信號的個數(shù)
第二步:進行串并轉(zhuǎn)化
串并轉(zhuǎn)化為十分重要的函數(shù)reshape函數(shù)
其用法為:SigPara = reshape(Signal,para,Ns*2); 將原始信號Signal 信號轉(zhuǎn)化為para 行 Ns*2列的信號
reshape(a,m,n);先把矩陣a按列拆分,然后拼接成一個大小為m*n的向量。
第三步:進行QPSK調(diào)制
(1)將數(shù)據(jù)分為兩個通道 即i通道和q通道
函數(shù)如下:
for j=1:Ns
ich(:,j)=SigPara(:,2*j-1);
qch(:,j)=SigPara(:,2*j);
end
(2)根據(jù)QPSK映射關(guān)系,求出輸入后的數(shù)據(jù)
kmod=1./sqrt(2);
ich1=ich.*kmod;
qch1=qch.*kmod;? %QPSK映射關(guān)系
第四步:插入保護間隔
ich3=[ich2(fl-gl+1:fl,:);ich2];
qch3=[qch2(fl-gl+1:fl,:);qch2];
我們選取gl = 32:將信號的最后32組數(shù)據(jù)進行復(fù)制,加入到原始信號中 -- 加強容錯性
第五步:并串變換
ich4=reshape(ich3,1,(fl+gl)*Ns);
qch4=reshape(qch3,1,(fl+gl)*Ns);
形成復(fù)發(fā)射數(shù)據(jù):TrData1=ich4+qch4.*sqrt(-1);
第六步:發(fā)射數(shù)據(jù)加入高斯白噪聲
ReData=awgn(TrData1,SNR,'measured');
%///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
接受端:
第一步:移去保護間隔
(1)進行數(shù)據(jù)的復(fù)式化
idata=real(ReData); %加入噪聲后的實部
qdata=imag(ReData);? ? %加入噪聲后的虛部
(2)對數(shù)據(jù)進行串并轉(zhuǎn)化
idata1 = reshape(idata,fl+gl,Ns);
qdata1 = reshape(qdata,fl+gl,Ns);
(3)移去保護間隔
idata2=idata1(gl+1:gl+fl,:);
qdata2=qdata1(gl+1:gl+fl,:);
取idata1的每一列的gl+1 到gl+fl的數(shù)據(jù)形成iadta2
第二步:FFT
第三步:QPSK解調(diào):
(1)將fft轉(zhuǎn)化后的數(shù)據(jù)/komd?
? (2)并串轉(zhuǎn)化
? ?(3)重組信號
第四步:抽樣判決
ReSig = Res > 0.5; 將上述重組后的信號進行分析,大于0.5的信號賦值為1,小于0.5的賦值為0
第五步:計算錯誤的概率
err = 0;
for i = 1:para*Ns*2;
if (Signal(i)~=ReSig(i))
err = err + 1;? ? ? ? ? ? %得到誤碼的個數(shù)
end
end
Pe = err / (para*Ns*2);
取多組SNR值,加入高斯信道我們可以得到snr-Pe曲線
%///////////////////////////////////////////////////////////////////////////////////////
引深:如果信道為瑞利信道在有多徑效應(yīng)和多普勒頻移的情況下
信道的信能將會受到嚴(yán)重的影響
圖為加入瑞利信道后的OFDM(沒有做信道估計)
可見當(dāng)加入了多徑和多普勒頻移后的信道 誤碼率從3%上升到了30%左右,瑞利信道完全破壞了信號的傳輸
引頻信號的引入
我們在加入列引頻和行引頻
A=[A;r]插行 ? ? ? ? ? A=[A c]插列
列間加入引頻:
ich2= [zeros(fl,1) ich21(:,[1:Ns/2]) zeros(fl,1) ich21(:,[Ns/2+1:Ns]) zeros(fl,1)] ;
行間加入引頻:
ich2 = [zeros(1,(Ns+3)) ; ich2(1:fl/2,:) ; zeros(1,(Ns+3)) ; ich2((fl/2)+1:fl,:) ; zeros(1,(Ns+3))]; ?
加入的結(jié)果:
加入引頻信號后可以通過LS算法來 做信道估計
LS算法基本原理:Y = HX + N ?其中N為噪聲信號,H為信道的頻率響應(yīng),Y,X為輸出,輸入信號的響應(yīng)
在理想信道下: H' = Y/X 輸入除以輸出(其中Y為通過瑞利信道后的信號) ,可以得到頻率響應(yīng)H的估計H'
我們用所得到的H'再反過來推算出X的估計:X' = Y/H' ?得到新的輸入。對X’再進行去引頻的后續(xù)處理
for j = 1:(Ns+3)
for i = 1:(para+3)
Hls(i,j) = idata21(i,j)./ich2(i,j);
ixg(i,j) = idata21(i,j) ./ Hls(i,j);
hls(i,j) = qdata21(i,j)./qch2(i,j);
qxg(i,j) = qdata21(i,j)./ hls(i,j);
end
end
加入信道估計后誤碼率的圖示:
結(jié)論
OFDM系統(tǒng)中 :OFDM系統(tǒng)在只有高斯白噪聲的情況下影響較小,OFDM設(shè)計在高斯信道下的優(yōu)勢很小
但是在瑞利信道中,OFDM引頻信號,CP,信道估計對傳輸?shù)男盘柶鸬搅吮Wo的作用。使其在收到多徑,多普勒頻移的條件下,能夠有效的恢復(fù)出原信號。
在沒有信道估計得OFDM--瑞利系統(tǒng),多徑,遠(yuǎn)近,陰影,多普勒頻偏對信號造成了嚴(yán)重的干擾。使其不能夠正常傳輸,有著嚴(yán)重的誤碼率。
。。。。。。。打字都打累了,可能里面會有些錯誤,請各位指正。