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