|
%实现OFDM传输的仿真程序
- C/ ^; o: g* T3 W% {4 e+ g% Y8 c$ [2 C$ d
para=128; %并行子信道的个数* _" L# r3 x$ ]% A: @0 U
K) ~% o5 g5 `* A8 ^
fftlen:128; %FFT的长度
& p/ M8 u5 O% f
" }9 q+ j3 Q* Jparadata=reshape(seldata,para,nd
( D0 c9 t ^5 }$ i! F, C$ z* Y* ^: m6 ^) q
*m1);2 F z2 _; \( R' e( m4 i
$ G& F ]) A {' j%QPSK调制
, P9 G: t$ c/ Z n
' O3 a/ `4 ~, I- o[ich,qch]=qpskmod(paradata,para,nd,m1);
1 |9 |1 r5 y: M$ i; i/ f
" a }4 | M) t8 v$ x, M Y. xkmod=1/sqrt(2);* ^4 d% ]$ X p7 Y( T6 A" s
9 l" X* Y9 i% x+ B+ ~5 Dichl=ich.*kmod; E2 F; F' s. X" H d, J
6 \0 @$ Y& @. O( f7 c( n7 X5 j
qchl=qch.*kmod;
2 D% I) m( D& ~
% x: I6 _$ d. N%In叩(离散傅里叶反变换). }5 _% x8 ^$ z" t1 l
" i% g! i: Q+ r: W X6 {4 i0 S' ` JX=ichl+qchl.*i:
* O5 Z7 A$ K9 C8 F# E7 w' Y" {' S: B, h
y=ifft(x);7 ~9 y& o& u+ K5 t# n' S( }6 j
* d7 R& @! c7 f3 K }5 U( w( S
ich2=real(y);9 r2 D# R/ \- i/ v* L
) @0 o8 ~3 z9 rqch2=imag(y);
) B% v8 s) \" m& D f) K+ S& w" Z0 V: I/ t3 M
%插入保护间隔
1 ^% G. V; p& D( w
5 z9 g/ V! x2 T# k$ I+ e+ p0 Y) b4 [: f[ich3,qch3]=giins(ich2,qch2,fftlen,gilen,nd);& v5 O/ m' l4 z) _7 O, L
& |, b8 z, b( |; `+ S, S
fftlen2=fftlen+gilen;1 F( H: A3 T9 D
6 j' B; ?( N$ ^4 d7 F, ]1 u) }%衰减计算
! u3 `/ z8 W4 p% u/ v A; q* G& b* C' y' @
spow=suln(ich3.2+qch3.“2)/nd./para;" z' V3 B4 S; Y
( p& I0 k% Q z6 X2 ]
attn=0.5*spow*sr/br*10.“(.ebn0/10);: q6 k# e6 U o0 r. ~
6 l9 R9 n4 o# f6 a- i' f6 fattn=sqrt(attn);$ {. D& _9 Y) Y7 ?1 b4 n
" n% F, t$ q) X%高斯自信道
! Q& p' A& s( w7 ~
+ T) D; X( Y4 z: h% S[ich4,qeh4]=eomb(ich3,qch3,attn);
3 l9 h' m, G! p" M. g! M/ ~) v- X
; F; I; {: O/ W7 U. i4 W# x% V%接收部分
& f7 R( L' L# H/ {$ m6 R
7 b _1 T( |# E: \. [%去除保护间隔
" i4 k( e/ D1 t0 `: o% Z' Q- W7 J$ Y3 O$ q
[ieh5,,qeh5]=girem(ich4,qch4,fftlen2,gilen,( I" B0 r( T- F( L
T. [# u; q% Wnd);
6 D' c8 r8 `0 E5 |9 j9 `2 Q
: `& A% N q- O( Z% m `" S%FFr(离散傅里叶变换)( r6 l; r, n( H% k
% Z& S% V5 D2 @5 d8 c( l. u
IX=ich5+qch5.*i:: w) V; g' r1 }
! g: g2 s9 t& wry=fit(Ⅸ);
+ Z& q( V: a8 r2 o4 F5 I
1 M" X8 E, ], yich6=real(ry);
) r) C, c9 G7 u4 U, h
: Q9 _5 w9 @3 f6 m3 l5 R' pqch6=imag(ry);% G& p8 A9 x; k) N
' Z$ f7 v5 A: D" e
%QPSK解调6 \9 ^) Z- J1 ^+ X& y* P
0 F3 v) F. O+ \/ B3 xieh7=ich6./kmod;
$ S3 S8 C, C. C7 G
& z# Y1 ~4 H6 S0 J+ C# k/ ~qch7=qch6./kmod;* E9 s# W9 C7 x/ E" N
- d" M6 a6 H4 f[derrtxtata]=qpskdemod(ich7,qch7,para,nd,m1);
0 s& _. O+ ?! i$ U9 L& D. Q
8 c6 k/ ~2 R5 W2 e; O: K( s0 p%并串变换
# i; V$ L' Z) ]* Q- t& ]% u4 T+ c1 }9 K
demodatal=reshape(demodata,I,para*nd*rnl);" {/ P6 g5 j6 [
# V* M8 d* B5 d/ F; r" c2 `1 Q%比特误码率(BER)
) Y# D" S3 N1 }& B* \% }5 Z" U- c* [. i7 V
bit—errors=find(seldata~=demodatal);
" m( D3 y% N7 D2 x
! @% \0 j7 p4 D5 Cbit—error—count 2 size(bit—e/TOES,2);
; U* X4 B$ `. A# O7 L3 O4 X
. k- d4 K1 Z, wtotal—bits=size(demodatal,2);& U& L8 f# l3 \4 f% r5 Q
( z7 y- c n) [# f" u, z" bbit—error—rate=bit—error—count/total—bits;
1 y @/ u1 ~# d" V) d2 V7 u6 K$ u, {, [& c
fprintf(7%f\n’,bit—eITor—rate)# |, ]3 e$ `* a. g6 r% @8 g
# R2 E" w( l0 B9 g
%end offile
1 o- v' l5 m8 P& G5 ^2 Y1 G0 x5 W& Y4 `9 r. ~0 N9 P
程序运行结果,输出误码率为:- K. X- S2 f' I- @
, F- o) J2 G0 g
>>0.0371090 d& Q2 j" d) F% E* @- P
|
|