Nghiên cứu tìm hiểu hệ thống thu phát OFDM

8 358 0
Nghiên cứu tìm hiểu hệ thống thu phát OFDM

Đang tải... (xem toàn văn)

Thông tin tài liệu

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: Inputk gồm 8 bit vd: 10011010  Output2k= 1010 (lấy 4 bit thấp bằng cách lấy inputk AND 00001111)  Output2k+1 = 1001 (Lấy 4 bit cao bằng cách lấy kết quả của inputk AND 11110000 đem dịch phải)  2 phần tử liên tiếp (outputk output2k+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.

Nguyễn Hạnh 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) 1 Nguyễn Hạnh 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 2 Nguyễn Hạnh 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. 3 Nguyễn Hạnh 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 4 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 Nguyễn Hạnh T F o Đồng bộ tinh  Tìm điểm đồng bộ chính xác T F 5 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 Dịch=False 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) Nguyễn Hạnh T b. Getdata(Int16 * BufferIn, CFLOAT * OutSynchronuos, int iFrameTransLengh)  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) BufferI n BufferIn[2 k] 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) 6 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) Nguyễn Hạnh - 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) 7 Nguyễn Hạnh 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 8 . Nguyễn Hạnh 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) 1 Nguyễn Hạnh Bên phát a. Data2symbol(unsigned. 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. ∑((A[i+2]-A[i]) 2 ) i=i+1 Nguyễn Hạnh T F o Đồng bộ tinh  Tìm điểm đồng bộ chính xác T F 5 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

Ngày đăng: 11/11/2014, 14:40

Từ khóa liên quan

Mục lục

  • BÁO CÁO

    • Hệ thống thu phát OFDM sử dụng công nghệ DSP

    • Sơ đồ khối hệ thống

    • Bên phát

    • QAMtrans(unsigned char * QamSymbolIn, CCHAR * QamSymbolOut, int QamsymbolLengh,int QamLevel) -> thực hiện ánh xạ QAM

    • OrderPilotSymbol(PilotSymbolOrder, NullLow, NullHigh, IFFTLengh)

    • OrderDataSymhol(QamSymbolOut, DataSymbolOrder, IFFTLengh, NullLow, NullHigh)

    • Bên thu

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan