|
%实现OFDM传输的仿真程序- z* B, V) ]9 `& W
" _) b9 D& F; j4 }5 G
para=128; %并行子信道的个数9 S8 i2 q) c. T" O/ Q
6 z8 v+ ^5 I7 W% _fftlen:128; %FFT的长度/ F: E6 w5 O/ F+ H$ q8 L6 J+ [
2 \) N$ D5 _- D4 D$ F4 W2 E' `
paradata=reshape(seldata,para,nd8 `) {/ G8 |+ B ]2 F
. V9 y. @6 O( L0 A2 k*m1);
) n5 s y1 i( |$ K% c# D8 K4 }- C% s! Q% j
%QPSK调制
; L( x; o4 s* O
4 |6 L z9 L6 {[ich,qch]=qpskmod(paradata,para,nd,m1);
( h4 o3 t! U8 e5 v0 \( \' t3 }- v9 \* J( I
kmod=1/sqrt(2);- {' \4 r' |& R1 {0 \3 v5 {
3 k% W& u o T9 \8 l1 c
ichl=ich.*kmod;
! v" K5 [6 n3 X) T+ X4 ?, Y; x- \" u) J' |( X/ n' t
qchl=qch.*kmod;
) E" W# V* R" H& u0 a) w6 A( W+ D9 ~
%In叩(离散傅里叶反变换)
( }) L4 K, ]# K$ A+ j' x% q" j: t4 h; r; q4 H( \7 V4 _
X=ichl+qchl.*i:
6 X5 @9 k# A2 i% m+ e- h% Q3 L& r+ f: ~' T, d8 t$ t" X
y=ifft(x);8 j( y- W! Z( l& }
( s% n; M8 X2 e4 n: j h. m; vich2=real(y);& z) K3 {* |/ L) g4 Q4 O
& P5 U8 p6 ]8 ~( V& W+ d' ]- M3 jqch2=imag(y);; v. z* S! O" W6 J0 `4 H
' }8 Z+ H" m: S/ ?* T- s%插入保护间隔
2 C& t) g+ @1 o( G8 j, x! k, {/ Z/ i+ W8 _" n+ A' I' `/ S* g
[ich3,qch3]=giins(ich2,qch2,fftlen,gilen,nd);
; A' J* ]/ Y+ b! \: o1 B9 W- W! C! q& s5 e, W+ _: M
fftlen2=fftlen+gilen;- d; b6 _2 u/ @2 L' p
! t2 t- x7 S! t3 d
%衰减计算
1 W- j0 o7 w7 A$ R0 T. @/ ]. u. ]( W4 |4 y: e
spow=suln(ich3.2+qch3.“2)/nd./para;
( q' g. k& P' s! w
( {) j9 s/ U, t+ Pattn=0.5*spow*sr/br*10.“(.ebn0/10);5 l: [5 s0 V* [% |( F' N0 }
- y5 _+ |7 O4 @& r+ h
attn=sqrt(attn);
9 p! ^: t5 i' h4 n1 ?
6 z' c* L1 w4 _+ q# ?%高斯自信道
3 k* x' N+ u5 B, c @. p$ x( W- r1 C6 c8 M8 e0 l* C
[ich4,qeh4]=eomb(ich3,qch3,attn);
" L" ]+ u; k0 B6 o1 X
& I2 }+ y; q( V4 I8 O%接收部分" q6 o6 D4 Z0 T* u1 n9 I# Y
" ~2 M4 \0 P. q* {' U
%去除保护间隔* E4 `5 d2 a; C q* Z# u* _/ g
7 c2 s( w& k- D# m; F[ieh5,,qeh5]=girem(ich4,qch4,fftlen2,gilen,2 {4 M, }0 Q8 o; Y3 _+ o, A: T
8 B7 r) e( ^' S8 |
nd);* O$ X9 B) m3 @7 h, X# F8 f
9 I E7 m; o X0 T4 r; T% I1 X8 U
%FFr(离散傅里叶变换)8 P% y% x; T. g. v6 @
' o' U+ h7 u _
IX=ich5+qch5.*i:+ f# N' h6 d5 n) I r, i
& g1 S! w8 U8 i, g' D, y: x
ry=fit(Ⅸ);! t: Q5 Z9 z5 o" j3 Z
$ P8 B+ U# |; @
ich6=real(ry);
1 E' |( y+ o/ R" s
0 ~* f4 ~5 E7 l, P* |qch6=imag(ry);7 C+ v! R& q) {# [+ Y. I0 w* w
# [5 k4 c* `* s: l6 Y
%QPSK解调
0 N! I2 B5 C7 n1 S/ i" f; q* ?9 C8 N% {% l! V: X1 `* g5 Q
ieh7=ich6./kmod;
: I, P+ F' v5 j2 o- }3 k( n! G4 i# ?- G3 |/ L
qch7=qch6./kmod;
8 { O- a6 V5 s) }! T2 D
) e# r3 a# f; p3 `4 f% a: |( K[derrtxtata]=qpskdemod(ich7,qch7,para,nd,m1);
' O/ B3 a, n6 U; S! E7 F; Y6 n: f% d4 O9 m
%并串变换
; `( m# x$ n4 p1 F
, U; [: M! ^) ^$ ndemodatal=reshape(demodata,I,para*nd*rnl);
; |7 s* c, Q; j) U9 _+ y* E4 t% V
* w% y( F' J) v# Z0 `5 R& Y; c6 ~%比特误码率(BER)
) }) [9 B$ G0 e8 m! ]8 U$ z- |) a3 U7 a/ p I/ n+ a
bit—errors=find(seldata~=demodatal);5 ~7 v4 }4 o% }0 b7 p0 C5 w
# s* z9 F, h% F7 f: abit—error—count 2 size(bit—e/TOES,2);
# t( D- h3 @* ?- U7 j, n8 M- R
$ Q; a; Z% _8 Z4 N8 o5 Ftotal—bits=size(demodatal,2);
( F5 X1 g; J0 M! r, _3 _! a: @* ~' S( }1 W5 b E {7 H2 n j' m
bit—error—rate=bit—error—count/total—bits;
4 T3 w' @' R( A3 i0 v
. }; T+ ^% m6 e" W, k, dfprintf(7%f\n’,bit—eITor—rate); K" ]. M+ r! c; K/ d$ c
$ Y$ b: r6 p2 v8 J- M
%end offile
! o, k K3 f% A6 r9 v4 U9 y* F
& f, _+ ]- T$ S3 t! [3 T( W' d程序运行结果,输出误码率为:! b y9 c+ f& f4 B2 G8 p9 g
! Q& B5 K' K7 E" g
>>0.037109
6 j1 C* ^2 W' ?: _ |
|