專利名稱:分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)互聯(lián)技術(shù)設(shè)計(jì)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種分布式的無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)的設(shè)計(jì)方法,尤其涉及一種利用套接字實(shí)現(xiàn)分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)各個(gè)處理器之間的TCP/IP網(wǎng)絡(luò)通信技術(shù)設(shè)計(jì)方法。
背景技術(shù):
隨著無(wú)線通信近年的爆炸性發(fā)展,通信和信號(hào)處理系統(tǒng)也變得越來越復(fù)雜。與此同時(shí),各種新技術(shù)的發(fā)展,如快速、廉價(jià)的數(shù)字信號(hào)處理硬件、現(xiàn)場(chǎng)可編程門陣列(FPGA)、片上系統(tǒng)(SOC)等,開始對(duì)通信系統(tǒng)的實(shí)現(xiàn)產(chǎn)生重大的影響。通信系統(tǒng)復(fù)雜性的增加使得分析與設(shè)計(jì)所付出的時(shí)間和精力也迅速上升。在另外一方面,運(yùn)用傳統(tǒng)的方法設(shè)計(jì)諸如第三代移動(dòng)通信、超三代移動(dòng)通信如此龐大和復(fù)雜的電子系統(tǒng),如同用一磚一瓦建造金字塔,效率低、成本高,且極容易出錯(cuò)。
常用的無(wú)線通信測(cè)試評(píng)估方法有公式推導(dǎo)、計(jì)算機(jī)仿真測(cè)試和硬件仿真測(cè)試?;诠降姆椒ㄔ趯?duì)系統(tǒng)的整體性能提供透徹了解方面是比較困難的,而且公式推導(dǎo)常常是在簡(jiǎn)化模型的基礎(chǔ)上進(jìn)行的,因此準(zhǔn)確度欠佳。在設(shè)計(jì)的早期階段,除了一些理想和過分簡(jiǎn)化的情況外,僅用分析方法評(píng)估復(fù)雜的通信系統(tǒng)的性能是極度困難的。根據(jù)硬件的測(cè)量數(shù)據(jù)評(píng)估性能當(dāng)然是準(zhǔn)確而可信的方法。在設(shè)計(jì)階段后期,這種方法費(fèi)錢費(fèi)時(shí),不靈活。在設(shè)計(jì)周期的早期由于設(shè)計(jì)的方案選擇對(duì)象可能很多,需要針對(duì)每一種設(shè)計(jì)方案制定不同的硬件測(cè)試方案,這種方法顯然是不可取的。將基于仿真的方法用于性能評(píng)估,幾乎可以按要求的任意詳細(xì)程度建立模型,和基于公式或硬件的方法相比,設(shè)計(jì)空間更好地得到了利用。用基于仿真的方法,可以很容易地將數(shù)學(xué)和經(jīng)驗(yàn)的模型結(jié)合在一起,被仿真的結(jié)果也能用作參考以證實(shí)硬件的功能。
從第二代移動(dòng)通信系統(tǒng)的研發(fā)開始至今,計(jì)算機(jī)仿真測(cè)試已經(jīng)成為了移動(dòng)通信研發(fā)的最有力武器。每一項(xiàng)新技術(shù)或每一個(gè)新系統(tǒng)投入商用之前都是由多家公司或者研究機(jī)構(gòu)進(jìn)行了長(zhǎng)時(shí)間的仿真以檢驗(yàn)其性能。通常的通信系統(tǒng)的仿真測(cè)試分為鏈路級(jí)仿真測(cè)試和系統(tǒng)級(jí)仿真測(cè)試兩方面。系統(tǒng)級(jí)仿真測(cè)試主要是針對(duì)無(wú)線接入系統(tǒng)進(jìn)行仿真測(cè)試。鏈路級(jí)仿真測(cè)試主要是對(duì)通信系統(tǒng)物理層的無(wú)線傳輸技術(shù)(如編碼、交織、調(diào)制和擴(kuò)頻等)進(jìn)行仿真,得到該技術(shù)在不同無(wú)線信道下的性能。仿真結(jié)果主要表現(xiàn)為在不同無(wú)線環(huán)境下的誤碼率(BER)或者誤幀率(FER)與信噪比的關(guān)系曲線。鏈路級(jí)仿真主要有兩個(gè)用途,一是用于檢驗(yàn)無(wú)線傳輸技術(shù)的性能,二是檢驗(yàn)無(wú)線系統(tǒng)的端到端性能,并為系統(tǒng)級(jí)仿真提供數(shù)據(jù)支持。
多輸入多輸出(MIMO,Multiple-Input Multiple-Output)無(wú)線通信傳輸技術(shù)具有很好的抗衰落和抗噪聲的能力,從而可獲得巨大的容量。因此,在功率帶寬受限的無(wú)線信道中,多輸入多輸出(MIMO,Multiple-Input Multiple-Output)無(wú)線通信傳輸技術(shù)是實(shí)現(xiàn)高數(shù)據(jù)速率、提高系統(tǒng)容量和傳輸質(zhì)量的重要技術(shù)之一。它的優(yōu)越特性使之成為未來超三代通信系統(tǒng)(B3G)以及第四代通信系統(tǒng)中的關(guān)鍵技術(shù)之一。
針對(duì)多輸入多輸出通信系統(tǒng)的無(wú)線傳輸技術(shù)進(jìn)行評(píng)估所需的運(yùn)算量要比以往的單輸入單輸出通信系統(tǒng)的評(píng)估測(cè)試要大很多。如果再考慮多用戶情況下的測(cè)試,其運(yùn)算量是無(wú)法利用現(xiàn)有的單臺(tái)高性能計(jì)算機(jī)實(shí)現(xiàn)的。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述現(xiàn)有技術(shù)的缺點(diǎn),提供一種分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)互聯(lián)技術(shù)設(shè)計(jì)方法,它將整個(gè)傳輸技術(shù)仿真測(cè)試的運(yùn)算分散到兩臺(tái)計(jì)算機(jī)上運(yùn)行,從而提高無(wú)線通信傳輸技術(shù)測(cè)試評(píng)估的效率;另外,本發(fā)明將分別在兩臺(tái)不同的計(jì)算機(jī)中運(yùn)行的發(fā)射機(jī)和接收機(jī)通過TCP/IP協(xié)議連接了起來,使得發(fā)射機(jī)和接收機(jī)真正實(shí)現(xiàn)了物理分離并且接收機(jī)所接收到的數(shù)據(jù)完全由第三方評(píng)估單位來決定,從而提供給測(cè)試方一個(gè)公平、公開的測(cè)試平臺(tái)環(huán)境,保證了測(cè)試公平性。
本發(fā)明為解決技術(shù)問題所采用的技術(shù)方案是一種利用套接字實(shí)現(xiàn)分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)各個(gè)處理器之間的TCP/IP網(wǎng)絡(luò)通信,包括以下步驟第一步,采用雙線程技術(shù),即工作線程和用戶界面線程,實(shí)現(xiàn)分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)的主控部分,主控部分的實(shí)現(xiàn)包含兩個(gè)流程第一個(gè)為雙機(jī)通信流程,第二個(gè)為虛擬儀器控制流程;在雙機(jī)通信流程中,信道輸出的數(shù)據(jù)存入緩沖區(qū)后,將讀寫標(biāo)志位即全局變量置為可讀,并將這一事件作為一個(gè)消息告知用戶界面線程,用戶界面線程判斷這一消息屬性之后,調(diào)用網(wǎng)絡(luò)通信模塊進(jìn)行發(fā)送操作,接收機(jī)用戶界面線程的網(wǎng)絡(luò)通信模塊接收到數(shù)據(jù)之后,將讀寫標(biāo)志位即全局變量置為可讀,用以告知工作線程可以從接收機(jī)輸入緩沖區(qū)讀取數(shù)據(jù)并調(diào)用接收機(jī)模塊;虛擬儀器控制流程則是利用臨界區(qū)的方法實(shí)現(xiàn)虛擬儀器所處的用戶界面線程與工作線程之間的線程同步;
工作線程主要用于鏈路的計(jì)算,而用戶界面線程將用于虛擬儀器的顯示和實(shí)現(xiàn)兩個(gè)主機(jī)之間的互聯(lián)通信;使用MFC(Microsoft Foundaation Class微軟基礎(chǔ)類)提供的同步對(duì)象中的臨界區(qū)對(duì)象CCriticalSection保重線程間的同步;利用創(chuàng)建自定義消息的方法實(shí)現(xiàn)兩個(gè)線程之間的通信;創(chuàng)建自定義消息的方法具體如下 首先定義全局變量const WM_SENDDATA=WM_USER+100; 在對(duì)話框類的頭文件中DECLARE_MESSAGE_MAP()的前面添加下列語(yǔ)句afx_msg void OnSendData(); 在對(duì)話框類的實(shí)現(xiàn)文件中BEGIN_MESSAGE_MAP()的后面添加語(yǔ)句ON_MESSAGE(WM_SENDDATA,OnSendData),將消息與消息執(zhí)行函數(shù)代碼捆綁; 編寫OnSendData()發(fā)送數(shù)據(jù)函數(shù);工作線程中,信道處理數(shù)據(jù)完畢后,產(chǎn)生該消息使用語(yǔ)句SendMessage((HWND)pParam,WM_SENDDATA,0,0),即可向用戶界面線程發(fā)送消息,用戶界面線程根據(jù)自身的消息處理機(jī)制自動(dòng)響應(yīng)該消息,調(diào)用OnSendData()函數(shù),發(fā)送數(shù)據(jù);第二步,使用套接字實(shí)現(xiàn)分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)各主機(jī)之間的互聯(lián)首先,使用客戶機(jī)/服務(wù)器模型來實(shí)現(xiàn)各主機(jī)之間的互聯(lián);將發(fā)射主機(jī)作為服務(wù)器,接收主機(jī)作為客戶機(jī);其次,將要傳送的信道輸出的數(shù)據(jù)進(jìn)行組包、傳送,組包的數(shù)據(jù)由包頭和包數(shù)據(jù)組成,包頭中的內(nèi)容包括包頭長(zhǎng)度;信道當(dāng)前信息,亦即信道當(dāng)前的狀態(tài)信息,當(dāng)前包是否是最后一包,包數(shù)據(jù)位于包頭后面,它里面儲(chǔ)存的是所要發(fā)送的數(shù)據(jù);組包完成之后,利用自定義消息的方法,告知用戶界面線程需要發(fā)送當(dāng)前數(shù)據(jù),用戶界面線程響應(yīng)該自定義消息之后,調(diào)用套接字中的發(fā)送函數(shù)將數(shù)據(jù)發(fā)送給接收主機(jī)。
使用套接字實(shí)現(xiàn)分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)各主機(jī)之間的互聯(lián),采用了TCP/IP協(xié)議的網(wǎng)絡(luò)互聯(lián)技術(shù);亦即,網(wǎng)絡(luò)傳輸算法;網(wǎng)絡(luò)傳輸算法是將發(fā)射主機(jī)作為服務(wù)器,接收主機(jī)作為客戶機(jī);網(wǎng)絡(luò)傳輸算法采用自定義消息的方法來實(shí)現(xiàn)工作線程與用戶界面線程之間的通信;按照所測(cè)業(yè)務(wù)的不同,網(wǎng)絡(luò)傳輸?shù)呢?fù)荷也不同,網(wǎng)絡(luò)傳輸算法按以下步驟進(jìn)行第一步,發(fā)射主機(jī)和接收主機(jī)之間建立信令規(guī)定;定義接收主機(jī)向發(fā)射主機(jī)發(fā)送“1”表示當(dāng)前包處理完畢,請(qǐng)發(fā)下一包數(shù)據(jù);發(fā)送“2”表示當(dāng)前信噪比測(cè)試結(jié)束,要求發(fā)射機(jī)變化信噪比,進(jìn)行下一個(gè)信噪比點(diǎn)的測(cè)試;發(fā)送“3”表示整個(gè)測(cè)試完畢;第二步,發(fā)射主機(jī)方發(fā)現(xiàn)信道輸出緩沖區(qū)為可讀,亦即信道已經(jīng)將處理完的數(shù)據(jù)放入緩沖區(qū)中等待網(wǎng)絡(luò)傳輸時(shí),工作線程利用自定義消息的方法請(qǐng)求用戶界面線程發(fā)送數(shù)據(jù);用戶界面線程收到該消息后,工作線程就將處理器的使用權(quán)交給用戶界面線程,用戶界面線程隨即調(diào)用套接字發(fā)送函數(shù),將信道輸出緩沖區(qū)中的數(shù)據(jù)發(fā)送出去,同時(shí),將信道輸出緩沖區(qū)的讀寫標(biāo)志置為可讀,以便信道函數(shù)能夠輸出下一包數(shù)據(jù);用戶界面線程在完成上面的一系列操作后,再將處理器的使用權(quán)交還給工作線程。
第三步,當(dāng)發(fā)射機(jī)方發(fā)送數(shù)據(jù)給接收機(jī)方后,接收主機(jī)自動(dòng)響應(yīng)套接字中的接收數(shù)據(jù)函數(shù),以接收數(shù)據(jù);由于接收機(jī)響應(yīng)的消息函數(shù)存在于用戶界面線程中,而在未接收數(shù)據(jù)之前,接收機(jī)一直處于工作線程內(nèi),在響應(yīng)該消息函數(shù)之后將工作線程掛起,接收主機(jī)接收完數(shù)據(jù)后,將掛起的工作線程重新啟動(dòng),工作線程發(fā)現(xiàn)接收機(jī)輸入緩沖區(qū)已經(jīng)存放有數(shù)據(jù),調(diào)用接收機(jī)模塊,誤碼判決模塊進(jìn)行相應(yīng)運(yùn)算;運(yùn)算完畢之后,接收主機(jī)根據(jù)情況不同,即接收機(jī)是否需要下一包數(shù)據(jù)、是否切換信噪比、當(dāng)前仿真是否結(jié)束選擇不同的信令,利用網(wǎng)絡(luò)傳輸,將信令反饋給發(fā)射主機(jī),發(fā)射主機(jī)根據(jù)接收機(jī)反饋回來的信令來選擇下一步操作是執(zhí)行結(jié)束當(dāng)前測(cè)試,或者繼續(xù)進(jìn)行當(dāng)前信噪比下的誤碼率測(cè)試,或者切換到下一個(gè)信噪比再進(jìn)行測(cè)試操作。
當(dāng)網(wǎng)絡(luò)傳輸?shù)呢?fù)荷在100-200M字節(jié)時(shí),套接字使用CAsyncSocket類的成員函數(shù)AsyncSelect()和IOCtl()函數(shù);將非阻塞模式的CSocket強(qiáng)制轉(zhuǎn)換成阻塞模式。
當(dāng)網(wǎng)絡(luò)傳輸?shù)呢?fù)荷100-200M字節(jié)時(shí),在發(fā)射主機(jī)和接收主機(jī)程序內(nèi)設(shè)定計(jì)時(shí)器,限定某一個(gè)成功傳送的時(shí)間,若在該時(shí)間內(nèi)接收方已經(jīng)響應(yīng)消息,接收完畢數(shù)據(jù),則返回;若在該時(shí)間內(nèi)沒有響應(yīng),則強(qiáng)行調(diào)用接收函數(shù)進(jìn)行接收。
本發(fā)明的有效成果是,本發(fā)明提出了一種分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)各處理器之間互聯(lián)方法,利用套接字將測(cè)試平臺(tái)的各個(gè)處理器利用TCP/IP網(wǎng)絡(luò)協(xié)議連接起來,利用TCP/IP協(xié)議能夠保證數(shù)據(jù)無(wú)差錯(cuò)的、順序一致的進(jìn)行傳送這一優(yōu)點(diǎn),保證了各個(gè)處理器之間數(shù)據(jù)傳遞的實(shí)時(shí)性和準(zhǔn)確性,從而利用此發(fā)明構(gòu)建起分布式無(wú)線通信傳輸技術(shù)的總體框架。
圖1是本發(fā)明分布式無(wú)線傳輸技術(shù)仿真測(cè)試平臺(tái)的模塊組成示意圖;
圖2是本發(fā)明分布式無(wú)線傳輸技術(shù)仿真測(cè)試平臺(tái)數(shù)據(jù)交換接口的基本設(shè)置示意圖;圖3是本發(fā)明雙線程在分布式無(wú)線傳輸技術(shù)仿真測(cè)試平臺(tái)的工作流程示意圖;圖4是數(shù)據(jù)通過互聯(lián)技術(shù)進(jìn)行網(wǎng)絡(luò)傳輸時(shí)數(shù)據(jù)封裝的結(jié)構(gòu)示意圖;圖5是網(wǎng)絡(luò)算法流程示意圖;圖6是分布式無(wú)線傳輸技術(shù)測(cè)試平臺(tái)的發(fā)射主機(jī)的界面示意圖;圖7是分布式無(wú)線傳輸技術(shù)測(cè)試平臺(tái)的接收主機(jī)的界面示意圖。
下面結(jié)合附圖對(duì)本發(fā)明的內(nèi)容作進(jìn)一步詳細(xì)說明。
具體實(shí)施例方式
參照?qǐng)D1所示,整個(gè)測(cè)試平臺(tái)由兩臺(tái)通過網(wǎng)絡(luò)連接的處理器,即發(fā)射主機(jī)和接收主機(jī)組成。其中發(fā)射主機(jī)實(shí)現(xiàn)信源、發(fā)射模塊和信道三個(gè)模塊所完成的功能,而接收主機(jī)實(shí)現(xiàn)接收模塊和統(tǒng)計(jì)模塊的功能。并利用以太局域網(wǎng),采用互聯(lián)網(wǎng)常用的TCP/IP協(xié)議將這兩部分組織起來,從而構(gòu)成一條完整的無(wú)線通信鏈路。另外,兩個(gè)主機(jī)都配備有虛擬儀器,用以觀察各種統(tǒng)計(jì)指標(biāo)。比如接收主機(jī)的虛擬儀器可以觀察誤碼率曲線、星座圖。發(fā)射主機(jī)的虛擬儀器可以觀察被測(cè)模塊的頻譜利用率、星座圖以及功率直方圖。而統(tǒng)一性檢測(cè)是為了對(duì)TDD(時(shí)分雙工)以及FDD(頻分雙工)兩種不同制式的雙工方式加以統(tǒng)一的模塊。這樣便于對(duì)兩種不同制式的雙工方式進(jìn)行公平的評(píng)估。
參照?qǐng)D2所示,測(cè)試平臺(tái)的主控程序提供了5個(gè)公共數(shù)據(jù)交換區(qū),分別用A,B,C,D,E表示,用于前一級(jí)模塊與后一級(jí)模塊之間的數(shù)據(jù)傳遞,或用于虛擬儀器顯示其輸出的數(shù)據(jù)。每個(gè)數(shù)據(jù)交換區(qū)均是系統(tǒng)分配的連續(xù)存儲(chǔ)空間。其中A、B、C三個(gè)數(shù)據(jù)交換區(qū)由發(fā)射主機(jī)開辟,經(jīng)由雙機(jī)通信將C交換區(qū)的數(shù)據(jù)傳送到接收主機(jī)的D交換區(qū)作為接收模塊的輸入,亦即C和D兩個(gè)交換區(qū)中的數(shù)據(jù)完全相同(B和C兩個(gè)交換區(qū)的仿真粒度相同)。
參照?qǐng)D3所示,根據(jù)其給出的工作流程圖對(duì)整個(gè)系統(tǒng)進(jìn)行架構(gòu)。它主要包含兩類流程第一類為雙機(jī)通信流程,第二類為虛擬儀器控制流程。在第一個(gè)流程中,信道輸出的數(shù)據(jù)存入緩沖區(qū)后,將讀寫標(biāo)志位(全局變量)置為可讀,并將這一事件作為一個(gè)消息告知用戶界面線程,用戶界面線程判斷這一消息屬性之后,調(diào)用網(wǎng)絡(luò)通信模塊進(jìn)行發(fā)送操作,接收機(jī)用戶界面線程的網(wǎng)絡(luò)通信模塊接收到數(shù)據(jù)之后,將讀寫標(biāo)志位(全局變量)置為可讀,用以告知工作線程可以從該緩沖區(qū)讀取數(shù)據(jù)并進(jìn)行相應(yīng)的操作。第二類工作流程則是利用臨界區(qū)的方法實(shí)現(xiàn)虛擬儀器與工作線程之間的線程同步。
為了避免虛擬儀器從各個(gè)接口的緩沖區(qū)讀取數(shù)據(jù)時(shí),用戶界面線程與工作線程中的鏈路計(jì)算程序沖突這種線程間的同步問題,利用MFC(MicrosoftFoundation Class微軟基礎(chǔ)類)提供的同步對(duì)象中的臨界區(qū)對(duì)象(CCriticalSection)來解決線程間的同步。
首先定義一個(gè)CCriticalSection的對(duì)象CriticalBuffer。然后在線程中可能產(chǎn)生沖突的區(qū)域前(即訪問共享資源之前)調(diào)用CriticalBuffer.lock()函數(shù),將當(dāng)前共享資源封鎖僅為當(dāng)前線程所用,訪問完當(dāng)前共享資源之后再調(diào)用CriticalBuffer.unlock()函數(shù),釋放當(dāng)前線程對(duì)該共享緩沖區(qū)的操作權(quán),讓其它線程使用。
其次,由于在Visual C++中,只有用戶界面線程中才能使用MFC(MicrosoftFoundation Class微軟基礎(chǔ)類)類庫(kù)中的類和函數(shù)。而雙機(jī)通信所要使用的CSocket屬于MFC(Microsoft Foundation Class微軟基礎(chǔ)類)類庫(kù),所以必須將雙機(jī)通信模塊放到用戶界面線程中去。這就需要線程之間進(jìn)行通信,亦即工作線程如何告訴用戶界面線程需要發(fā)送或者接收數(shù)據(jù),用戶界面線程不可能通過全局變量來循環(huán)等待工作線程請(qǐng)求發(fā)送數(shù)據(jù),所以采用了自定義消息的方法來實(shí)現(xiàn)工作線程與用戶界面線程的通信。這樣,一旦信道已經(jīng)輸出數(shù)據(jù)完畢,產(chǎn)生消息,用戶界面線程響應(yīng)消息調(diào)用發(fā)送函數(shù),將數(shù)據(jù)發(fā)送出去。同樣,接收數(shù)據(jù)時(shí),由于接收數(shù)據(jù)的消息CSocket本身就有,所以只需要判斷當(dāng)前要寫入的緩沖區(qū)是否可寫。若可寫,則寫入數(shù)據(jù)。創(chuàng)建自定義消息的方法具體如下 首先定義全局變量const WM_SENDDATA=WM_USER+100; 在對(duì)話框類的頭文件中DECLARE_MESSAGE_MAP()的前面添加下列語(yǔ)句afx_msg void OnS endData(); 在對(duì)話框類的實(shí)現(xiàn)文件中BEGIN_MESSAGE_MAP()的后面添加語(yǔ)句ON_MESSAGE(WM_SENDDATA,OnSendData),將消息與消息執(zhí)行函數(shù)代碼捆綁。
編寫OnSendData()發(fā)送數(shù)據(jù)函數(shù)。
工作線程中,信道處理數(shù)據(jù)完畢后,產(chǎn)生該消息使用語(yǔ)句SendMessage((HWND)pParam,WM_SENDDATA,0,0),即可向用戶界面線程發(fā)送消息,用戶界面線程根據(jù)自身的消息處理機(jī)制自動(dòng)響應(yīng)該消息,調(diào)用OnSendData()函數(shù),發(fā)送數(shù)據(jù)。
參照?qǐng)D4所示,我們對(duì)發(fā)射主機(jī)所要發(fā)送的數(shù)據(jù)進(jìn)行組包。這樣才能使接收主機(jī)能夠確認(rèn)數(shù)據(jù)包的順序、大小,保證傳輸?shù)恼_性。其中包頭中的內(nèi)容包括包頭長(zhǎng)度;信道當(dāng)前信息,亦即信道當(dāng)前的狀態(tài)信息,當(dāng)前包是否是最后一包;還有所要發(fā)送的數(shù)據(jù)長(zhǎng)度。
參照?qǐng)D5所示,使用套接字實(shí)現(xiàn)基于TCP/IP協(xié)議的網(wǎng)絡(luò)互聯(lián)技術(shù)。亦即,網(wǎng)絡(luò)傳輸算法。分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)采用的是客戶機(jī)/服務(wù)器模型來實(shí)現(xiàn)各主機(jī)之間的互聯(lián),客戶機(jī)/服務(wù)器模型是分布式應(yīng)用程序的最常用的范例。我們將發(fā)射主機(jī)作為服務(wù)器,接收主機(jī)作為客戶機(jī)。由于測(cè)試平臺(tái)的發(fā)射主機(jī)和接收主機(jī)都是由工作進(jìn)程和用戶界面進(jìn)程組成的,其中用戶界面進(jìn)程不僅僅負(fù)責(zé)軟件界面和虛擬儀器,還負(fù)責(zé)網(wǎng)絡(luò)傳輸?shù)娜蝿?wù),因此網(wǎng)絡(luò)傳輸算法要涉及到工作線程與用戶界面線程之間的通信。具體的流程如下所述發(fā)射主機(jī)方面,在工作線程中,當(dāng)信道輸出緩沖區(qū)為可讀(亦即信道已經(jīng)將處理完的數(shù)據(jù)放入緩沖區(qū)中等待網(wǎng)絡(luò)傳輸)時(shí),工作線程利用自定義消息的方法請(qǐng)求用戶界面線程發(fā)送數(shù)據(jù)。用戶界面線程收到該消息后,工作線程就將處理器的使用權(quán)交給用戶界面線程,用戶界面線程隨即調(diào)用網(wǎng)絡(luò)通信函數(shù),將信道輸出緩沖區(qū)中的數(shù)據(jù)發(fā)送出去。同時(shí),將信道輸出緩沖區(qū)的讀寫標(biāo)志置為可讀,以便信道函數(shù)能夠輸出下一包數(shù)據(jù)。用戶界面線程在完成上面的一系列操作后,再將處理器的使用權(quán)交還給工作線程。工作線程一直工作,直到發(fā)射主機(jī)接收到由接收主機(jī)反饋回來的信令。發(fā)射主機(jī)根據(jù)該信令的具體內(nèi)容來判斷是否還要向接收主機(jī)發(fā)送數(shù)據(jù),是否應(yīng)該切換信噪比,是否應(yīng)該停止測(cè)試等。
接收主機(jī)方面當(dāng)發(fā)射機(jī)方發(fā)送數(shù)據(jù)給接收機(jī)方時(shí),接收主機(jī)會(huì)自動(dòng)響應(yīng)CSocket類中的消息函數(shù)Onreceive(),去接收數(shù)據(jù)。由于接收機(jī)響應(yīng)的消息函數(shù)存在于用戶界面線程中,而在未接收數(shù)據(jù)之前,接收機(jī)一直處于工作線程內(nèi),為了保護(hù)現(xiàn)場(chǎng),要在響應(yīng)該消息函數(shù)之后將工作線程掛起。接收主機(jī)接收完數(shù)據(jù)后,將掛起的工作線程重新啟動(dòng),工作線程發(fā)現(xiàn)接收機(jī)輸入緩沖區(qū)已經(jīng)存放有數(shù)據(jù),于是調(diào)用接收機(jī)模塊,誤碼判決模塊進(jìn)行相應(yīng)運(yùn)算。運(yùn)算完畢之后,接收主機(jī)根據(jù)情況不同(接收機(jī)是否需要下一包數(shù)據(jù)、是否切換信噪比、當(dāng)前仿真是否結(jié)束),選擇不同的信令利用網(wǎng)絡(luò)傳輸,將信令發(fā)送給發(fā)射主機(jī),然后等待發(fā)射主機(jī)按照信令執(zhí)行下一步的操作。以上所述就是網(wǎng)絡(luò)傳輸流程,具體可以參考圖5所示??傊绾慰刂坪冒l(fā)射主機(jī)與接收主機(jī)之間的協(xié)同工作,如何處理工作線程與用戶界面線程之間的通信是利用TCP/IP實(shí)現(xiàn)整個(gè)測(cè)試系統(tǒng)雙機(jī)通信的關(guān)鍵之所在。
雖然鏈路級(jí)測(cè)試僅僅是單向測(cè)試,包括上行鏈路測(cè)試和下行鏈路測(cè)試。每一種情況的測(cè)試,數(shù)據(jù)的流向都是單向的。即數(shù)據(jù)總是由發(fā)射主機(jī)到接收主機(jī)。但為了能夠使發(fā)射主機(jī)和接收主機(jī)之間協(xié)同工作,保證接收主機(jī)所接收到的數(shù)據(jù)在未處理完之前不會(huì)被下一包數(shù)據(jù)沖掉,必須要在發(fā)射主機(jī)和接收主機(jī)之間建立信令規(guī)定。比如我們定義接收主機(jī)向發(fā)射主機(jī)發(fā)送“1”表示當(dāng)前包處理完畢,請(qǐng)發(fā)下一包數(shù)據(jù)。發(fā)送“2”表示當(dāng)前信噪比測(cè)試結(jié)束,要求發(fā)射機(jī)變化信噪比,進(jìn)行下一個(gè)信噪比點(diǎn)的測(cè)試。發(fā)送“3”表示整個(gè)測(cè)試完畢。
套接字有同步阻塞方式和異步非阻塞方式兩種使用方法,同步和異步往往都是針對(duì)一個(gè)函數(shù)來說的,所謂“同步(阻塞)”就是指函數(shù)直到其要執(zhí)行的功能全部完成時(shí)才返回;而“異步(非阻塞)”則是函數(shù)僅僅做一些簡(jiǎn)單的工作,然后馬上返回,而它所要實(shí)現(xiàn)的功能留給別的線程或者函數(shù)去完成。為了能夠保證鏈路測(cè)試主控流程順序執(zhí)行,保證網(wǎng)絡(luò)傳輸數(shù)據(jù)的次序,防止沖掉數(shù)據(jù),在平臺(tái)網(wǎng)絡(luò)傳輸中使用的是MFC(Microsoft Foundation Class微軟基礎(chǔ)類)中的CSocket類,CSocket是MFC(Microsoft Foundation Class微軟基礎(chǔ)類)在CAsyncSocket基類上派生的一個(gè)同步阻塞Socket的封裝類。雖然是同步阻塞Socket類,但是CSocket類是由CAsyncSocket類派生出來的。CAsyncSocket是異步非阻塞模式的,它的派生類CSocket歸根結(jié)底還是異步非阻塞模式的。只是MFC(Microsoft Foundation Class微軟基礎(chǔ)類)利用循環(huán),將其強(qiáng)行置成同步阻塞模式。在程序調(diào)試過程中,發(fā)現(xiàn)如果采用CSocket的模擬同步阻塞模式會(huì)出現(xiàn)這樣的問題當(dāng)網(wǎng)絡(luò)傳輸數(shù)據(jù)的頻率較高時(shí),比如在8K語(yǔ)音業(yè)務(wù)測(cè)試時(shí),發(fā)射機(jī)和接收機(jī)要處理的數(shù)據(jù)較少,需要頻繁調(diào)用網(wǎng)絡(luò)傳輸模塊傳送數(shù)據(jù)?;蛘咭淮尉W(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量很大時(shí),比如在兩小區(qū)兩用戶100M數(shù)據(jù)業(yè)務(wù)測(cè)試時(shí),傳送的數(shù)據(jù)量最大。在這兩種情況下,經(jīng)常會(huì)出現(xiàn)雙機(jī)死鎖的現(xiàn)象,亦即接收主機(jī)雖然響應(yīng)消息,去接收數(shù)據(jù),但是由于數(shù)據(jù)量過大或有延時(shí),無(wú)法按程序員規(guī)定的數(shù)據(jù)量大小去接收,由于MFC(Microsoft Foundation Class微軟基礎(chǔ)類)將CSocket強(qiáng)制設(shè)為死循環(huán)來模擬同步阻塞模式,接收方接收不到所規(guī)定的數(shù)據(jù)量就只好死循環(huán)。而發(fā)送主機(jī)方此時(shí)在不停的給接收方發(fā)送數(shù)據(jù),接收方無(wú)法清空緩沖區(qū),這就導(dǎo)致發(fā)送方無(wú)法繼續(xù)發(fā)送數(shù)據(jù),導(dǎo)致死鎖。這樣發(fā)送主機(jī)和接收主機(jī)全部進(jìn)入死循環(huán),鏈路測(cè)試無(wú)法繼續(xù)進(jìn)行。在程序調(diào)試時(shí),采用了以下兩種方法解決死鎖問題1.設(shè)定計(jì)時(shí)器,采取超時(shí)催收機(jī)制。當(dāng)網(wǎng)絡(luò)傳輸?shù)呢?fù)荷較高時(shí),往往會(huì)出現(xiàn)發(fā)送主機(jī)已經(jīng)開始發(fā)送數(shù)據(jù),但接收主機(jī)并沒有響應(yīng)消息,導(dǎo)致當(dāng)前數(shù)據(jù)包傳送失敗。在這種情況下,某項(xiàng)操作可能永遠(yuǎn)不能成功完成,程序?yàn)榱说却渫瓿删偷糜肋h(yuǎn)循環(huán)下去。在程序中,我們限定某一個(gè)成功傳送的時(shí)間,如果在該時(shí)間內(nèi)接收方已經(jīng)響應(yīng)消息,接收完畢數(shù)據(jù),則返回。若在該時(shí)間內(nèi)沒有響應(yīng),則強(qiáng)行調(diào)用接收函數(shù)進(jìn)行接收。
2.使用CAsyncSocket類的成員函數(shù)AsyncSelect()和IOCtl()函數(shù)。將非阻塞模式的CSocket強(qiáng)制轉(zhuǎn)換成阻塞模式。IOCtl()是用來控制Socket模式的函數(shù)。它可以得到或設(shè)置任何狀態(tài)下,當(dāng)前Socket的參數(shù)、協(xié)議、通信子系統(tǒng)。AsyncSelect()函數(shù)用于確定使用了MFC(Microsoft Foundation Class微軟基礎(chǔ)類)中的哪個(gè)回復(fù)通知函數(shù)(callback notification function)。而AsyncSelect()函數(shù)會(huì)自動(dòng)將Socket設(shè)置為非阻塞模式。
選擇BOOL IOCtl(long ICommand,DWORD*IpArgument)函數(shù)的形參ICommand為FIONBIO,F(xiàn)IONBIO是禁止還是使能非阻塞模式的參數(shù)。IpArgument指向一個(gè)DWORD型變量的指針,該變量為零則禁止非阻塞模式,將當(dāng)前Socket置為阻塞模式。在調(diào)用IOCtl之前,必須禁止AsyncSelect()函數(shù),否則調(diào)用IOCtl()將會(huì)出錯(cuò)。具體的代碼如下DWORD d=0;//定義DWORD型變量dm_clientsock.AsyncSelect(0);//禁止AsyncSelect函數(shù)m_clientsock.IOCtl(FIONBIO,&d);//調(diào)用IOCtl函數(shù)將當(dāng)前Sokcet置為阻塞模式。
參照?qǐng)D6所示,圖中上側(cè)兩個(gè)深色區(qū)域顯示的是被測(cè)方的無(wú)線傳輸技術(shù)方案用測(cè)試平臺(tái)在特定信道條件下所測(cè)得的頻譜利用情況。
參照?qǐng)D7所示,圖中上側(cè)兩個(gè)深色區(qū)域顯示的是被測(cè)方的無(wú)線傳輸技術(shù)方案在特定信道條件下采用測(cè)試平臺(tái)所測(cè)得的誤碼率性能。
權(quán)利要求
1.分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)互聯(lián)技術(shù)設(shè)計(jì)方法,其特征在于,按以下步驟進(jìn)行第一步,采用雙線程技術(shù),即工作線程和用戶界面線程,實(shí)現(xiàn)分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)的主控部分,主控部分的實(shí)現(xiàn)包含兩個(gè)流程第一個(gè)為雙機(jī)通信流程,第二個(gè)為虛擬儀器控制流程;在雙機(jī)通信流程中,信道輸出的數(shù)據(jù)存入緩沖區(qū)后,將讀寫標(biāo)志位即全局變量置為可讀,并將這一事件作為一個(gè)消息告知用戶界面線程,用戶界面線程判斷這一消息屬性之后,調(diào)用網(wǎng)絡(luò)通信模塊進(jìn)行發(fā)送操作,接收機(jī)用戶界面線程的網(wǎng)絡(luò)通信模塊接收到數(shù)據(jù)之后,將讀寫標(biāo)志位即全局變量置為可讀,用以告知工作線程可以從接收機(jī)輸入緩沖區(qū)讀取數(shù)據(jù)并調(diào)用接收機(jī)模塊;虛擬儀器控制流程則是利用臨界區(qū)的方法實(shí)現(xiàn)虛擬儀器所處的用戶界面線程與工作線程之間的線程同步;工作線程主要用于鏈路的計(jì)算,而用戶界面線程將用于虛擬儀器的顯示和實(shí)現(xiàn)兩個(gè)主機(jī)之間的互聯(lián)通信;使用MFC(Microsoft Foundation Class微軟基礎(chǔ)類)提供的同步對(duì)象中的臨界區(qū)對(duì)象CCriticalSection保重線程間的同步;利用創(chuàng)建自定義消息的方法實(shí)現(xiàn)兩個(gè)線程之間的通信;創(chuàng)建自定義消息的方法具體如下 首先定義全局變量const WM_SENDDATA=WM_USER+100; 在對(duì)話框類的頭文件中DECLARE_MESSAGE_MAP()的前面添加下列語(yǔ)句afx_msg void OnSendData(); 在對(duì)話框類的實(shí)現(xiàn)文件中BEGIN_MESSAGE_MAP()的后面添加語(yǔ)句ON_MESSAGE(WM_SENDDATA,OnSendData),將消息與消息執(zhí)行函數(shù)代碼捆綁; 編寫OnSendData()發(fā)送數(shù)據(jù)函數(shù);工作線程中,信道處理數(shù)據(jù)完畢后,產(chǎn)生該消息使用語(yǔ)句SendMessage((HWND)pParam,WM_SENDDATA,0,0),即可向用戶界面線程發(fā)送消息,用戶界面線程根據(jù)自身的消息處理機(jī)制自動(dòng)響應(yīng)該消息,調(diào)用OnSendData()函數(shù),發(fā)送數(shù)據(jù);第二步,使用套接字實(shí)現(xiàn)分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)各主機(jī)之間的互聯(lián)首先,使用客戶機(jī)/服務(wù)器模型來實(shí)現(xiàn)各主機(jī)之間的互聯(lián);將發(fā)射主機(jī)作為服務(wù)器,接收主機(jī)作為客戶機(jī);其次,將要傳送的信道輸出的數(shù)據(jù)進(jìn)行組包、傳送,組包的數(shù)據(jù)由包頭和包數(shù)據(jù)組成,包頭中的內(nèi)容包括包頭長(zhǎng)度;信道當(dāng)前信息,亦即信道當(dāng)前的狀態(tài)信息,當(dāng)前包是否是最后一包,包數(shù)據(jù)位于包頭后面,它里面儲(chǔ)存的是所要發(fā)送的數(shù)據(jù);組包完成之后,利用自定義消息的方法,告知用戶界面線程需要發(fā)送當(dāng)前數(shù)據(jù),用戶界面線程響應(yīng)該自定義消息之后,調(diào)用套接字中的發(fā)送函數(shù)將數(shù)據(jù)發(fā)送給接收主機(jī)。
2.根據(jù)權(quán)利要求1所述的分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)互聯(lián)技術(shù)設(shè)計(jì)方法,其特征在于,使用套接字實(shí)現(xiàn)分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)各主機(jī)之間的互聯(lián),采用了TCP/IP協(xié)議的網(wǎng)絡(luò)互聯(lián)技術(shù);亦即,網(wǎng)絡(luò)傳輸算法;網(wǎng)絡(luò)傳輸算法是將發(fā)射主機(jī)作為服務(wù)器,接收主機(jī)作為客戶機(jī);網(wǎng)絡(luò)傳輸算法采用自定義消息的方法來實(shí)現(xiàn)工作線程與用戶界面線程之間的通信;網(wǎng)絡(luò)傳輸算法按以下步驟進(jìn)行第一步,發(fā)射主機(jī)和接收主機(jī)之間建立信令規(guī)定;定義接收主機(jī)向發(fā)射主機(jī)發(fā)送“1”表示當(dāng)前包處理完畢,請(qǐng)發(fā)下一包數(shù)據(jù);發(fā)送“2”表示當(dāng)前信噪比測(cè)試結(jié)束,要求發(fā)射機(jī)變化信噪比,進(jìn)行下一個(gè)信噪比點(diǎn)的測(cè)試;發(fā)送“3”表示整個(gè)測(cè)試完畢;第二步,發(fā)射主機(jī)方發(fā)現(xiàn)信道輸出緩沖區(qū)為可讀,亦即信道已經(jīng)將處理完的數(shù)據(jù)放入緩沖區(qū)中等待網(wǎng)絡(luò)傳輸時(shí),工作線程利用自定義消息的方法請(qǐng)求用戶界面線程發(fā)送數(shù)據(jù);用戶界面線程收到該消息后,工作線程就將處理器的使用權(quán)交給用戶界面線程,用戶界面線程隨即調(diào)用套接字發(fā)送函數(shù),將信道輸出緩沖區(qū)中的數(shù)據(jù)發(fā)送出去,同時(shí),將信道輸出緩沖區(qū)的讀寫標(biāo)志置為可讀,以便信道函數(shù)能夠輸出下一包數(shù)據(jù);用戶界面線程在完成上面的一系列操作后,再將處理器的使用權(quán)交還給工作線程;第三步,當(dāng)發(fā)射機(jī)方發(fā)送數(shù)據(jù)給接收機(jī)方后,接收主機(jī)自動(dòng)響應(yīng)套接字中的接收數(shù)據(jù)函數(shù),以接收數(shù)據(jù);由于接收機(jī)響應(yīng)的消息函數(shù)存在于用戶界面線程中,而在未接收數(shù)據(jù)之前,接收機(jī)一直處于工作線程內(nèi),在響應(yīng)該消息函數(shù)之后將工作線程掛起,接收主機(jī)接收完數(shù)據(jù)后,將掛起的工作線程重新啟動(dòng),工作線程發(fā)現(xiàn)接收機(jī)輸入緩沖區(qū)已經(jīng)存放有數(shù)據(jù),調(diào)用接收機(jī)模塊,誤碼判決模塊進(jìn)行相應(yīng)運(yùn)算;運(yùn)算完畢之后,接收主機(jī)根據(jù)情況不同,即接收機(jī)是否需要下一包數(shù)據(jù)、是否切換信噪比、當(dāng)前仿真是否結(jié)束選擇不同的信令,利用網(wǎng)絡(luò)傳輸,將信令反饋給發(fā)射主機(jī),發(fā)射主機(jī)根據(jù)接收機(jī)反饋回來的信令來選擇下一步操作是執(zhí)行結(jié)束當(dāng)前測(cè)試,或者繼續(xù)進(jìn)行當(dāng)前信噪比下的誤碼率測(cè)試,或者切換到下一個(gè)信噪比再進(jìn)行測(cè)試操作。
3.根據(jù)權(quán)利要求1所述的分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)互聯(lián)技術(shù)設(shè)計(jì)方法,其特征在于,當(dāng)網(wǎng)絡(luò)傳輸?shù)呢?fù)荷在100-200M字節(jié)時(shí),套接字使用CAsyncSocket類的成員函數(shù)AsyncSelect()和IOCtl()函數(shù);將非阻塞模式的CSocket強(qiáng)制轉(zhuǎn)換成阻塞模式。
4.根據(jù)權(quán)利要求1所述的分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)互聯(lián)技術(shù)設(shè)計(jì)方法,其特征在于,當(dāng)網(wǎng)絡(luò)傳輸?shù)呢?fù)荷在100-200M字節(jié)時(shí),在發(fā)射主機(jī)和接收主機(jī)程序內(nèi)設(shè)定計(jì)時(shí)器,限定任一個(gè)成功傳送的時(shí)間,若在該時(shí)間內(nèi)接收方已經(jīng)響應(yīng)消息,接收完畢數(shù)據(jù),則返回;若在該時(shí)間內(nèi)沒有響應(yīng),則強(qiáng)行調(diào)用接收函數(shù)進(jìn)行接收。
全文摘要
本發(fā)明公開了一種分布式無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)的互聯(lián)技術(shù),利用套接字實(shí)現(xiàn)測(cè)試平臺(tái)各個(gè)處理器之間的TCP/IP網(wǎng)絡(luò)通信,解決了采用傳統(tǒng)的單個(gè)計(jì)算機(jī)所建立的無(wú)線通信測(cè)試平臺(tái)無(wú)法處理具有更大運(yùn)算量的多輸入多輸出(MIMO)通信系統(tǒng)無(wú)線傳輸技術(shù),該方法利用多線程技術(shù)將測(cè)試平臺(tái)分為用戶界面線程和工作線程,便于處理用戶產(chǎn)生的事件和消息,且在用戶界面線程中利用套接字實(shí)現(xiàn)基于TCP/IP協(xié)議的網(wǎng)絡(luò)互聯(lián)技術(shù)。使用該方法將兩個(gè)獨(dú)立并行運(yùn)算的處理器相互聯(lián)接起來,進(jìn)而構(gòu)建起分布式的無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái),同時(shí)也為具有“網(wǎng)格計(jì)算”能力的無(wú)線通信傳輸技術(shù)測(cè)試平臺(tái)提供了基本思路。
文檔編號(hào)H04L12/26GK1791036SQ200510124599
公開日2006年6月21日 申請(qǐng)日期2005年12月22日 優(yōu)先權(quán)日2005年12月22日
發(fā)明者種稚萌, 任品毅, 朱世華, 車恒志 申請(qǐng)人:西安交通大學(xué)