|
|
%实现OFDM传输的仿真程序1 Y. y: w. M4 C7 |; w9 p
. I8 M( V* V0 I( ^para=128; %并行子信道的个数# c+ s% C, u) G- }0 a+ _
/ x m1 l" J, ~; L9 G: E( m
fftlen:128; %FFT的长度
+ E# v& P' s6 z4 e+ ~
) J8 _/ X3 R; N) N, |paradata=reshape(seldata,para,nd9 w ]; {+ H+ D& W% B* Z y
! d4 I) V( L+ p' W*m1);* R$ N+ \' F4 r( M
^! R2 C( f; W* e# Z%QPSK调制
5 O) k% H0 D ~7 N( [) ]
4 p$ K* L* E7 t5 p[ich,qch]=qpskmod(paradata,para,nd,m1);
' _7 Y7 S& a& t
% K: W; ?4 T7 p0 Jkmod=1/sqrt(2);
( \5 `7 W& i9 }5 O& e% a* a
: t! X0 r, g& xichl=ich.*kmod;
" }; v* \1 i3 i9 s1 x- w, R- g6 \) y/ m0 R- K
qchl=qch.*kmod;0 z4 a+ N# _: F+ |0 u+ y
! a3 q/ W6 u1 L: D# B B8 x
%In叩(离散傅里叶反变换)0 V" o! c% B: c/ P* r0 k
0 c" {+ y4 x6 G4 l3 `$ n1 P
X=ichl+qchl.*i:, A4 Y1 j% }. C7 D, e8 y2 L) T
+ O5 A; ?9 q3 A6 r
y=ifft(x);& W0 S1 }. G4 e, B
* x5 \; b3 N8 i" K
ich2=real(y);
4 g( K' R9 i# T' ?+ g" Y' { i! L* M! Q' @
qch2=imag(y);/ V7 u# u' U& o" L& U
+ r4 }2 j! C2 s% g4 ]- q2 b" }& }5 U%插入保护间隔' m2 F7 c/ J0 m8 U; ]0 s/ ]
1 k. v" z4 W; V/ E j
[ich3,qch3]=giins(ich2,qch2,fftlen,gilen,nd);
1 ?" Q, X. {( u3 Y! R" f% G8 X) v& @* G" p5 q, e
fftlen2=fftlen+gilen;) a. K! A1 ~% z% _0 B
% O- r) n: _" c0 n- _1 f
%衰减计算0 K% w% d( j' _8 [- C
7 } s' K/ B& pspow=suln(ich3.2+qch3.“2)/nd./para;" S" a; ^4 n7 s$ m6 u
r1 W7 M$ r$ Z! c4 H' Iattn=0.5*spow*sr/br*10.“(.ebn0/10);
( {; j3 V8 ^5 L5 s) b
( F4 f$ R. @. o9 g2 H# Zattn=sqrt(attn);
) A. c, R1 F- @0 E; S9 q
+ k( f, Q/ Y0 O0 P%高斯自信道; a# m0 P1 z( `3 t3 L' D: S
$ w0 ?% ]( n; L) e$ H7 s0 r5 \[ich4,qeh4]=eomb(ich3,qch3,attn);
L1 k0 |& k; W+ G3 {6 M9 C- [
%接收部分 M% z4 D1 Q' H; ?
8 B" X" [! ^- a" e/ [%去除保护间隔
! j# Y) {- B, J5 I; t- S9 M
) h/ `* c9 z. }. D4 ]9 Z8 ^+ }4 r% G[ieh5,,qeh5]=girem(ich4,qch4,fftlen2,gilen,- z0 ?, ~' e3 j1 ~! e$ K
/ N, h7 y$ u- j0 ~nd);2 p) Y& U6 K- G0 u2 n8 P
8 x+ j5 `. B8 q. F5 a# |% P) `& e% ^- b
%FFr(离散傅里叶变换) M+ t: \& p4 \8 Y
! S: k5 m; q/ {$ y7 [IX=ich5+qch5.*i:( j4 d6 {8 h- Q8 J" P
5 k# [& k- y/ [: \; ~2 C) ~
ry=fit(Ⅸ);
# O2 \# X4 a; L5 J0 O+ ~! e; ]5 b* W. h- y
ich6=real(ry);
! o; N/ V3 O* S o. n9 ^* n
$ N" M, r/ P) g; i) Iqch6=imag(ry);% A1 I f' ?8 {6 @5 K
9 j; j) B2 K: ^: |
%QPSK解调: w7 m9 W9 O: K* E0 s
; T3 C* s/ X( y
ieh7=ich6./kmod;
9 h0 m0 F" f9 l3 J
1 w2 w2 u2 x) Y# ]qch7=qch6./kmod;% E- Z% Y- w. B( q
1 J. A5 H6 [. r: e! z" O
[derrtxtata]=qpskdemod(ich7,qch7,para,nd,m1);) I! V$ c1 u5 K/ N! h; o0 \! }' k) {
t' p* F0 j# S%并串变换+ ]- a' Y/ L7 c
- o* s- }; E! X* D8 O; M* ~
demodatal=reshape(demodata,I,para*nd*rnl);
3 L8 O+ z/ M) W4 C. S9 p, [) |& {2 P. J. e% I! d6 g s& J- v
%比特误码率(BER)
. r: | i1 p) ~! M2 i* P
# p1 ]1 a2 A' W) V. T: Mbit—errors=find(seldata~=demodatal);
4 k0 U2 e/ V6 i2 p( n8 W2 ]% Z5 H! `- A* F+ n2 R3 R# Z) u5 Q% B
bit—error—count 2 size(bit—e/TOES,2);
' j+ I: g$ u* V I$ M' W' U8 Y# H& n5 J% g8 ]) k H$ y) e. I0 U4 l
total—bits=size(demodatal,2);) W9 U9 f" L3 u' V/ K
. a1 A9 G4 z u7 n
bit—error—rate=bit—error—count/total—bits;+ Q5 x- w9 C% q7 e" |
- v+ a3 w3 v X# O4 a3 V6 @
fprintf(7%f\n’,bit—eITor—rate) U# F! B) s0 y8 I& S' y* \& V
; b. y8 K! x& z%end offile( }: ^. V3 B: ~% X3 C9 \
- L8 n8 V; o9 ?程序运行结果,输出误码率为:
) v5 p/ Q1 `# A) f( [9 R
0 l" {" a4 j; b5 S3 `7 [( Q>>0.037109
7 A' x: w/ o1 B5 c |
|