Xem mẫu

  1. BÁO CÁO TỐT NGHIỆP Báo cáo Hệ thống thu phát OFDM
  2. MỤC LỤC BÁO CÁO ....................................................................................................................... 3 1. Sơ đồ khối hệ thống ..................................................................................................... 3 2. Bên phát ...................................................................................................................... 4 3. QAMtrans(unsigned char * QamSymbolIn, CCHAR * QamSymbolOut, int QamsymbolLengh,int QamLevel) -> thực hiện ánh xạ QAM ........................................... 4 4. OrderPilotSymbol(PilotSymbolOrder, NullLow, NullHigh, IFFTLengh) ..................... 5 5. OrderDataSymhol(QamSymbolOut, ............. DataSymbolOrder, IFFTLengh, NullLow, NullHigh) 5 6. Bên thu ........................................................................................................................ 6
  3. BÁO CÁO Hệ thống thu phát OFDM sử dụng công nghệ DSP Sơ đồ khối hệ thống
  4. (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)
  5. 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 Data NullHigh NullHigh Data NullLow 1 16 15 15 16 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.
  6. - Đầ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ộ
  7. 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 i=0; MinSqr[0..5]=0 MinSqr[i]= ∑((A[i+2]-A[i])2) i=i+1 i 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 i=0; i=0; MinSqr[0..5]=0; MinSqr[0..5]=0;
  8. TempPoint < dịch TempPoint đi 1 độ dài 2 Frame (+96*3*2) Dịch=False symbol T (96*2*2) Dich=True F 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 Dịch SynPoint ngược Dich= lại 1 khoảng đúng bằng True? 1 Frame (-96*3*2)
  9. 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) 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)
  10. - 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)
  11. 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
nguon tai.lieu . vn