Tải bản đầy đủ (.doc) (9 trang)

báo cáo hệ thống thu phát ofdm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (711.66 KB, 9 trang )

BÁO CÁO TỐT NGHIỆP
Báo cáo
Hệ thống thu phát OFDM
MỤC LỤC
BÁO CÁO TỐT NGHIỆP 1
Báo cáo 1
Hệ thống thu phát OFDM 1
MỤC LỤC 2
BÁO CÁO 3
Sơ đồ khối hệ thống 3
Bên phát 4
QAMtrans(unsigned char * QamSymbolIn, CCHAR * QamSymbolOut, int QamsymbolLengh,int QamLevel)
-> thực hiện ánh xạ QAM 4
OrderPilotSymbol(PilotSymbolOrder, NullLow, NullHigh, IFFTLengh) 4
OrderDataSymhol(QamSymbolOut, DataSymbolOrder, IFFTLengh, NullLow, NullHigh) 5
Bên thu 6
BÁO CÁO
Hệ thống thu phát OFDM sử dụng công nghệ DSP
Sơ đồ khối hệ thống
(Phần code lấy ở bản 28/2 nhận chính xác 100% của các anh K50)
Bên phát
a. Data2symbol(unsigned char * DataTrans, unsigned char * QamSymbolIn, int
NumDataTrans, int QamLevel):
NumDataTrans = 16
- Input: Mảng Char 8 bit (16 phần tử)
- Output: Mảng đầu vào QAM (32 phần tử)
Cách thực hiện:
Input[k] gồm 8 bit vd: 10011010
 Output[2k]= 1010 (lấy 4 bit thấp bằng cách lấy input[k] AND 00001111)
 Output[2k+1] = 1001 (Lấy 4 bit cao bằng cách lấy kết quả của input[k] AND
11110000 đem dịch phải)


 2 phần tử liên tiếp (output[k] & output[2k+1] chứa 1 kí tự kiểu Char)
QAMtrans(unsigned char * QamSymbolIn, CCHAR * QamSymbolOut, int
QamsymbolLengh,int QamLevel) -> thực hiện ánh xạ QAM
- Input: Mảng QamSymbolIn gồm 32 phần tử 4bit  giá trị từ 0 -> 15  kiểu char
không dấu.
- Output: Mảng QamSymbolOut gồm 32 phần tử kiểu Cchar (Số phức ứng với các
điểm trong chòm sao QAM)
OrderPilotSymbol(PilotSymbolOrder, NullLow, NullHigh, IFFTLengh)
IFFTLength =64
 Tạo mảng PilotSymbolOrder gồm 64 phần tử kiểu Cint tạo thành 1 symbol Pilot
trước khi biến đổi IFFT.
 Mảng này không có NullLow & NullHigh
OrderDataSymhol(QamSymbolOut, DataSymbolOrder, IFFTLengh, NullLow,
NullHigh)
- Đầu tiên khởi tạo mảng 64 phần tử kiểu Cint gồm toàn phần tử {0,0} để đưa các
phần tử NullLow & NullHigh vào vị trí
- Sau đó chèn Data vào các vị trí còn lại
Null Low
1
Data
16
NullHigh
15
NullHigh
15
Data
16
NullLow
1
Tạo thành mảng DataSymbolOrder kiểu CIn chứa data trước khi đưa vào biến đổi

IFFT
b. IFFT
- Đầu vào: Mảng PilotSymbolOrder & mảng DataSymbolOrder kiểu CIN (64 phần
tử)
- Đầu ra: Tương ứng là mảng OutIFFTPilot & mảng OutIFFTData kiểu CFLOAT
(64 phần tử)
c. InsertGard
- Đầu vào: 64 phần tử mảng OutIFFTPilot or OutIFFTData.
- Copy 32 phần tử cuối chèn vào phía đầu của mảng.
- Đầu ra: 96 phần tử mảng SymbolOutPilot or SymbolOutData nnnbbbhhh.
d. FramePack(SymbolOutPilot, SymbolOutData, gBufferXmtPong,
NumDataofFrame, IFFTLengh + GardLengh)
 Thực hiện đóng gói khung
- Lần lượt 3 symbol (SymbolOutPilot – SymbolOutData – SymbolOutPilot) sẽ được
đưa vào nửa trước bộ đệm gBufferXmtPing (hoặc gBufferXmtPong).
- Khi đó mỗi phần tử của symbolOutPilot & symbolOutData sẽ được tách thành
thực ảo rồi nhân với 10000 và làm tròn trước khi đưa vào bộ đệm.
- Nửa bộ đệm còn lại là bản copy của nửa bộ đệm phía trước
 Như vậy một MultiFrame sẽ bao gồm 2 Frame giống nhau.
Bên thu
a. SynFrameInReceiver(Int16 * DoubleFrame, int FFTLengh, int GardLengh, int
NumDataofFrame)  Trả về điểm đồng bộ kiểu int
o Đồng bộ thô  Tìm khoảng chứa điểm đồng bộ
Chia dữ liệu nhận được ở bộ đệm bên thu thành các khối có chiều dài Lsymbol/2.
Để đơn giản, ta coi các khối đó là một phần tử của mảng A
T
F
i=0;
MinSqr[0 5]=0;
i=0;

MinSqr[0 5]=0;
i=0;
MinSqr[0 5]=0;
MinSqr[i]= ∑((A[i+2]-A[i])
2
)
i=i+1
i<6
i<6
MinSqr[i]= ∑((A[i+2]-A[i])
2
)
i=i+1
Cho i: 0 -> 5 tìm min của
Minsqr  i+2 là cửa sổ chứa
điểm bắt đầu khung;
TempPoint= (i+2)*ShiftLength
o Đồng bộ tinh  Tìm điểm đồng bộ chính xác
T
F
T
b. Getdata(Int16 * BufferIn, CFLOAT * OutSynchronuos, int iFrameTransLengh)
Dịch=False
Bằng Phương pháp Bình phương tối thiểu, So sánh
mảng A với mảng B có độ dài đúng bằng 1 Frame
với điểm đầu của mảng A trượt dần từ TempPoint
đến TempPoint – L (hình vẽ)
 Tìm được SynPoint
Dich=
True?

Dich=
True?
Dịch SynPoint ngược
lại 1 khoảng đúng bằng
1 Frame (-96*3*2)
dịch TempPoint đi 1
Frame (+96*3*2)
Dich=True
TempPoint <
độ dài 2
symbol
(96*2*2)
TempPoint <
độ dài 2
symbol
(96*2*2)
 Nhận dữ liệu từ bộ đệm ping/pong về bộ đệm chương trình
- Một khung đầy đủ sẽ được lưu vào Mảng OutSynchorous bao gồm 64*3 phần tử
kiểu CFLOAT (re,im)
BufferIn BufferIn[2k] BufferIn[2k+1] BufferIn[2K+2] BufferIn[2k+3] …
Kiểu int int int int …
Giá trị a b c d …
OutSynchronous OutSynchronous[k] OutSynchronous[k+1] …
Kiểu CFLOAT CFLOAT …
Giá trị {a/10000,b/10000} {a/10000,b/10000} …
c. RemoveGardLengh(FrameInReceiver, FrameWithoutGard, FFTLengh,
GardLengh, NumDataofFrame)
- Input: FrameInReceiver :3*96 phần tử kiểu CFLOAT
- Output:FrameWithoutGard: 3*64 phần tử kiểu CFLOAT
d. FrameFFT(FrameWithoutGard, WnFFT, FFTLengh, FFTExp,

NumDataofFrame)
- Input: FrameWithoutGard 3*64 phần tử kiểu CFLOAT
- Output: FrameWithoutGard 3*64 phần tử kiểu CFLOAT
e. ChannelEstimation(CFLOAT * FrameWithoutGard, CFLOAT * EstimationOut,
int FFTLengh, int NumDataofFrame, int NullLow, int NullHigh)
- Input: FrameWithoutGard 3*64 phần tử kiểu CFLOAT
- Output: EstimationOut 32 phần tử kiểu CFLOAT (64-2NullLow-2NullHigh)
f. QamInvert(EstimationOut, QamOut, NumDataofFrame*(FFTLengh-NullLow-
NullHigh));
- Input: 32 phần tử kiểu CFLOAT
- Output: 32 phần tử kiểu int
 Thực hiện bằng việc ánh xạ ngược từ đồ thị QAM
g. Symbol2Data( QamOut, DataOut, NumDataofFrame*(FFTLengh-NullLow-
NullHigh)
- Input: 32 phần tử kiểu int
- Output: 16 phần tử kiểu int
 Ghép 2 phần tử kiểu int liên tiếp tạo thành 1 phần tử kiểu int mới ứng với 1 kí tự
char 8 bit trong bảng mã ASCII

×