版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于MATLAB的CDMA系統(tǒng)仿真分析
【摘要】本設(shè)計(jì)基于MATLAB仿真軟件,完整地實(shí)現(xiàn)了CDMA通信系統(tǒng)的建模、仿真和分析過(guò)程
REF_Ref355453241\r\h
[1]
;仿真系統(tǒng)包括了CDMA編碼技術(shù)、擴(kuò)頻技術(shù)、調(diào)制技術(shù)、信道傳輸以及解調(diào)恢復(fù)技術(shù)等各個(gè)功能模塊。全面的介紹了整個(gè)CDMA通信系統(tǒng)的工作原理和工作方式,并介紹了各個(gè)模塊的參數(shù)設(shè)置;文章內(nèi)容包括CDMA的發(fā)展現(xiàn)狀以及發(fā)展趨勢(shì)、CDMA通信系統(tǒng)的技術(shù)優(yōu)勢(shì)和應(yīng)用領(lǐng)域,從而說(shuō)明CDMA通信系統(tǒng)在的研究?jī)r(jià)值和潛力。同時(shí),本文也通過(guò)舉例簡(jiǎn)單介紹了MATLAB軟件,對(duì)用于實(shí)現(xiàn)系統(tǒng)模塊功能的MATLAB仿真語(yǔ)句有了進(jìn)一步的了解。MATLAB軟件功能齊全,操作簡(jiǎn)單,應(yīng)用廣泛。通過(guò)本次設(shè)計(jì)得出,CDMA系統(tǒng)的抗干擾能力強(qiáng),單用戶(hù)的情況下,即使在各種人為和物理噪聲的干擾下,依舊可以準(zhǔn)確接收到數(shù)據(jù)。
【關(guān)鍵詞】CDMA,MATLAB,仿真,通信系統(tǒng)
AnalysisofCDMASystemSimulationBasedonMATLAB
【Abstract】ThisthesisisbasedonthesimulationfunctionoftheMATLABsoftware,usingMATLABlanguagetocarryoutthemodeling,simulation,andanalysisoftheCDMAcommunicationsystem.Atthesametime,theimportantpartsofcommunicationsystemareintroducedindetail,includingcoding,spreadspectrum,decoding,modulationandchanneltransmission,etc.Thisthesisalsoreferstothecondition,advantagesanddevelopmentofCDMAsystemtoshowitspotentialandvalueforresearch.What’smore,thethesisalsousinganexampletogiveabriefintroductionofthesimulationplatformofMATLABsoftware,itissuchapowerful,easyoperatingsoftwarethatiswidelyusedinmanyfields.ThissimulationplatformdisplaysthesuperiorityofCDMAeffectively,andtheresultshowsthatCDMAcanreceivetheaccuratelydataeveninabignoise.
【Keywords】CodeDivisionMultipleAccess,communicationsystem,MATLAB,simulation
目錄
TOC\o"1-3"\h\u
20936
第一章緒論
[8]
。即系統(tǒng)為每個(gè)用戶(hù)分配不同的擴(kuò)頻序列之間一般情況下不是完全正交的。在這種不在理想狀態(tài)下的相關(guān)性會(huì)在用戶(hù)和用戶(hù)之間的相互干擾,這種干擾就稱(chēng)為多址干擾。當(dāng)CDMA通信系統(tǒng)中的用戶(hù)較少的時(shí)候這種干擾現(xiàn)象較輕;系統(tǒng)的用戶(hù)數(shù)目變多以后,信號(hào)功率的增大,MAI的功率也增大,就會(huì)導(dǎo)致系統(tǒng)性能降低。影響所用用戶(hù)的噪聲和干擾都來(lái)自所有用戶(hù),但是其輸出功率被控制到最低可能。雖然在這中干擾和噪聲的影響之下,通信系統(tǒng)的容量會(huì)受到限制,但最終的通信系統(tǒng)的容量還是比頻分和時(shí)分系統(tǒng)的容量要大的多。
此次設(shè)計(jì)仿真實(shí)現(xiàn)了CDMA通信系統(tǒng)每個(gè)模塊的功能并進(jìn)行分析。研究通信過(guò)程中CDMA系統(tǒng)的抗噪聲和抗干擾能力,以及準(zhǔn)確接收數(shù)據(jù)的能力跟信噪比之間的關(guān)系。
1.3.2研究思路
首先,從目的出發(fā)對(duì)整個(gè)通信系統(tǒng)進(jìn)行分析,對(duì)CDMA通信系統(tǒng)的數(shù)據(jù)發(fā)送端、信道和接收端的各個(gè)環(huán)節(jié)功能分解,掌握系統(tǒng)的整體運(yùn)作過(guò)程。
其次,將CDMA系統(tǒng)劃分為卷積編碼、擴(kuò)頻、加擾碼、調(diào)制和解調(diào)等多個(gè)模塊,了解每個(gè)模塊的功能作用。
再次,分析各個(gè)模塊功能,針對(duì)各個(gè)功能模塊確定算法,進(jìn)行源程序編寫(xiě)。
最后,整合各個(gè)模塊的程序。仿真調(diào)試得到最終結(jié)果。
本論文主要從這幾部分展開(kāi):
第一章為緒論,主要討論CDMA通信系統(tǒng)的背景、該系統(tǒng)當(dāng)今發(fā)展現(xiàn)狀和未來(lái)趨勢(shì)、研究該系統(tǒng)目的。這幾個(gè)方面的討論讓我們了解該通信系統(tǒng)的基本情況,給本文奠定一個(gè)方向和思路,方便理解對(duì)該通信系統(tǒng)研究的重要意義。
第二章為CDMA的技術(shù)原理,這部分是本文乃至研究過(guò)程中的重要部分。只有在完全理解通信系統(tǒng)的基本工作原理和CDMA先進(jìn)技術(shù)的基礎(chǔ)上,用理論指導(dǎo)實(shí)踐,才能了解通信系統(tǒng)在工作過(guò)程中每個(gè)環(huán)節(jié)如何實(shí)現(xiàn),結(jié)果是否有誤。這部分主要討論了包括擴(kuò)頻、調(diào)制解調(diào)等在內(nèi)CDMA通信系統(tǒng)的基本模型、CDMA技術(shù)特點(diǎn)以及該技術(shù)主要應(yīng)用及應(yīng)用優(yōu)勢(shì)。
第三章為CDMA通信系統(tǒng)的仿真調(diào)試和結(jié)果。本章節(jié)簡(jiǎn)單介紹了MATLAB仿真軟件和該系統(tǒng)仿真模型,對(duì)理解該通信系統(tǒng)的工作過(guò)程上有很大的幫助。同時(shí)本章還包含了CDMA通信系統(tǒng)的仿真分析,包括CDMA系統(tǒng)基本參數(shù)的設(shè)置、程序的調(diào)試過(guò)程和仿真結(jié)果分析,通過(guò)調(diào)試過(guò)程中的結(jié)果可以與理論結(jié)果進(jìn)行比較,最終得到結(jié)論。
接下來(lái)是總結(jié)部分,對(duì)整個(gè)研究的過(guò)程和結(jié)果做一個(gè)比較全面的總結(jié)。
最后是致謝部分,感謝在畢業(yè)設(shè)計(jì)過(guò)程中幫助過(guò)給予幫助和建議的人。
第二章CDMA技術(shù)原理
2.1CDMA基本模型
CDMA通信系統(tǒng)的基本模型由信源、卷積編碼、交織編碼、加擾碼、擴(kuò)頻、調(diào)制、信道、解調(diào)、解擴(kuò)、去擾碼、解交織、解卷積、信宿等部分構(gòu)成。基本模型如圖2-1所示:
信源
卷積編碼
交織編碼
加擾碼
擴(kuò)頻
調(diào)制
AWGN信道
解調(diào)
解擴(kuò)頻
信宿
解卷積
解交織
去擾碼
圖2-1CDMA系統(tǒng)基本模型
2.1.1卷積編碼
卷積編碼器對(duì)輸入的數(shù)據(jù)流每次1比特或k比特進(jìn)行編碼,輸出n個(gè)編碼符號(hào)。但輸出分支碼字的每個(gè)碼元不僅和此時(shí)刻輸入的k個(gè)信息有關(guān),也和前面m個(gè)連續(xù)時(shí)刻輸入的信息元有關(guān),因此編碼器包含有m級(jí)寄存器以記錄這些信息,即卷積碼編碼器是有記憶的。卷積編碼可表示為(n,k,m),碼率為k/n。
卷積編碼的原理是把k個(gè)信息比特通過(guò)編碼,擴(kuò)展成n個(gè)比特,k和n都不大。便于串行傳輸,傳輸時(shí)延小。卷積編碼另一個(gè)不同于分組碼的特點(diǎn)是,卷積碼編碼中有nN個(gè)相關(guān)的碼元數(shù)。編碼后的碼元與當(dāng)前k個(gè)信息有關(guān)的同時(shí),也與前面的N-1個(gè)信息有關(guān)
REF_Ref355456806\r\h
[9]
。N越大是,卷積碼的糾錯(cuò)性越好,差錯(cuò)率則越小。
當(dāng)k為1時(shí),卷積碼編碼器的結(jié)構(gòu)包括一個(gè)有m個(gè)串接的寄存器構(gòu)成的移位寄存器(成為m級(jí)以為寄存器)、n個(gè)連接到指定寄存器的模二加法器以及把模二加法器的輸出轉(zhuǎn)化為串行輸出的轉(zhuǎn)換開(kāi)關(guān)。卷積碼編碼器每次輸入一個(gè)信息比特,從輸出端輸出卷積碼分支碼字的兩個(gè)碼元,并有轉(zhuǎn)換開(kāi)關(guān)把兩個(gè)輸出端口變換為串行輸出。二進(jìn)制卷積編碼器如圖2-2所示。
圖2-2.二進(jìn)制卷積編碼器
寄存器
寄存器
寄存器
a
b
2.1.2交織編碼
交織編碼將序列的順序打亂,這樣的好處是,在信道受到突發(fā)干擾的時(shí)候,可以將誤碼分散。也就是誤碼不會(huì)集中在一小段時(shí)間,這樣有利于糾錯(cuò)。偽隨機(jī)序列主要包括m序列碼,Gold序列碼,Walsh序列碼等。其中Walsh碼序列復(fù)雜,正交性較好,可用于前向擴(kuò)展頻譜,反向區(qū)分信道類(lèi)型
REF_Ref355456774\r\h
[10]
。而相比于m序列,Gold序列可以產(chǎn)生更多地址碼,更適合于大型的通信系統(tǒng)。Walsh碼的良好正交性體現(xiàn)在:在同一個(gè)周期T內(nèi),不同碼字之間的積分為零,相同碼字之間的積分不為零,為T(mén)。本次設(shè)計(jì)系統(tǒng)選用的是第三種碼。
2.1.3偽隨機(jī)碼
偽隨機(jī)碼簡(jiǎn)稱(chēng)PN碼。為隨機(jī)碼性質(zhì)上與白噪聲相似,白噪聲是瞬間值服從正態(tài)分布,并在很大頻帶內(nèi)功率譜都是均勻的一種隨即過(guò)程。
偽隨機(jī)碼是周期碼,容易賦值加工。偽隨機(jī)碼性能類(lèi)似于白噪聲,功率譜頻帶很寬,具有很好的抗干擾特性。能容易從其他噪聲和干擾信號(hào)中分離出來(lái),因此在實(shí)踐中常用偽隨機(jī)碼作為擴(kuò)展頻譜的擴(kuò)頻碼。
實(shí)踐中常用來(lái)產(chǎn)生偽隨機(jī)碼有如下特點(diǎn):
(1)在一個(gè)周期內(nèi)0和1出現(xiàn)的概率相近,出現(xiàn)次數(shù)最多只差一次。
(2)在一個(gè)周期內(nèi),連續(xù)出現(xiàn)長(zhǎng)度為x比特的1(0)的次數(shù)比連續(xù)出現(xiàn)長(zhǎng)度為x+1比特的1(0)的次數(shù)多一倍。
(3)偽隨機(jī)序列的自相關(guān)函數(shù)滿(mǎn)足式(2-1)的特性:
EMBEDEquation.DSMT4
(2-1)
其中為碼元延時(shí),N為碼長(zhǎng),K為小于N的整數(shù)。所謂自相關(guān)函數(shù)反映的是一個(gè)序列不同時(shí)刻兩個(gè)狀態(tài)之間的相關(guān)程度。其中,若函數(shù)是周期的,則其自相關(guān)函數(shù)也是周期的,且周期與原函數(shù)相同。
對(duì)于碼長(zhǎng)為N的周期碼和
QUOTE
,其互相關(guān)函數(shù)定義為式(2-2):
EMBEDEquation.DSMT4
(2-2)
特別的,當(dāng)為零時(shí)兩個(gè)碼序列相互正交。
QUOTE
的自相關(guān)函數(shù)定義為式(2-3):
EMBEDEquation.DSMT4
(2-3)
令,能將二元域{0,1}映射到{-1,1},1變成-1,0變成1。結(jié)合公式(2-2)和公式(2-3)可得到式(2-4)和式(2-5):
EMBEDEquation.DSMT4
(2-4)
(2-5)
其中A為和
QUOTE
/
QUOTE
兩序列中同0或同1的數(shù)目,D是亮序列中對(duì)應(yīng)不同碼元的數(shù)目。
故有,周期碼序列滿(mǎn)足式(2-6)時(shí),則稱(chēng)之為廣義偽隨機(jī)碼。
EMBEDEquation.DSMT4
(2-6)
當(dāng)
QUOTE
與-1/N相等時(shí),得到上文中的式(2-1)。
2.1.4擴(kuò)頻序列
在擴(kuò)頻系統(tǒng)中,電信號(hào)的頻域描述是頻譜,常見(jiàn)的語(yǔ)音、圖像和數(shù)據(jù)等信息的信號(hào)都可以用頻譜表示出來(lái),即信息信號(hào)可表示為時(shí)間的函數(shù)??梢酝ㄟ^(guò)傅里葉變化由信號(hào)的時(shí)域表示得到頻域表示F(f)
REF_Ref355867435\r\h
[11]
。頻域和時(shí)域的關(guān)系如式(2-7):
EMBEDEquation.DSMT4
(2-7)
擴(kuò)頻通信系統(tǒng)具有抗干擾能力好。擴(kuò)頻通信的理論基礎(chǔ)是香農(nóng)公式,香農(nóng)公式反映了影響信道的無(wú)差錯(cuò)傳輸能力的因素。即式(2-8):
EMBEDEquation.DSMT4
(2-8)
當(dāng)S/N的比值遠(yuǎn)小于1時(shí),有式(2-9)的結(jié)論:
EMBEDEquation.DSMT4
(2-9)
由此可見(jiàn),在給定噪比S/N的前提下,增大帶寬可獲得較低的信息差錯(cuò)率。
擴(kuò)頻系統(tǒng)的發(fā)射模型如圖2-3所示
REF_Ref355868617\r\h
[11]
:
圖2-3擴(kuò)頻發(fā)射原理框圖
編碼器
M序列發(fā)生器
數(shù)據(jù)源
發(fā)射機(jī)
射頻振蕩器
c(t)
d(t)
s(t)
輸出信號(hào)s(t)表達(dá)式(2-10)如下:
EMBEDEquation.DSMT4
(2-10)
直接擴(kuò)頻過(guò)程是利用擴(kuò)頻序列乘上原始序列,得到復(fù)合序列,其時(shí)域表示如下圖2-4:
復(fù)合序列
信息數(shù)據(jù)
擴(kuò)頻序列
圖2-4擴(kuò)頻信號(hào)傳輸示意圖
恢復(fù)序列
接收端的頻譜示意圖如圖2-5:
圖2-5輸出信號(hào)頻譜示意圖
0
2.1.5信號(hào)調(diào)制
同等發(fā)射功率的條件下,QPSK只要用一半的帶寬就能得到與BPSK條件下相同的誤碼率。但在這使用QPSK調(diào)試不是因?yàn)槠涔?jié)省帶寬,而是因?yàn)镼PSK對(duì)不受到某些干擾的影響。
QPSK信號(hào)產(chǎn)生原理是采用正交調(diào)制法來(lái)直接產(chǎn)生調(diào)相信號(hào),二進(jìn)制碼兩位一組以串行形式輸入,經(jīng)轉(zhuǎn)換后,寬度變?yōu)樵瓉?lái)的兩倍,以并行形式輸出。接著進(jìn)行極性變換,然后用兩個(gè)相互正交的載波分別乘上兩個(gè)信號(hào),再把兩個(gè)信號(hào)相加,從輸出端輸出。其原理框圖如圖2-6所示:
圖2-6QPSK信號(hào)產(chǎn)生原理框圖
串/并轉(zhuǎn)換
脈沖成型
脈沖成型
載波發(fā)生
90°相移
二進(jìn)制信息X
已調(diào)信號(hào)
Sqpsk
I
Q
Ipluse
Qpluse
Iqpsk
Qqpsk
QPSK調(diào)制的輸出如式(2-11):
EMBEDEquation.DSMT4
(2-11)
式中x1(t)和x2(t)分別為同相支路和正交支路的擴(kuò)頻碼,兩擴(kuò)頻碼的碼速率相同但碼結(jié)構(gòu)不同,取值為±1。在設(shè)計(jì)時(shí)我們?nèi)1(t)和x2(t)的碼速率是同步的并且相干,x1(t)和x2(t)彼此獨(dú)立。
2.1.6信號(hào)解調(diào)
QPSK信號(hào)是由兩個(gè)相互正交的信號(hào)合成的。其原理框圖如圖2-7所示:
圖2-7QPSK解調(diào)原理圖
90°相移
Sqpsk
匹配濾波
抽樣判決
串/并轉(zhuǎn)換
載波恢復(fù)換
抽樣判決
匹配濾波
定時(shí)恢復(fù)
QPSK信號(hào)
DemQpluse
DemIpluse
DemIqpsk
DemQqpsk
Sqpsk
還原的二進(jìn)制信息
在同相路和正交路兩路分別設(shè)置一個(gè)相關(guān)器,即用兩個(gè)相互正交的同頻載波信號(hào)分別對(duì)兩個(gè)相干信號(hào)進(jìn)行解調(diào)。然后信號(hào)經(jīng)過(guò)濾波器,即可恢復(fù)出原始相互正交的基帶信號(hào),最后再經(jīng)過(guò)電平判決和串并轉(zhuǎn)換即可還原出原來(lái)的信號(hào)。
2.1.7維特比譯碼
譯碼器的功能就是要根據(jù)某種法則以盡可能低的錯(cuò)誤概率對(duì)編碼輸入信息做出估計(jì)。卷積碼譯碼通常按照最大似然法則譯碼,采用逐步比較的方法來(lái)逼近發(fā)送序列的路徑。
所謂逐步比較就是把接收序列的第j個(gè)分支碼字和網(wǎng)格圖上相應(yīng)的兩個(gè)時(shí)刻j和j+1時(shí)刻之間的各支路作比較,即和編碼器在此期間可能輸出的分支碼字作比較,計(jì)算和記錄它們之間的漢明距離,同時(shí)把他們分別累加到j(luò)時(shí)刻之前的各支路累加到漢明距離之上。比較累加結(jié)果并進(jìn)行選擇,保留漢明距離最小的一條路徑,稱(chēng)其為幸存路徑,其余的路徑均被刪除。所以j+1時(shí)刻進(jìn)入每個(gè)節(jié)點(diǎn)的路徑只有一條,且均為幸存路徑。這一過(guò)程直到接收序列的分支碼字全部處理完畢,具有最小漢明距離的路徑即為發(fā)送序列。
2.2CDMA的技術(shù)特點(diǎn)
CDMA系統(tǒng)是基于擴(kuò)頻技術(shù)的自干擾通信系統(tǒng)。系統(tǒng)為不同的用戶(hù)分配不同地址碼,且只接收與發(fā)送地址碼相同的部分,其他部分變成噪音不接收。CDMA系統(tǒng)具有以下特點(diǎn):
(1)抗干擾能力強(qiáng)
CDMA擴(kuò)頻技術(shù)的理論基礎(chǔ)建立在香農(nóng)公式之上,香農(nóng)公式表明,系統(tǒng)中信噪比下降時(shí),信號(hào)差錯(cuò)率會(huì)隨之下降
REF_Ref355907398\r\h
[12]
。系統(tǒng)的帶寬是非常大的,是其他系統(tǒng)的上百倍。所以在相同的信噪比條件下,CDMA系統(tǒng)的抗干擾能力是比其他系統(tǒng)都好。
(2)兼容性好
可以實(shí)現(xiàn)多個(gè)用戶(hù)同時(shí)發(fā)送,同時(shí)接接收。CDMA系統(tǒng)有很大的帶寬,很寬的頻譜,其信號(hào)功率分布在寬頻譜上,有用的信號(hào)功率遠(yuǎn)小于干擾信號(hào)功率,利于信號(hào)隱藏在噪聲中不被檢測(cè)到。
(3)
軟切換
技術(shù)
軟切換即“先通后斷”。簡(jiǎn)單的說(shuō)就是在到達(dá)兩個(gè)基站覆蓋網(wǎng)絡(luò)范圍的臨界點(diǎn)時(shí),手機(jī)會(huì)先跟新的基站建立起聯(lián)系,確認(rèn)聯(lián)通之后,再斷開(kāi)與原來(lái)基站的聯(lián)系。通過(guò)這樣的方式可不會(huì)因?yàn)榛镜淖兓斐赏ㄔ?huà)中斷、掉線等現(xiàn)象,保證了通話(huà)質(zhì)量。
2.3CDMA的主要應(yīng)用優(yōu)勢(shì)
CDMA技術(shù)現(xiàn)主要應(yīng)用在手機(jī)市場(chǎng)中,其主要優(yōu)勢(shì)有這幾點(diǎn):
(1)較好的聲音質(zhì)量,論文前部分簡(jiǎn)單說(shuō)明系統(tǒng)抗噪聲干擾能力好,通話(huà)噪聲小,語(yǔ)音質(zhì)量接近固定電話(huà)。即使在背景噪音較大時(shí),也可以得到很好的通話(huà)質(zhì)量。
(2)輻射小,CDMA手機(jī)又稱(chēng)“綠色手機(jī)”,它的最大發(fā)射功率不超過(guò)200mW,在通話(huà)過(guò)程中CDMA系統(tǒng)的發(fā)射功率甚至更小,其輻射作用小到可以忽略不計(jì)。
(3)不易掉線,CDMA手機(jī)不會(huì)出現(xiàn)信號(hào)變?nèi)鹾腿菀椎艟€的問(wèn)題,CDMA信號(hào)發(fā)射方式與GSM不同,使用的是“先通后斷”的軟切換技術(shù),保證信號(hào)質(zhì)量。
(4)良好保密性,通話(huà)過(guò)程中,CDMA系統(tǒng)有好幾萬(wàn)億種編碼可能。因此,信息傳輸過(guò)程安全。
(5)網(wǎng)速快,這也是其用戶(hù)量大的一個(gè)主要原因。
(6)用戶(hù)容納量更大。
第三章CDMA系統(tǒng)仿真分析
3.1MATLAB的簡(jiǎn)介
MATLAB軟件可視化仿真的功能,結(jié)合了矩陣的計(jì)算、數(shù)據(jù)的分析、圖形圖像的處理以及系統(tǒng)仿真等多種強(qiáng)大的模塊,主要應(yīng)用于研究分析和工程設(shè)計(jì)等領(lǐng)域。MATLAB軟件環(huán)境中包含許多集成軟件包,這些軟件包是用來(lái)實(shí)現(xiàn)動(dòng)態(tài)建模仿真的
REF_Ref355867776\r\h
[13]
。MATLAB包含多個(gè)模型庫(kù),這些模型庫(kù)能提供的不同功能模塊模型,在調(diào)試過(guò)程中只要改變模塊的對(duì)應(yīng)參數(shù)就能實(shí)現(xiàn)模型的動(dòng)態(tài)仿真功能。通過(guò)MATLAB軟件的仿真結(jié)果,系統(tǒng)用戶(hù)可以實(shí)時(shí)的觀察系統(tǒng)的變化,并根據(jù)觀察的結(jié)果設(shè)計(jì)或改進(jìn)系統(tǒng)的功能。
由于MATLAB軟件的使用方法簡(jiǎn)單,進(jìn)行仿真就可以很直觀的看到結(jié)果,工作效率很高,因此大受許多領(lǐng)域的青睞,是教育、科研、工程以及相關(guān)數(shù)據(jù)計(jì)算的學(xué)科中的常用軟件平臺(tái)。以下我們簡(jiǎn)單舉一個(gè)MATLAB在教育學(xué)科《通信原理》中的應(yīng)用,關(guān)于QPSK調(diào)制仿真的例子。
我們知道,課本中的公式和框圖對(duì)于我們?cè)诳焖倮斫釷PSK調(diào)制解調(diào)的的原理上的效果并不顯著,反而顯得枯燥和難懂。使用MATLAN仿真軟件,將抽象的原理具體化,有助于學(xué)生直觀的理解原理,能在很大程度上解決問(wèn)題。如下,表3-1反應(yīng)了QPSK編碼與載波相位的關(guān)系:
表3-1QPSK編碼與載波相位的關(guān)系
0
a
b
0
90
0
0
1
1
0
270
1
1
180
在MATLAB軟件平臺(tái)中新建一個(gè)Mfile,把實(shí)現(xiàn)調(diào)制的代碼敲進(jìn)去,保存之后點(diǎn)擊運(yùn)行,運(yùn)行的結(jié)果就會(huì)如下圖3-1所示
REF_Ref20302\r\h
[14]
:
圖3-1QPSK調(diào)制圖
1
0
2
3
4
5
6
1
t/ms
載波信號(hào)
數(shù)據(jù)基帶信號(hào)
1
0
2
3
4
5
6
1
-1
t/ms
QPSK鍵控信號(hào)
1
0
2
3
4
5
6
1
-1
t/ms
從QPSK的調(diào)制圖中,我們就能夠非常直觀的看到并理解QPSK調(diào)制的原理,直觀的理解QPSK相位和載波相位之間的關(guān)系。
所以以上這個(gè)QPSK調(diào)制的例子表明,MATLAB軟件可以作為《通信原理》、《數(shù)字信號(hào)系統(tǒng)》等課程的基本教學(xué)和實(shí)驗(yàn)仿真工具,通過(guò)仿真功能可以解決在教學(xué)過(guò)程中遇到的一些問(wèn)題,有助于同學(xué)們更好的理解課程的原理,提高學(xué)生自主分析問(wèn)題的能力。
利用MATLAB仿真技術(shù)進(jìn)行教學(xué)實(shí)驗(yàn),能夠不受許多客觀條件上的限制,有效地彌補(bǔ)某些傳統(tǒng)實(shí)驗(yàn)的不便和不足。有一些在設(shè)備上要求較高,不易操作或不能操作的實(shí)驗(yàn)都可以利用MATLAB軟件,通過(guò)仿真得到理論上的結(jié)果
REF_Ref20704\r\h
[15]
。因此,MATLAB總體來(lái)說(shuō)是一款功能齊全,實(shí)用性強(qiáng)的應(yīng)用軟件。
3.2調(diào)試結(jié)果
CDMA系統(tǒng)的仿真模型如文中第二章提到的圖2-1所示。
首先我們?cè)贛ATLAB軟件平臺(tái)中打開(kāi)源程序代碼mainfile,在主程序中設(shè)定一個(gè)斷點(diǎn),然后點(diǎn)擊run標(biāo)志,在工具欄上點(diǎn)擊step標(biāo)志,一步一步運(yùn)行調(diào)試程序,觀察通信系統(tǒng)過(guò)程中各個(gè)步驟的運(yùn)行情況。再根據(jù)調(diào)試的結(jié)果圖對(duì)整體通信系統(tǒng)進(jìn)行必要的補(bǔ)充和修改,使系統(tǒng)更完整。以下是程序在升余弦濾波器(MFType=1)條件下,運(yùn)行過(guò)程中調(diào)試出來(lái)的各步驟的仿真圖。
系統(tǒng)的主要仿真參數(shù)設(shè)置如下:
控制程序運(yùn)行中的顯示:show=0;
選擇軟/硬判決接收:SD=0;
比特率:BitRate=9600;
碼片速率:ChipRate=1228800;
源數(shù)據(jù)數(shù):N=184;
匹配濾波器類(lèi)型--升余弦:MFType=1;
R=5;
Viterbi生成多項(xiàng)式矩陣:G_Vit=[111101011;101110001];
列數(shù):K=size(G_Vit,2);
行數(shù):L=size(G_Vit,1);
walsh碼的長(zhǎng)度:WLen=64;
仿真信噪比范圍(dB):EbNo=[-2:0.5:6.5];
3.2.1原始序列
代碼中畫(huà)原始序列時(shí)域圖的指令:
figure;
plot(abs(chips));title('Chips_Viterbi');
畫(huà)出原始序列,原始序列產(chǎn)度N為184,故橫坐標(biāo)0到200,表示取到第200個(gè)離散的時(shí)間點(diǎn)。
得到以下圖3-1的結(jié)果:
圖3-1原始序列
以上為原始序列,序列長(zhǎng)度184。
3.2.2維特比編碼序列
代碼中畫(huà)出維特比編碼后的序列圖的指令:
chips=VitEnc(G,[DataBits;zeros(K-1,1)]);
figure;
plot(abs(chips));title('Chips_Viterbi');
運(yùn)行可以得到以下圖3-2的結(jié)果:
圖3-2維特比編碼序列
維特比編碼屬于糾錯(cuò)編碼,在原始序列中加入冗余,在接收信噪比惡化的時(shí)候,用于糾錯(cuò),編碼后碼率變高,帶寬變大。從仿真圖對(duì)比可以看出,編碼之后冗余度增加,碼序列變長(zhǎng)。原始序列經(jīng)過(guò)維特比編碼之后碼速率變大,信息傳輸速率加快了,相應(yīng)的所需要的傳輸帶寬也就增加了。
3.2.3交織編碼序列
代碼中畫(huà)交織編碼序列圖的指令:
INTERL=reshape(chips,24,16);
chips=reshape(INTERL',length(chips),1);
figure;
plot(abs(chips));title('Chips_Reshape');
運(yùn)行以上指令可以得到以下圖3-3的結(jié)果:
圖3-3交織編碼得到的序列
交織編碼將序列的順序打亂,這樣的好處是,在信道受到突發(fā)干擾的時(shí)候,可以將誤碼分散。也就是誤碼不會(huì)集中在一小段時(shí)間,這樣有利于糾錯(cuò)。
3.2.4加擾碼序列
代碼中畫(huà)加擾碼后得到的序列圖的指令:
[LongSeqZs]=PNGen(Gs,Zs,N);
Scrambler=LongSeq(1:64:end);
ChipsOut=xor(chips,Scrambler);
figure;
plot(abs(ChipsOut));title('ChipsOut');
運(yùn)行可以得到以下圖3-4的結(jié)果:
圖3-4加擾碼得到的序列
在原始序列中,可能會(huì)存在連續(xù)的連0或者連1,這時(shí),信號(hào)的直流會(huì)變得很大,不利于信號(hào)的傳輸。這時(shí)需要攪擾,在連續(xù)0或者連續(xù)1的序列中加入破壞脈沖,加擾后碼率不變。擾碼使信號(hào)受到隨機(jī)化處理,變偽隨機(jī)序列。解擾的過(guò)程就是加擾的逆過(guò)程。
3.2.5擴(kuò)頻調(diào)制序列
代碼中畫(huà)擴(kuò)頻調(diào)制得到的序列圖的指令:
[xPNMF]=Modulator(TxChips,MFType,Walsh);
figure;
plot(abs(x));
title('ModulatornData');
figure;
pwelch(2*x-1);
運(yùn)行便會(huì)得到如下擴(kuò)頻序列的時(shí)域和頻譜圖3-5和3-6,擴(kuò)頻序列頻譜是關(guān)于π對(duì)稱(chēng),而且是周期的。頻譜的單位和采樣頻率和帶入FFT的點(diǎn)數(shù)有關(guān)系,一般情況下最后會(huì)把它歸一化到-π到π。
圖3-6中橫坐標(biāo)為0到2π。指令中“-1”是為了去除直流分量,所有的單極性碼(碼元只有0和+1),都要做去直流處理。
圖3-5擴(kuò)頻序列時(shí)域圖
圖3-6擴(kuò)頻序列頻譜圖
擴(kuò)頻是用一個(gè)帶寬很大的高速偽隨機(jī)碼序列,將帶寬遠(yuǎn)小于偽隨機(jī)碼序列的傳送信息的帶寬進(jìn)行擴(kuò)展。從上圖可以看出擴(kuò)頻仿真的結(jié)果與圖2-4擴(kuò)頻信號(hào)傳輸和2-5擴(kuò)頻信號(hào)頻譜圖的理論結(jié)果基本相符。調(diào)制之后的碼序列長(zhǎng)度由原來(lái)的幾百變成了幾萬(wàn),帶寬擴(kuò)大。
其中,調(diào)制過(guò)程中所選擇的匹配濾波器如圖3-7:
圖3-7匹配濾波器
3.2.6加噪信號(hào)
代碼中畫(huà)加噪信號(hào)圖的指令:
noise=1/sqrt(2)*sqrt(R/2)*(randn(size(x))+j*randn(size(x)))*10^(-(EbNo(i)-EbEc)/20);
r=x+noise;
figure;
plot(abs(r));title('ReceiveData');
figure;
pwelch(r);
運(yùn)行便會(huì)得到如下加噪時(shí)域和頻譜圖3-8和3-9:
圖3-8加噪信號(hào)序列
圖3-9加噪信號(hào)頻譜
從圖中可以看到,加入噪聲在信道中傳輸?shù)男盘?hào)基本上跟噪聲信號(hào)一模一樣。這樣也就保證了在信號(hào)在信道傳輸過(guò)程中的安全。
3.2.7解擴(kuò)頻得到的信號(hào)
代碼中畫(huà)解擴(kuò)頻后得到的序列圖的指令:
figure;
plot(abs(RxSD));
title('DemodulatornData');
figure;
pwelch(2*RxSD-1);
運(yùn)行得到圖3-10如下結(jié)果:
圖3-10解擴(kuò)頻得到的序列
從上圖3-10可以看到,解擴(kuò)頻得到的序列的序列長(zhǎng)度變?yōu)?80左右。于擴(kuò)頻之前的序列長(zhǎng)度一致。
3.2.8解擾解交織得到的信號(hào)
代碼中畫(huà)解擾解交織得到的序列圖的指令:
HDchips=xor(HDchips,Scrambler);
INTERL=reshape(HDchips,16,24);
HDchips=reshape(INTERL',length(HDchips),1);
figure;
plot(HDchips);
title('HDchips');
[DataOutMetric]=VitDec(G,HDchips,1);
運(yùn)行得到如下圖3-11的結(jié)果:
圖3-11解擾解交織得到的序列
上圖為解擾解交織之后得到的序列,經(jīng)對(duì)比可以明顯看出,解擾解解交織得到的序列與接擴(kuò)頻得到的序列有很大的差別。解擾解交織之后得到的序列更接近原始序列。
3.2.9恢復(fù)序列
代碼中畫(huà)恢復(fù)序列圖的指令:
RxHD=(RxSD>0);
if(SD)
[RxDataMetric]=ReceiverSD(RxSD,G_Vit,Scrambler);
else
[RxDataMetric]=ReceiverHD(RxHD,G_Vit,Scrambler);
end
figure;
plot(RxData);title('RxData');
運(yùn)行得到如下圖3-12的結(jié)果:
圖3-12恢復(fù)序列
經(jīng)過(guò)判決后得到恢復(fù)序列。從上圖可以看出,恢復(fù)序列與原始序列基本一致。說(shuō)明CDMA系統(tǒng)具有較好的接收和還原數(shù)據(jù)的能力。
3.2.10誤碼率
代碼中畫(huà)出誤碼率圖的指令:
figure;
subplot(211);plot(xor(TxChips,RxHD),'-o');
title('ChipErrors');
subplot(212);
plot(xor(TxData,RxData),'-o');
title(['DataBitErrors.Metric=',num2str(Metric)]);
pause;
通過(guò)以上指令可以得到如下圖3-13的結(jié)果:
圖3-13誤碼率
從圖中可以看到,上一張圖表示的是不經(jīng)信道編碼譯碼的誤碼率,下一張表示的是經(jīng)過(guò)譯碼之后的誤碼率。對(duì)比可以看出,譯碼之后的誤碼率有明顯的降低。但是這邊譯碼之后的誤碼率還是比較高,在這點(diǎn)上可以多做改進(jìn)。
3.3仿真結(jié)果
以上仿真是在升余弦濾波器條件下的結(jié)果,即MFType=1。升余弦濾波器如上圖3-7所示。得到以下圖3-14。
圖3-14.升余弦濾波器條件下的結(jié)果
使用不同的匹配濾波器可以得到不同的仿真結(jié)果,改變?yōu)V波器參數(shù)MFType,運(yùn)行代碼得到以下結(jié)果圖。
MFType=2:
圖3-15.矩形濾波器條件下的結(jié)果
MFType=3:
圖3-16.漢明濾波器條件下的結(jié)果
從以上仿真結(jié)果圖中可以得出以下結(jié)論:
CAMA通信系統(tǒng)中,隨著信噪比增大,誤碼率減小。擴(kuò)頻通信在同等信噪比情況下的誤碼率比一般的通信系統(tǒng)要低,抗干擾能力強(qiáng)。且在系統(tǒng)中使用不同的濾波器會(huì)得到結(jié)果。在信噪比相對(duì)較大的情況下,使用升余弦濾波器得到的誤碼率較小。
總結(jié)
本設(shè)計(jì)利用MATLAB仿真軟件進(jìn)行CDMA系統(tǒng)的仿真。通信系統(tǒng)涉及多個(gè)模塊,較為全面的介紹了整個(gè)CDMA通信系統(tǒng)的工作原理和運(yùn)作方式,并介紹了各模塊參數(shù)的設(shè)置情況。本文還簡(jiǎn)要介紹了CDMA的目前在全球發(fā)展的態(tài)勢(shì)和今后的發(fā)展方向;介紹了CDMA通信系統(tǒng)的所采用的主要技術(shù)以及這些技術(shù)的特征和優(yōu)勢(shì)。利用這些優(yōu)勢(shì)促使其在各個(gè)領(lǐng)域廣泛應(yīng)用。通過(guò)本文還可以清楚的看出CDMA通信系統(tǒng)在當(dāng)今以及日后都還是有很大的研究和發(fā)展價(jià)值的。
同時(shí),本文也對(duì)仿真平臺(tái)MATLAB軟件進(jìn)行了簡(jiǎn)要介紹,對(duì)MATLAB仿真語(yǔ)句有了進(jìn)一步的了解。本設(shè)計(jì)主要研究了CDMA通信系統(tǒng)的誤碼率和信噪比之間的關(guān)系。實(shí)驗(yàn)結(jié)果顯示,在其他條件一定時(shí),信噪比越大則系統(tǒng)的誤碼率越小。且CDMA系統(tǒng)在很小的信噪比之下也可以獲得較好的誤碼情況。CDMA系統(tǒng)的抗干擾能力強(qiáng),能夠準(zhǔn)確接收到并還原出原始數(shù)據(jù)。
但本次的設(shè)計(jì)還存在一些可以做的更好的地方,比如可以進(jìn)一步研究通信過(guò)程中多址干擾的影響;還可以研究在多戶(hù)情況下CDMA準(zhǔn)確接收和還原數(shù)據(jù)的能力。
未來(lái)CDMA通信系統(tǒng)將繼續(xù)往4G方向發(fā)展,其應(yīng)用領(lǐng)域?qū)?huì)更多更廣。其中突出的一點(diǎn)表現(xiàn)在于4G手機(jī),速度更快、功能更多、通訊質(zhì)量更好。
參考文獻(xiàn)
[1]王超,曾玖貞,王彥.Simulink的GO-MC-CDMA系統(tǒng)仿真[J],通信技術(shù),2012,5(45):15-17.
[2]張劍蘭,張培珍.基于MATLAB的CDMA通信系統(tǒng)仿真[J],廣東海洋大學(xué)學(xué)報(bào),2008.8,28(4):86-90.
[3]朱賓.CDMA技術(shù)發(fā)展歷史[Z],特別策劃,28-34.
[4]吳雨川.碼份多址(CDMA)技術(shù)及其最新研究進(jìn)展[J],武漢科技學(xué)院學(xué)報(bào),2005.10,18(10):26-29.
[5]張?jiān)?第三代移動(dòng)通信技術(shù)特點(diǎn)、后續(xù)演進(jìn)及其全球競(jìng)爭(zhēng)格局[J],中國(guó)集成電路,2009.2,(117):67-72.
[6]WilliamH.Tranter,K.SamShanmugan,TheodoreS.Rappaport,KurtL.Kosbar,PrinciplesofCommunicationSystemsSimulationwithWirelessApplications[M],London:PRENTICEHALL,2003:1-778.
[7]原榮.第3代移動(dòng)通信技術(shù)及其發(fā)展[J],廣西通信技術(shù),2009,(4):1-9.
[8]陳青,馬文君,CDMA通信系統(tǒng)仿真及抑制多址干擾的技術(shù)研究[J],通信電源技術(shù),2012.1,29(1):44-47.
[9]XueJunLi,PeterHanJooChong.PerformanceInvestigationofCDMA/PRMAwithImperfectPowerControlinTDDCellularSystems[J],WirelessPersCommun,2010,54:349–360.
[10]金超,李虓江.中國(guó)電信CDMA網(wǎng)絡(luò)次800M頻段使用探討[J],移動(dòng)通信,2012,(19):65-68.
[11]田日才.擴(kuò)頻通信[M],1983,北京出版社,88-93.
[12]李六杏.CDMA技術(shù)在數(shù)據(jù)通信系統(tǒng)中的應(yīng)用[J],合肥學(xué)院學(xué)報(bào),2006.9,16(3):55-58.
[13]朱杰.電子信息技術(shù)中MATLAB仿真的應(yīng)用[J],中國(guó)高新技術(shù)企業(yè),2011.5,64-144.
[14]程鈴,徐冬冬.Matlab仿真在通信原理教學(xué)中的應(yīng)用[J],實(shí)驗(yàn)室研究越探索,2010.2,29(2):117-119.
[15]汪義旺.Matlab仿真在光伏發(fā)電技術(shù)實(shí)驗(yàn)教學(xué)中的應(yīng)用[J],實(shí)驗(yàn)技術(shù)與管理,2011.7,28(7):177-179.附錄資料:不需要的可以自行刪除
Pascal/C/C++語(yǔ)句對(duì)比(補(bǔ)充版)
一、Helloworld
先看三種語(yǔ)言的樣例:
Pascal
begin
writeln(‘Helloworld’);
end.
C
#include<stdio.h>
intmain()
{
printf("Helloworld!\n");
return0;
}
C++
#include<iostream>
usingnamespacestd;
intmain()
{
cout<<"Helloworld!"<<endl;
return0;
}
從這三個(gè)程序可以看到一些最基本的東西。在Pascal中的begin和end,在C/C++里就是{};Pascal主程序沒(méi)有返回值,而C/C++返回0(好像在C中可以為NULL)。在C/C++中,main函數(shù)以前的是頭文件,樣例中C為stdio.h,C++除了iostream還有第二行的usingnamespacestd,這個(gè)是打開(kāi)命名空間的,NOIP不會(huì)考這個(gè),可以不管,只要知道就行了。
此外說(shuō)明注釋單行用//,段落的話(huà)Pascal為{},C/C++為/**/。
**常用頭文件(模板)
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<string>
usingnamespacestd;
intmain()
{
……
system(“pause”);
return0;
}
二、數(shù)據(jù)類(lèi)型及定義
這里只列出常用的類(lèi)型。
1、整型
Pascal
C/C++
范圍
shortint
-
-128…127
integer
short
-32768…32767
longint
Int
-2147483648…2147483647
int64
longlong
-9223372036854775808…9223372036854775807
byte
-
0…255
word
unsignedshort
0…65535
longword
unsignedint
0…4294967295
qword
unsignedlonglong
0…18446744073709551615
**當(dāng)對(duì)longlong變量賦值時(shí),后要加LL
Longlongx=6327844632743269843LL
**如果位移x<<2LL
**Linux:printf(“%lld\n”,x);
**Windows:printf(“%I64d\n”,x);
2、實(shí)型
Pascal
C/C++
范圍
real
float
2.9E-39…1.7E38
single
-
1.5E-45…3.4E38
double
double
5.0E-324…1.7E308
3、字符即字符串
字符在三種語(yǔ)言中都為char,C里沒(méi)有字符串,只有用字符數(shù)組來(lái)代替字符串,Pascal和C++均為string。Pascal中字符串長(zhǎng)度有限制,為255,C++則沒(méi)有。
字符串和字符在Pascal中均用單引號(hào)注明,在C/C++中字符用單引號(hào),字符串用雙引號(hào)。
4、布爾類(lèi)型
Pascal中為boolean,C/C++為bool。值均為T(mén)rue或False。C/C++中除0外bool都為真。
5、定義
常量的定義均為const,只是在C/C++中必須要注明常量的類(lèi)型。在C/C++中還可以用宏來(lái)定義常量,此時(shí)不注明類(lèi)型。
Pascal
C/C++
const
a=60;
b=-a+30;
d=‘‘;
constinta=60;
constintb=-a+30;
conststringd=“”;
defineMAXN501//這個(gè)是宏
**宏定義其實(shí)就是直接在程序相應(yīng)的位置替換:
#definerandomizesrand(unsignedtime(NULL))
#definewaitfor(intw=0;w<100000;w++)
變量的定義,C/C++在定義的同時(shí)可以賦值:
Pascal
C/C++
var
a,b:integer;
c:char;
d:string;
inta,b=50;
charc=‘A’;
stringd;
boolflag;
三、輸入輸出
C/C++中沒(méi)有以回車(chē)作為結(jié)束的讀入方式(就本人所知)?!盶n”表示換行。常規(guī)輸入輸出:
Pascal
C
C++
read(a);//讀入變量a
readln(a);//讀入變a,回車(chē)結(jié)束
write(a);//輸出a
writeln(a);//輸出a并換行
scanf(“%d”,&a);
printf(“%d”,a);
printf(“%d\n”,a);
cin>>a;
cout<<a;
cout<<a<<endl;
特別說(shuō)明C++中cin一個(gè)字符的話(huà)會(huì)自動(dòng)跳過(guò)空格和回車(chē),Pascal和C則會(huì)讀入空格和回車(chē)。在Pascal中writeln(a:n:m)表示在n個(gè)字符寬的輸出域上輸出a保留m位小數(shù)。
例如:pascalwrite(a:6)c/c++printf(“%6d”,a)
Pascalwrite(a:6:2)c/c++printf(“%6.2f”,a)
C++如果用cout?(繁瑣?。?
需要加頭文件#inlude<iomanip>
cout<<setprecision(2)<<a;//作用永久
cout<<setw(6)<<a;//作用臨時(shí)
以下三個(gè)進(jìn)制設(shè)定都是永久作用:
cout<<dec<<a;相當(dāng)printf(“%d”,a);//十進(jìn)制
cout<<hex<<a;相當(dāng)printf(“%X”,a);//十六進(jìn)制
cout<<oct<<a;相當(dāng)printf(“%o”,a);//八進(jìn)制
例如:cout<<12<<hex<<12<<oct<<12<<12<<endl;
輸出:12c1414
C的輸入輸出里面的字符串中%表示變量,%后面的字目表示變量類(lèi)型。下面是類(lèi)型表:
%hd
1個(gè)short型整數(shù)
%d
1個(gè)int型整數(shù)
%u
1個(gè)unsignedint型整數(shù)
%I64d
1個(gè)longlong型整數(shù)
%c
1個(gè)字符
%s
1個(gè)C字符串
%f
1個(gè)float型實(shí)數(shù)
%lf
1個(gè)double型實(shí)數(shù)
%10.4f
輸出1個(gè)總寬度為10,保留4位小數(shù)的實(shí)數(shù)
文件輸入輸出:
Pascal
assign(input,‘test.in’);
assign(output,‘test.out’);
reset(input);
rewrite(output);
read(a,b);
writeln(a,b);
close(input);
close(output);
C
FILE*fin=fopen(“test.in”,“r”);
FILE*fout=fopen(“test.out”,“w”);
fscanf(fin,“%d%d”,&a,&b);
fprintf(fout,“%d%d”,a,b);
fclose(fin);
fclose(fout);
C++
#include<fstream>
usingnamespacestd;
ifstreamfin(“test.in”);
ofstreamfout(“test.out”);
fin>>a>>b;
fout<<a<<b<<endl;
fin.close();
fout.close();
因?yàn)镃++的讀入較慢,個(gè)人建議C++的話(huà)使用C的輸入方式。當(dāng)然也有人用C的讀入,C++的輸出的,這種方式我們稱(chēng)之為城鄉(xiāng)結(jié)合。
**中國(guó)計(jì)算機(jī)學(xué)會(huì)競(jìng)賽須知發(fā)布的C讀寫(xiě)程序:
(C++也能用,cin,cout,scanf,printf可混用)
#include<stdio.h>
intmain()
{
inta,b;
freopen(“sum.in”,”r”,stdin);
freopen(“sum.out”,”w”,stdout);
scanf(“%d%d”,&a,&b);
printf(“%d\n”,a+b);
return0;
}
或者:
freopen(“sum.in”,”r”,stdin);
freopen(“sum.out”,”w”,stdout);
ios::sync_with_stdio(false);\\取消同步,cin,cout的速度就不慢了??!
cin>>a>>b;
cout<<a+b<<endl;
return0;
以下擴(kuò)充c/c++混用是可行的:
#include<iostream>
#include<cstdio>
usingnamespacestd;
intmain()
{
inta,b,c,d;
freopen("sum.in","r",stdin);
freopen("sum.out","w",stdout);
scanf("%d%d",&a,&b);
cin>>c>>d;
printf("%d\n",a+b);
cout<<a+b+c+d<<endl;
return0;
}
**如何判斷文件結(jié)束(EOF)?
C++
while(cin>>s>>n)
{
...
}
C
while(scanf(%s%d",s,&n)!=EOF)
{
...
}
四、賦值語(yǔ)句及運(yùn)算符號(hào)
一一對(duì)應(yīng)的關(guān)系
Pascal
C/C++
賦值運(yùn)算
賦值
:=
=
基本運(yùn)算
加
+
+
減
-
-
乘
*
*
除(實(shí)數(shù))
/
/(double)
除法
取整
div
(int)/(int)
取余
mod
%
比較
等于
=
==
不等于
<>
!=
大于
>
>
大于等于
>=
>=
小于
<
<
小于等于
<=
<=
邏輯
且
and
&&
或
or
||
非
not
!
位運(yùn)算
左移(*2)
shl
<<
右移(/2)
shr
>>
且
and
&
或
or
|
非
not
~
異或
xor
^
其他
增一
inc(x)
x++
減一
dec(x)
x--
在C/C++中對(duì)某個(gè)變量自身進(jìn)行運(yùn)算可以簡(jiǎn)寫(xiě)為
變量名運(yùn)算符號(hào)=改變量
如x+=8就表示x=x+8,即inc(x,8)。
在C/C++里還存在一種三目運(yùn)算
變量名=條件?值A(chǔ):值B
如x=x>0?x:-x;//表示若x>0則取x,否則取–x,
同ifx>0thenx:=xelsex:=-x;
五、條件語(yǔ)句
1、if
C/C++中if語(yǔ)句的條件必須要用括號(hào)括起來(lái),后面不使用then。
Pascal
C/C++
ifa>bthenflag:=true
elseflag:=false;
if(a>b)flag=true;
elseflag=false;
2、多種分支
C/C++中為switch,Pascal為case:
Pascal
C/C++
casexof
1:inc(x);
2:dec(x);
elsex:=x*x;
end;
switch(x)
{
case1:x++;break;
case2:x--;break;
default:x*=x;
}
切記C/C++中一定要寫(xiě)break,后果你可以去掉break,運(yùn)行看看就知道了。
六、循環(huán)語(yǔ)句
1、for
Pascal
C/C++
for變量名:=初始值to(downto)終止值do
for(變量名=初始值;條件;改變方式)
fori:=5to10dodec(a);
//終止值大于初始值用to
fori:=5downto1dodec(a);
//終止值小于于初始值用downto
for(i=5;i<=10;i++)a--;
for(i=5;i>=1;i--)a--;
/*只要i滿(mǎn)足條件就會(huì)一直循環(huán)。
C/C++中i是實(shí)數(shù)、指針都可以*/
C/C++中for的特殊用法:
//變量為實(shí)數(shù)
for(doublei=1;i<=2;i*=1.01)
k++;
//變量為指針,->符號(hào)為間接引用,后面會(huì)提到。
for(type1*p=head->next;p;p=p->next)
printf(“%d”,p->k);
2、while
Pascal
C/C++
while條件do
while(條件)
whilei<>0dodec(i);
while(i!=0)i--;
//也可寫(xiě)作while(i)i--;
//在C/C++中非0即為真。
3、repeat-until&do-while
Pascal
C/C++
repeat語(yǔ)句until結(jié)束條件;
do{}while(運(yùn)行條件)
repeatint(i)untili>100;
do{i++;}while(i<=100);
七、數(shù)組
Pascal中數(shù)組的下標(biāo)可以隨意定義,而C/C++下標(biāo)始終為從0開(kāi)始到(數(shù)組大小–1)。
Pascal
C/C++
定義
a:array[1..100]ofinteger;
b:array[1..10,1..10]ofint64;
inta[100];
intb[10][10];
含義
a為大小為100的integer數(shù)組,合法下標(biāo)為1到100
b為大小為10*10的int64數(shù)組,合法下標(biāo)為1,1到10,10
a為大小為100的int數(shù)組,合法下標(biāo)為0到99
b為大小為10*10的int數(shù)組,合法下標(biāo)為0,0到9,9;
使用
inc(a[21]);
b[2,2]:=b[1,1]+b[1,2]+b[2,1];
a[21]++;
b[1][1]=b[0][1]+b[0][0]+b[1][0];
數(shù)組清零
Pascal
C/C++
Fillchar(a,sizeof(a),0);
memset(a,0,sizeof(a));
//頭文件包含string.h
**如果要填最大:memset(a,127,sizeof(a))(但達(dá)不到INT_MAX)
如果要填最?。簃emset(a,128,sizeof(a))(但達(dá)不到INT_MIN)
如果填0:memset(a,0,sizeof(a))
如果填-1:memset(a,-1,sizeof(a))
八、字符串
C風(fēng)格的字符串就是字符數(shù)組。
C++和Pascal的字符串使用基本相同,只是C++中字符串下標(biāo)以0開(kāi)始,Pascal以1開(kāi)始。字符串處理很多這里不一一列舉,只寫(xiě)最常用的幾個(gè)。
Pascal
C(包含<string.h>)
定義用:chars[]
C++(包含<string>)
定義用:strings
輸入
輸
出
Readln(s);
Writeln(s);
Scanf(“%s”,s);
Printf(“%s\n”,s);
注:不能輸入輸出c++的字符串
Cin>>s;
Cout<<s<<endl;
注:可以輸入輸出c的字符串
查找
pos(‘a(chǎn)’,s);//不存在返回0
沒(méi)有
s.find(‘a(chǎn)’);//不存在返回-1
串
長(zhǎng)
len=length(s);
Strlen(s)
len=s.size();或
Len=s.length();
復(fù)制
copy(st,pos,num);
st:=‘a(chǎn)bcde’;
s:=copy(st,3,2);
//s=‘cd’
Strcpy(s1,s2)
全部復(fù)制
Strncpy(s1,s2,n)
前n個(gè)復(fù)制
但沒(méi)有從第幾個(gè)開(kāi)始的!
substr(pos,n)//返回從pos開(kāi)始的長(zhǎng)度為n的子串;
strings1=“abcde”,s2;
s2=s1.substr(2,2);
//s2=“cd”
插入
insert(obj,target,pos);
st:=‘helloworld’;
st:=insert(‘‘,st,6);
//st=‘helloworld’
沒(méi)有
insert(pos,s)//在pos位置處插入字符串s;
strings1=“0123”;
s1.insert(1,“XYZ”);//s1=“0XYZ123”
刪除
delete(st,pos,num);
st:=‘helloworld’;
st:=delete(st,6,1);
//st=‘helloworld’
沒(méi)有
erase(pos,n)//從pos位置開(kāi)始刪除n個(gè)字符;
strings1="abcdefghi";
s1.erase(5,3);//得到"abcdei"
C++還有以下功能:
用s.replace(2,2,"ttt")可以部分替換
用s.empty()判斷是否為空
可訪問(wèn)s[i],位置從0算起
可以s1+s2
可以s1=s2
可以比較s1==s2當(dāng)然><=>=<=!=都可以比較。
C++字符串整串讀入:
getline(cin,s)和cin>>s的區(qū)別:
getline(cin,s)
cin>>s
一次性整行讀入,直至行末尾。
只讀入一個(gè)“單詞”,遇空格和行末停止。
例如輸入;Howareyou?
s=”Howareyou?”
讀入整串含空格
例如輸入;Howareyou?
s=”How”
如果三個(gè)都讀:cin>>s1>>s2>>s3
**C++數(shù)字與數(shù)值之間的轉(zhuǎn)換:
#include<iostream>
#include<string>
#include<sstream>//必須加入
usingnamespacestd;
intmain()
{
stringtext="152";
intnumber;
stringstreamss;
ss<<text;//可以是其他數(shù)據(jù)類(lèi)型
ss>>number;//string->int
cout<<number+100<<endl;
ss<<number;//int->string
stringstr=ss.str();
return0;
}
九、過(guò)程和函數(shù)
1、過(guò)程
在C/C++中沒(méi)有過(guò)程,但可以把返回值為“空”的函數(shù)理解為過(guò)程。
Pascal
C/C++
無(wú)參過(guò)程
procedure過(guò)程名;
說(shuō)明部分
begin語(yǔ)句部分end;
//說(shuō)明部分、begin、end語(yǔ)句部分統(tǒng)稱(chēng)為過(guò)程體
void函數(shù)名();
{
主體部分;
return;
}
帶參過(guò)程
procedure過(guò)程名(形參表)
過(guò)程體
void函數(shù)名(形參表)
過(guò)程體
值傳和址傳:當(dāng)一個(gè)參數(shù)是值傳時(shí),形參在子過(guò)程中相當(dāng)于一個(gè)局部變量,對(duì)它的改變不影響實(shí)在的參數(shù)值。址傳則會(huì)影響。下例中a為值傳,b為址傳。初始a=5,b=5,運(yùn)行后a=5,b=10;
Pascal
C/C++
vara,b:integer;
proceduredoit(a:integer;varb:integer);
begin
b:=a+b;
a:=a+b;
end;
begin
a:=5;
b:=5;
doit(a,b);
writeln(a,‘‘,b);
end.
voiddoit(inta,int&b)
{
\\a
認(rèn)為值參,b認(rèn)為變量傳參
b+=a;
a+=b;
return;
}
intmain()
{
inta=5,b=5;
doit(a,b);
cout<<a<<‘‘<<b;
return0;
}
**用若干地址傳參可以給調(diào)用者傳回若干值
Voidtryit(int&x,int&y,int&z)
調(diào)用時(shí):tryit(a,b,c),可以傳回a,b,c的值。
**用數(shù)組名(也是地址)傳參可以傳回整組的數(shù)據(jù)
Voidtryit(inta[])
調(diào)用時(shí):tryit(x),可以傳回整個(gè)數(shù)組。
例如:
voidtryit(inta[])
{
for(inti=0;i<=10;i++)a[i]=i*2;
return;
}
intmain()
{
intx[10];
tryit(x);
for(inti=0;i<=10;i++)
cout<<x[i]<<endl;
system("pause");
return0;
}
**用指向函數(shù)的指針作為參數(shù),可以執(zhí)行指定的函數(shù)。(略)
STL的兩個(gè)應(yīng)用:
**C++快排函數(shù)
#include<algorithm>
Boolcom(inta,intb)
{
Returna>b;
}
Intmain()
{
Inta[10]={5,7,3,2,6,8,4,3,5,7};
Sort(a,a+10,com);//如果升序可以省略com.
For(inti=0;i<10;i++)
Cout<<a[i]<<”“;
}
**優(yōu)先隊(duì)列(以堆排為例)
#include<iostream>
#include<queue>
usingnamespacestd;
priority_queue<int>Q;
intmain()
{
intn,a;
cin>>n;
while(n--)
{
cin>>a;
Q.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度智能穿戴產(chǎn)品股份收購(gòu)合同
- 二零二五年度充電樁場(chǎng)地租賃與智能監(jiān)控系統(tǒng)合同
- 專(zhuān)業(yè)私教健身指導(dǎo)合同:2024工作室版版B版
- 二零二五年度甲乙丙方公寓轉(zhuǎn)租租賃合同
- 二零二五年度電視節(jié)目特邀嘉賓演出合同
- 2025年度茶葉行業(yè)數(shù)據(jù)統(tǒng)計(jì)分析合同范本4篇
- 二零二五版創(chuàng)業(yè)合伙人企業(yè)合規(guī)經(jīng)營(yíng)與風(fēng)險(xiǎn)防控合同3篇
- 2025年度銀行貸款居間服務(wù)與貸款回收風(fēng)險(xiǎn)合同
- 2025年度龍門(mén)吊拆除項(xiàng)目設(shè)備拆除與拆除物回收利用合同4篇
- 二零二五年度彩鋼車(chē)庫(kù)門(mén)安裝服務(wù)合同3篇
- 深圳2024-2025學(xué)年度四年級(jí)第一學(xué)期期末數(shù)學(xué)試題
- 中考語(yǔ)文復(fù)習(xí)說(shuō)話(huà)要得體
- 《工商業(yè)儲(chǔ)能柜技術(shù)規(guī)范》
- 華中師范大學(xué)教育技術(shù)學(xué)碩士研究生培養(yǎng)方案
- 醫(yī)院醫(yī)學(xué)倫理委員會(huì)章程
- 初中班主任案例分析4篇
- 公司7s管理組織實(shí)施方案
- Q∕GDW 12147-2021 電網(wǎng)智能業(yè)務(wù)終端接入規(guī)范
- 仁愛(ài)英語(yǔ)單詞默寫(xiě)本(全六冊(cè))英譯漢
- 公園廣場(chǎng)綠地文化設(shè)施維修改造工程施工部署及進(jìn)度計(jì)劃
- 塑料件缺陷匯總
評(píng)論
0/150
提交評(píng)論