基于MATLAB的CDMA系統(tǒng)仿真分析_第1頁
基于MATLAB的CDMA系統(tǒng)仿真分析_第2頁
基于MATLAB的CDMA系統(tǒng)仿真分析_第3頁
基于MATLAB的CDMA系統(tǒng)仿真分析_第4頁
基于MATLAB的CDMA系統(tǒng)仿真分析_第5頁
已閱讀5頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

基于MATLAB的CDMA系統(tǒng)仿真分析

【摘要】本設(shè)計基于MATLAB仿真軟件,完整地實現(xiàn)了CDMA通信系統(tǒng)的建模、仿真和分析過程

REF_Ref355453241\r\h

[1]

;仿真系統(tǒng)包括了CDMA編碼技術(shù)、擴頻技術(shù)、調(diào)制技術(shù)、信道傳輸以及解調(diào)恢復(fù)技術(shù)等各個功能模塊。全面的介紹了整個CDMA通信系統(tǒng)的工作原理和工作方式,并介紹了各個模塊的參數(shù)設(shè)置;文章內(nèi)容包括CDMA的發(fā)展現(xiàn)狀以及發(fā)展趨勢、CDMA通信系統(tǒng)的技術(shù)優(yōu)勢和應(yīng)用領(lǐng)域,從而說明CDMA通信系統(tǒng)在的研究價值和潛力。同時,本文也通過舉例簡單介紹了MATLAB軟件,對用于實現(xiàn)系統(tǒng)模塊功能的MATLAB仿真語句有了進(jìn)一步的了解。MATLAB軟件功能齊全,操作簡單,應(yīng)用廣泛。通過本次設(shè)計得出,CDMA系統(tǒng)的抗干擾能力強,單用戶的情況下,即使在各種人為和物理噪聲的干擾下,依舊可以準(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)為每個用戶分配不同的擴頻序列之間一般情況下不是完全正交的。在這種不在理想狀態(tài)下的相關(guān)性會在用戶和用戶之間的相互干擾,這種干擾就稱為多址干擾。當(dāng)CDMA通信系統(tǒng)中的用戶較少的時候這種干擾現(xiàn)象較輕;系統(tǒng)的用戶數(shù)目變多以后,信號功率的增大,MAI的功率也增大,就會導(dǎo)致系統(tǒng)性能降低。影響所用用戶的噪聲和干擾都來自所有用戶,但是其輸出功率被控制到最低可能。雖然在這中干擾和噪聲的影響之下,通信系統(tǒng)的容量會受到限制,但最終的通信系統(tǒng)的容量還是比頻分和時分系統(tǒng)的容量要大的多。

此次設(shè)計仿真實現(xiàn)了CDMA通信系統(tǒng)每個模塊的功能并進(jìn)行分析。研究通信過程中CDMA系統(tǒng)的抗噪聲和抗干擾能力,以及準(zhǔn)確接收數(shù)據(jù)的能力跟信噪比之間的關(guān)系。

1.3.2研究思路

首先,從目的出發(fā)對整個通信系統(tǒng)進(jìn)行分析,對CDMA通信系統(tǒng)的數(shù)據(jù)發(fā)送端、信道和接收端的各個環(huán)節(jié)功能分解,掌握系統(tǒng)的整體運作過程。

其次,將CDMA系統(tǒng)劃分為卷積編碼、擴頻、加擾碼、調(diào)制和解調(diào)等多個模塊,了解每個模塊的功能作用。

再次,分析各個模塊功能,針對各個功能模塊確定算法,進(jìn)行源程序編寫。

最后,整合各個模塊的程序。仿真調(diào)試得到最終結(jié)果。

本論文主要從這幾部分展開:

第一章為緒論,主要討論CDMA通信系統(tǒng)的背景、該系統(tǒng)當(dāng)今發(fā)展現(xiàn)狀和未來趨勢、研究該系統(tǒng)目的。這幾個方面的討論讓我們了解該通信系統(tǒng)的基本情況,給本文奠定一個方向和思路,方便理解對該通信系統(tǒng)研究的重要意義。

第二章為CDMA的技術(shù)原理,這部分是本文乃至研究過程中的重要部分。只有在完全理解通信系統(tǒng)的基本工作原理和CDMA先進(jìn)技術(shù)的基礎(chǔ)上,用理論指導(dǎo)實踐,才能了解通信系統(tǒng)在工作過程中每個環(huán)節(jié)如何實現(xiàn),結(jié)果是否有誤。這部分主要討論了包括擴頻、調(diào)制解調(diào)等在內(nèi)CDMA通信系統(tǒng)的基本模型、CDMA技術(shù)特點以及該技術(shù)主要應(yīng)用及應(yīng)用優(yōu)勢。

第三章為CDMA通信系統(tǒng)的仿真調(diào)試和結(jié)果。本章節(jié)簡單介紹了MATLAB仿真軟件和該系統(tǒng)仿真模型,對理解該通信系統(tǒng)的工作過程上有很大的幫助。同時本章還包含了CDMA通信系統(tǒng)的仿真分析,包括CDMA系統(tǒng)基本參數(shù)的設(shè)置、程序的調(diào)試過程和仿真結(jié)果分析,通過調(diào)試過程中的結(jié)果可以與理論結(jié)果進(jìn)行比較,最終得到結(jié)論。

接下來是總結(jié)部分,對整個研究的過程和結(jié)果做一個比較全面的總結(jié)。

最后是致謝部分,感謝在畢業(yè)設(shè)計過程中幫助過給予幫助和建議的人。

第二章CDMA技術(shù)原理

2.1CDMA基本模型

CDMA通信系統(tǒng)的基本模型由信源、卷積編碼、交織編碼、加擾碼、擴頻、調(diào)制、信道、解調(diào)、解擴、去擾碼、解交織、解卷積、信宿等部分構(gòu)成?;灸P腿鐖D2-1所示:

信源

卷積編碼

交織編碼

加擾碼

擴頻

調(diào)制

AWGN信道

解調(diào)

解擴頻

信宿

解卷積

解交織

去擾碼

圖2-1CDMA系統(tǒng)基本模型

2.1.1卷積編碼

卷積編碼器對輸入的數(shù)據(jù)流每次1比特或k比特進(jìn)行編碼,輸出n個編碼符號。但輸出分支碼字的每個碼元不僅和此時刻輸入的k個信息有關(guān),也和前面m個連續(xù)時刻輸入的信息元有關(guān),因此編碼器包含有m級寄存器以記錄這些信息,即卷積碼編碼器是有記憶的。卷積編碼可表示為(n,k,m),碼率為k/n。

卷積編碼的原理是把k個信息比特通過編碼,擴展成n個比特,k和n都不大。便于串行傳輸,傳輸時延小。卷積編碼另一個不同于分組碼的特點是,卷積碼編碼中有nN個相關(guān)的碼元數(shù)。編碼后的碼元與當(dāng)前k個信息有關(guān)的同時,也與前面的N-1個信息有關(guān)

REF_Ref355456806\r\h

[9]

。N越大是,卷積碼的糾錯性越好,差錯率則越小。

當(dāng)k為1時,卷積碼編碼器的結(jié)構(gòu)包括一個有m個串接的寄存器構(gòu)成的移位寄存器(成為m級以為寄存器)、n個連接到指定寄存器的模二加法器以及把模二加法器的輸出轉(zhuǎn)化為串行輸出的轉(zhuǎn)換開關(guān)。卷積碼編碼器每次輸入一個信息比特,從輸出端輸出卷積碼分支碼字的兩個碼元,并有轉(zhuǎn)換開關(guān)把兩個輸出端口變換為串行輸出。二進(jìn)制卷積編碼器如圖2-2所示。

圖2-2.二進(jìn)制卷積編碼器

寄存器

寄存器

寄存器

a

b

2.1.2交織編碼

交織編碼將序列的順序打亂,這樣的好處是,在信道受到突發(fā)干擾的時候,可以將誤碼分散。也就是誤碼不會集中在一小段時間,這樣有利于糾錯。偽隨機序列主要包括m序列碼,Gold序列碼,Walsh序列碼等。其中Walsh碼序列復(fù)雜,正交性較好,可用于前向擴展頻譜,反向區(qū)分信道類型

REF_Ref355456774\r\h

[10]

。而相比于m序列,Gold序列可以產(chǎn)生更多地址碼,更適合于大型的通信系統(tǒng)。Walsh碼的良好正交性體現(xiàn)在:在同一個周期T內(nèi),不同碼字之間的積分為零,相同碼字之間的積分不為零,為T。本次設(shè)計系統(tǒng)選用的是第三種碼。

2.1.3偽隨機碼

偽隨機碼簡稱PN碼。為隨機碼性質(zhì)上與白噪聲相似,白噪聲是瞬間值服從正態(tài)分布,并在很大頻帶內(nèi)功率譜都是均勻的一種隨即過程。

偽隨機碼是周期碼,容易賦值加工。偽隨機碼性能類似于白噪聲,功率譜頻帶很寬,具有很好的抗干擾特性。能容易從其他噪聲和干擾信號中分離出來,因此在實踐中常用偽隨機碼作為擴展頻譜的擴頻碼。

實踐中常用來產(chǎn)生偽隨機碼有如下特點:

(1)在一個周期內(nèi)0和1出現(xiàn)的概率相近,出現(xiàn)次數(shù)最多只差一次。

(2)在一個周期內(nèi),連續(xù)出現(xiàn)長度為x比特的1(0)的次數(shù)比連續(xù)出現(xiàn)長度為x+1比特的1(0)的次數(shù)多一倍。

(3)偽隨機序列的自相關(guān)函數(shù)滿足式(2-1)的特性:

EMBEDEquation.DSMT4

(2-1)

其中為碼元延時,N為碼長,K為小于N的整數(shù)。所謂自相關(guān)函數(shù)反映的是一個序列不同時刻兩個狀態(tài)之間的相關(guān)程度。其中,若函數(shù)是周期的,則其自相關(guān)函數(shù)也是周期的,且周期與原函數(shù)相同。

對于碼長為N的周期碼和

QUOTE

,其互相關(guān)函數(shù)定義為式(2-2):

EMBEDEquation.DSMT4

(2-2)

特別的,當(dāng)為零時兩個碼序列相互正交。

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是亮序列中對應(yīng)不同碼元的數(shù)目。

故有,周期碼序列滿足式(2-6)時,則稱之為廣義偽隨機碼。

EMBEDEquation.DSMT4

(2-6)

當(dāng)

QUOTE

與-1/N相等時,得到上文中的式(2-1)。

2.1.4擴頻序列

在擴頻系統(tǒng)中,電信號的頻域描述是頻譜,常見的語音、圖像和數(shù)據(jù)等信息的信號都可以用頻譜表示出來,即信息信號可表示為時間的函數(shù)??梢酝ㄟ^傅里葉變化由信號的時域表示得到頻域表示F(f)

REF_Ref355867435\r\h

[11]

。頻域和時域的關(guān)系如式(2-7):

EMBEDEquation.DSMT4

(2-7)

擴頻通信系統(tǒng)具有抗干擾能力好。擴頻通信的理論基礎(chǔ)是香農(nóng)公式,香農(nóng)公式反映了影響信道的無差錯傳輸能力的因素。即式(2-8):

EMBEDEquation.DSMT4

(2-8)

當(dāng)S/N的比值遠(yuǎn)小于1時,有式(2-9)的結(jié)論:

EMBEDEquation.DSMT4

(2-9)

由此可見,在給定噪比S/N的前提下,增大帶寬可獲得較低的信息差錯率。

擴頻系統(tǒng)的發(fā)射模型如圖2-3所示

REF_Ref355868617\r\h

[11]

圖2-3擴頻發(fā)射原理框圖

編碼器

M序列發(fā)生器

數(shù)據(jù)源

發(fā)射機

射頻振蕩器

c(t)

d(t)

s(t)

輸出信號s(t)表達(dá)式(2-10)如下:

EMBEDEquation.DSMT4

(2-10)

直接擴頻過程是利用擴頻序列乘上原始序列,得到復(fù)合序列,其時域表示如下圖2-4:

復(fù)合序列

信息數(shù)據(jù)

擴頻序列

圖2-4擴頻信號傳輸示意圖

恢復(fù)序列

接收端的頻譜示意圖如圖2-5:

圖2-5輸出信號頻譜示意圖

0

2.1.5信號調(diào)制

同等發(fā)射功率的條件下,QPSK只要用一半的帶寬就能得到與BPSK條件下相同的誤碼率。但在這使用QPSK調(diào)試不是因為其節(jié)省帶寬,而是因為QPSK對不受到某些干擾的影響。

QPSK信號產(chǎn)生原理是采用正交調(diào)制法來直接產(chǎn)生調(diào)相信號,二進(jìn)制碼兩位一組以串行形式輸入,經(jīng)轉(zhuǎn)換后,寬度變?yōu)樵瓉淼膬杀?,以并行形式輸出。接著進(jìn)行極性變換,然后用兩個相互正交的載波分別乘上兩個信號,再把兩個信號相加,從輸出端輸出。其原理框圖如圖2-6所示:

圖2-6QPSK信號產(chǎn)生原理框圖

串/并轉(zhuǎn)換

脈沖成型

脈沖成型

載波發(fā)生

90°相移

二進(jìn)制信息X

已調(diào)信號

Sqpsk

I

Q

Ipluse

Qpluse

Iqpsk

Qqpsk

QPSK調(diào)制的輸出如式(2-11):

EMBEDEquation.DSMT4

(2-11)

式中x1(t)和x2(t)分別為同相支路和正交支路的擴頻碼,兩擴頻碼的碼速率相同但碼結(jié)構(gòu)不同,取值為±1。在設(shè)計時我們?nèi)1(t)和x2(t)的碼速率是同步的并且相干,x1(t)和x2(t)彼此獨立。

2.1.6信號解調(diào)

QPSK信號是由兩個相互正交的信號合成的。其原理框圖如圖2-7所示:

圖2-7QPSK解調(diào)原理圖

90°相移

Sqpsk

匹配濾波

抽樣判決

串/并轉(zhuǎn)換

載波恢復(fù)換

抽樣判決

匹配濾波

定時恢復(fù)

QPSK信號

DemQpluse

DemIpluse

DemIqpsk

DemQqpsk

Sqpsk

還原的二進(jìn)制信息

在同相路和正交路兩路分別設(shè)置一個相關(guān)器,即用兩個相互正交的同頻載波信號分別對兩個相干信號進(jìn)行解調(diào)。然后信號經(jīng)過濾波器,即可恢復(fù)出原始相互正交的基帶信號,最后再經(jīng)過電平判決和串并轉(zhuǎn)換即可還原出原來的信號。

2.1.7維特比譯碼

譯碼器的功能就是要根據(jù)某種法則以盡可能低的錯誤概率對編碼輸入信息做出估計。卷積碼譯碼通常按照最大似然法則譯碼,采用逐步比較的方法來逼近發(fā)送序列的路徑。

所謂逐步比較就是把接收序列的第j個分支碼字和網(wǎng)格圖上相應(yīng)的兩個時刻j和j+1時刻之間的各支路作比較,即和編碼器在此期間可能輸出的分支碼字作比較,計算和記錄它們之間的漢明距離,同時把他們分別累加到j(luò)時刻之前的各支路累加到漢明距離之上。比較累加結(jié)果并進(jìn)行選擇,保留漢明距離最小的一條路徑,稱其為幸存路徑,其余的路徑均被刪除。所以j+1時刻進(jìn)入每個節(jié)點的路徑只有一條,且均為幸存路徑。這一過程直到接收序列的分支碼字全部處理完畢,具有最小漢明距離的路徑即為發(fā)送序列。

2.2CDMA的技術(shù)特點

CDMA系統(tǒng)是基于擴頻技術(shù)的自干擾通信系統(tǒng)。系統(tǒng)為不同的用戶分配不同地址碼,且只接收與發(fā)送地址碼相同的部分,其他部分變成噪音不接收。CDMA系統(tǒng)具有以下特點:

(1)抗干擾能力強

CDMA擴頻技術(shù)的理論基礎(chǔ)建立在香農(nóng)公式之上,香農(nóng)公式表明,系統(tǒng)中信噪比下降時,信號差錯率會隨之下降

REF_Ref355907398\r\h

[12]

。系統(tǒng)的帶寬是非常大的,是其他系統(tǒng)的上百倍。所以在相同的信噪比條件下,CDMA系統(tǒng)的抗干擾能力是比其他系統(tǒng)都好。

(2)兼容性好

可以實現(xiàn)多個用戶同時發(fā)送,同時接接收。CDMA系統(tǒng)有很大的帶寬,很寬的頻譜,其信號功率分布在寬頻譜上,有用的信號功率遠(yuǎn)小于干擾信號功率,利于信號隱藏在噪聲中不被檢測到。

(3)

軟切換

技術(shù)

軟切換即“先通后斷”。簡單的說就是在到達(dá)兩個基站覆蓋網(wǎng)絡(luò)范圍的臨界點時,手機會先跟新的基站建立起聯(lián)系,確認(rèn)聯(lián)通之后,再斷開與原來基站的聯(lián)系。通過這樣的方式可不會因為基站的變化造成通話中斷、掉線等現(xiàn)象,保證了通話質(zhì)量。

2.3CDMA的主要應(yīng)用優(yōu)勢

CDMA技術(shù)現(xiàn)主要應(yīng)用在手機市場中,其主要優(yōu)勢有這幾點:

(1)較好的聲音質(zhì)量,論文前部分簡單說明系統(tǒng)抗噪聲干擾能力好,通話噪聲小,語音質(zhì)量接近固定電話。即使在背景噪音較大時,也可以得到很好的通話質(zhì)量。

(2)輻射小,CDMA手機又稱“綠色手機”,它的最大發(fā)射功率不超過200mW,在通話過程中CDMA系統(tǒng)的發(fā)射功率甚至更小,其輻射作用小到可以忽略不計。

(3)不易掉線,CDMA手機不會出現(xiàn)信號變?nèi)鹾腿菀椎艟€的問題,CDMA信號發(fā)射方式與GSM不同,使用的是“先通后斷”的軟切換技術(shù),保證信號質(zhì)量。

(4)良好保密性,通話過程中,CDMA系統(tǒng)有好幾萬億種編碼可能。因此,信息傳輸過程安全。

(5)網(wǎng)速快,這也是其用戶量大的一個主要原因。

(6)用戶容納量更大。

第三章CDMA系統(tǒng)仿真分析

3.1MATLAB的簡介

MATLAB軟件可視化仿真的功能,結(jié)合了矩陣的計算、數(shù)據(jù)的分析、圖形圖像的處理以及系統(tǒng)仿真等多種強大的模塊,主要應(yīng)用于研究分析和工程設(shè)計等領(lǐng)域。MATLAB軟件環(huán)境中包含許多集成軟件包,這些軟件包是用來實現(xiàn)動態(tài)建模仿真的

REF_Ref355867776\r\h

[13]

。MATLAB包含多個模型庫,這些模型庫能提供的不同功能模塊模型,在調(diào)試過程中只要改變模塊的對應(yīng)參數(shù)就能實現(xiàn)模型的動態(tài)仿真功能。通過MATLAB軟件的仿真結(jié)果,系統(tǒng)用戶可以實時的觀察系統(tǒng)的變化,并根據(jù)觀察的結(jié)果設(shè)計或改進(jìn)系統(tǒng)的功能。

由于MATLAB軟件的使用方法簡單,進(jìn)行仿真就可以很直觀的看到結(jié)果,工作效率很高,因此大受許多領(lǐng)域的青睞,是教育、科研、工程以及相關(guān)數(shù)據(jù)計算的學(xué)科中的常用軟件平臺。以下我們簡單舉一個MATLAB在教育學(xué)科《通信原理》中的應(yīng)用,關(guān)于QPSK調(diào)制仿真的例子。

我們知道,課本中的公式和框圖對于我們在快速理解QPSK調(diào)制解調(diào)的的原理上的效果并不顯著,反而顯得枯燥和難懂。使用MATLAN仿真軟件,將抽象的原理具體化,有助于學(xué)生直觀的理解原理,能在很大程度上解決問題。如下,表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軟件平臺中新建一個Mfile,把實現(xiàn)調(diào)制的代碼敲進(jìn)去,保存之后點擊運行,運行的結(jié)果就會如下圖3-1所示

REF_Ref20302\r\h

[14]

圖3-1QPSK調(diào)制圖

1

0

2

3

4

5

6

1

t/ms

載波信號

數(shù)據(jù)基帶信號

1

0

2

3

4

5

6

1

-1

t/ms

QPSK鍵控信號

1

0

2

3

4

5

6

1

-1

t/ms

從QPSK的調(diào)制圖中,我們就能夠非常直觀的看到并理解QPSK調(diào)制的原理,直觀的理解QPSK相位和載波相位之間的關(guān)系。

所以以上這個QPSK調(diào)制的例子表明,MATLAB軟件可以作為《通信原理》、《數(shù)字信號系統(tǒng)》等課程的基本教學(xué)和實驗仿真工具,通過仿真功能可以解決在教學(xué)過程中遇到的一些問題,有助于同學(xué)們更好的理解課程的原理,提高學(xué)生自主分析問題的能力。

利用MATLAB仿真技術(shù)進(jìn)行教學(xué)實驗,能夠不受許多客觀條件上的限制,有效地彌補某些傳統(tǒng)實驗的不便和不足。有一些在設(shè)備上要求較高,不易操作或不能操作的實驗都可以利用MATLAB軟件,通過仿真得到理論上的結(jié)果

REF_Ref20704\r\h

[15]

。因此,MATLAB總體來說是一款功能齊全,實用性強的應(yīng)用軟件。

3.2調(diào)試結(jié)果

CDMA系統(tǒng)的仿真模型如文中第二章提到的圖2-1所示。

首先我們在MATLAB軟件平臺中打開源程序代碼mainfile,在主程序中設(shè)定一個斷點,然后點擊run標(biāo)志,在工具欄上點擊step標(biāo)志,一步一步運行調(diào)試程序,觀察通信系統(tǒng)過程中各個步驟的運行情況。再根據(jù)調(diào)試的結(jié)果圖對整體通信系統(tǒng)進(jìn)行必要的補充和修改,使系統(tǒng)更完整。以下是程序在升余弦濾波器(MFType=1)條件下,運行過程中調(diào)試出來的各步驟的仿真圖。

系統(tǒng)的主要仿真參數(shù)設(shè)置如下:

控制程序運行中的顯示:show=0;

選擇軟/硬判決接收:SD=0;

比特率:BitRate=9600;

碼片速率:ChipRate=1228800;

源數(shù)據(jù)數(shù):N=184;

匹配濾波器類型--升余弦:MFType=1;

R=5;

Viterbi生成多項式矩陣:G_Vit=[111101011;101110001];

列數(shù):K=size(G_Vit,2);

行數(shù):L=size(G_Vit,1);

walsh碼的長度:WLen=64;

仿真信噪比范圍(dB):EbNo=[-2:0.5:6.5];

3.2.1原始序列

代碼中畫原始序列時域圖的指令:

figure;

plot(abs(chips));title('Chips_Viterbi');

畫出原始序列,原始序列產(chǎn)度N為184,故橫坐標(biāo)0到200,表示取到第200個離散的時間點。

得到以下圖3-1的結(jié)果:

圖3-1原始序列

以上為原始序列,序列長度184。

3.2.2維特比編碼序列

代碼中畫出維特比編碼后的序列圖的指令:

chips=VitEnc(G,[DataBits;zeros(K-1,1)]);

figure;

plot(abs(chips));title('Chips_Viterbi');

運行可以得到以下圖3-2的結(jié)果:

圖3-2維特比編碼序列

維特比編碼屬于糾錯編碼,在原始序列中加入冗余,在接收信噪比惡化的時候,用于糾錯,編碼后碼率變高,帶寬變大。從仿真圖對比可以看出,編碼之后冗余度增加,碼序列變長。原始序列經(jīng)過維特比編碼之后碼速率變大,信息傳輸速率加快了,相應(yīng)的所需要的傳輸帶寬也就增加了。

3.2.3交織編碼序列

代碼中畫交織編碼序列圖的指令:

INTERL=reshape(chips,24,16);

chips=reshape(INTERL',length(chips),1);

figure;

plot(abs(chips));title('Chips_Reshape');

運行以上指令可以得到以下圖3-3的結(jié)果:

圖3-3交織編碼得到的序列

交織編碼將序列的順序打亂,這樣的好處是,在信道受到突發(fā)干擾的時候,可以將誤碼分散。也就是誤碼不會集中在一小段時間,這樣有利于糾錯。

3.2.4加擾碼序列

代碼中畫加擾碼后得到的序列圖的指令:

[LongSeqZs]=PNGen(Gs,Zs,N);

Scrambler=LongSeq(1:64:end);

ChipsOut=xor(chips,Scrambler);

figure;

plot(abs(ChipsOut));title('ChipsOut');

運行可以得到以下圖3-4的結(jié)果:

圖3-4加擾碼得到的序列

在原始序列中,可能會存在連續(xù)的連0或者連1,這時,信號的直流會變得很大,不利于信號的傳輸。這時需要攪擾,在連續(xù)0或者連續(xù)1的序列中加入破壞脈沖,加擾后碼率不變。擾碼使信號受到隨機化處理,變偽隨機序列。解擾的過程就是加擾的逆過程。

3.2.5擴頻調(diào)制序列

代碼中畫擴頻調(diào)制得到的序列圖的指令:

[xPNMF]=Modulator(TxChips,MFType,Walsh);

figure;

plot(abs(x));

title('ModulatornData');

figure;

pwelch(2*x-1);

運行便會得到如下擴頻序列的時域和頻譜圖3-5和3-6,擴頻序列頻譜是關(guān)于π對稱,而且是周期的。頻譜的單位和采樣頻率和帶入FFT的點數(shù)有關(guān)系,一般情況下最后會把它歸一化到-π到π。

圖3-6中橫坐標(biāo)為0到2π。指令中“-1”是為了去除直流分量,所有的單極性碼(碼元只有0和+1),都要做去直流處理。

圖3-5擴頻序列時域圖

圖3-6擴頻序列頻譜圖

擴頻是用一個帶寬很大的高速偽隨機碼序列,將帶寬遠(yuǎn)小于偽隨機碼序列的傳送信息的帶寬進(jìn)行擴展。從上圖可以看出擴頻仿真的結(jié)果與圖2-4擴頻信號傳輸和2-5擴頻信號頻譜圖的理論結(jié)果基本相符。調(diào)制之后的碼序列長度由原來的幾百變成了幾萬,帶寬擴大。

其中,調(diào)制過程中所選擇的匹配濾波器如圖3-7:

圖3-7匹配濾波器

3.2.6加噪信號

代碼中畫加噪信號圖的指令:

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);

運行便會得到如下加噪時域和頻譜圖3-8和3-9:

圖3-8加噪信號序列

圖3-9加噪信號頻譜

從圖中可以看到,加入噪聲在信道中傳輸?shù)男盘柣旧细肼曅盘栆荒R粯?。這樣也就保證了在信號在信道傳輸過程中的安全。

3.2.7解擴頻得到的信號

代碼中畫解擴頻后得到的序列圖的指令:

figure;

plot(abs(RxSD));

title('DemodulatornData');

figure;

pwelch(2*RxSD-1);

運行得到圖3-10如下結(jié)果:

圖3-10解擴頻得到的序列

從上圖3-10可以看到,解擴頻得到的序列的序列長度變?yōu)?80左右。于擴頻之前的序列長度一致。

3.2.8解擾解交織得到的信號

代碼中畫解擾解交織得到的序列圖的指令:

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);

運行得到如下圖3-11的結(jié)果:

圖3-11解擾解交織得到的序列

上圖為解擾解交織之后得到的序列,經(jīng)對比可以明顯看出,解擾解解交織得到的序列與接擴頻得到的序列有很大的差別。解擾解交織之后得到的序列更接近原始序列。

3.2.9恢復(fù)序列

代碼中畫恢復(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');

運行得到如下圖3-12的結(jié)果:

圖3-12恢復(fù)序列

經(jīng)過判決后得到恢復(fù)序列。從上圖可以看出,恢復(fù)序列與原始序列基本一致。說明CDMA系統(tǒng)具有較好的接收和還原數(shù)據(jù)的能力。

3.2.10誤碼率

代碼中畫出誤碼率圖的指令:

figure;

subplot(211);plot(xor(TxChips,RxHD),'-o');

title('ChipErrors');

subplot(212);

plot(xor(TxData,RxData),'-o');

title(['DataBitErrors.Metric=',num2str(Metric)]);

pause;

通過以上指令可以得到如下圖3-13的結(jié)果:

圖3-13誤碼率

從圖中可以看到,上一張圖表示的是不經(jīng)信道編碼譯碼的誤碼率,下一張表示的是經(jīng)過譯碼之后的誤碼率。對比可以看出,譯碼之后的誤碼率有明顯的降低。但是這邊譯碼之后的誤碼率還是比較高,在這點上可以多做改進(jìn)。

3.3仿真結(jié)果

以上仿真是在升余弦濾波器條件下的結(jié)果,即MFType=1。升余弦濾波器如上圖3-7所示。得到以下圖3-14。

圖3-14.升余弦濾波器條件下的結(jié)果

使用不同的匹配濾波器可以得到不同的仿真結(jié)果,改變?yōu)V波器參數(shù)MFType,運行代碼得到以下結(jié)果圖。

MFType=2:

圖3-15.矩形濾波器條件下的結(jié)果

MFType=3:

圖3-16.漢明濾波器條件下的結(jié)果

從以上仿真結(jié)果圖中可以得出以下結(jié)論:

CAMA通信系統(tǒng)中,隨著信噪比增大,誤碼率減小。擴頻通信在同等信噪比情況下的誤碼率比一般的通信系統(tǒng)要低,抗干擾能力強。且在系統(tǒng)中使用不同的濾波器會得到結(jié)果。在信噪比相對較大的情況下,使用升余弦濾波器得到的誤碼率較小。

總結(jié)

本設(shè)計利用MATLAB仿真軟件進(jìn)行CDMA系統(tǒng)的仿真。通信系統(tǒng)涉及多個模塊,較為全面的介紹了整個CDMA通信系統(tǒng)的工作原理和運作方式,并介紹了各模塊參數(shù)的設(shè)置情況。本文還簡要介紹了CDMA的目前在全球發(fā)展的態(tài)勢和今后的發(fā)展方向;介紹了CDMA通信系統(tǒng)的所采用的主要技術(shù)以及這些技術(shù)的特征和優(yōu)勢。利用這些優(yōu)勢促使其在各個領(lǐng)域廣泛應(yīng)用。通過本文還可以清楚的看出CDMA通信系統(tǒng)在當(dāng)今以及日后都還是有很大的研究和發(fā)展價值的。

同時,本文也對仿真平臺MATLAB軟件進(jìn)行了簡要介紹,對MATLAB仿真語句有了進(jìn)一步的了解。本設(shè)計主要研究了CDMA通信系統(tǒng)的誤碼率和信噪比之間的關(guān)系。實驗結(jié)果顯示,在其他條件一定時,信噪比越大則系統(tǒng)的誤碼率越小。且CDMA系統(tǒng)在很小的信噪比之下也可以獲得較好的誤碼情況。CDMA系統(tǒng)的抗干擾能力強,能夠準(zhǔn)確接收到并還原出原始數(shù)據(jù)。

但本次的設(shè)計還存在一些可以做的更好的地方,比如可以進(jìn)一步研究通信過程中多址干擾的影響;還可以研究在多戶情況下CDMA準(zhǔn)確接收和還原數(shù)據(jù)的能力。

未來CDMA通信系統(tǒng)將繼續(xù)往4G方向發(fā)展,其應(yīng)用領(lǐng)域?qū)喔鼜V。其中突出的一點表現(xiàn)在于4G手機,速度更快、功能更多、通訊質(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é)報,2008.8,28(4):86-90.

[3]朱賓.CDMA技術(shù)發(fā)展歷史[Z],特別策劃,28-34.

[4]吳雨川.碼份多址(CDMA)技術(shù)及其最新研究進(jìn)展[J],武漢科技學(xué)院學(xué)報,2005.10,18(10):26-29.

[5]張云.第三代移動通信技術(shù)特點、后續(xù)演進(jìn)及其全球競爭格局[J],中國集成電路,2009.2,(117):67-72.

[6]WilliamH.Tranter,K.SamShanmugan,TheodoreS.Rappaport,KurtL.Kosbar,PrinciplesofCommunicationSystemsSimulationwithWirelessApplications[M],London:PRENTICEHALL,2003:1-778.

[7]原榮.第3代移動通信技術(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]金超,李虓江.中國電信CDMA網(wǎng)絡(luò)次800M頻段使用探討[J],移動通信,2012,(19):65-68.

[11]田日才.擴頻通信[M],1983,北京出版社,88-93.

[12]李六杏.CDMA技術(shù)在數(shù)據(jù)通信系統(tǒng)中的應(yīng)用[J],合肥學(xué)院學(xué)報,2006.9,16(3):55-58.

[13]朱杰.電子信息技術(shù)中MATLAB仿真的應(yīng)用[J],中國高新技術(shù)企業(yè),2011.5,64-144.

[14]程鈴,徐冬冬.Matlab仿真在通信原理教學(xué)中的應(yīng)用[J],實驗室研究越探索,2010.2,29(2):117-119.

[15]汪義旺.Matlab仿真在光伏發(fā)電技術(shù)實驗教學(xué)中的應(yīng)用[J],實驗技術(shù)與管理,2011.7,28(7):177-179.附錄資料:不需要的可以自行刪除

Pascal/C/C++語句對比(補充版)

一、Helloworld

先看三種語言的樣例:

Pascal

begin

writeln(‘Helloworld’);

end.

C

#include<stdio.h>

intmain()

{

printf("Helloworld!\n");

return0;

}

C++

#include<iostream>

usingnamespacestd;

intmain()

{

cout<<"Helloworld!"<<endl;

return0;

}

從這三個程序可以看到一些最基本的東西。在Pascal中的begin和end,在C/C++里就是{};Pascal主程序沒有返回值,而C/C++返回0(好像在C中可以為NULL)。在C/C++中,main函數(shù)以前的是頭文件,樣例中C為stdio.h,C++除了iostream還有第二行的usingnamespacestd,這個是打開命名空間的,NOIP不會考這個,可以不管,只要知道就行了。

此外說明注釋單行用//,段落的話Pascal為{},C/C++為/**/。

**常用頭文件(模板)

#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cmath>

#include<ctime>

#include<string>

usingnamespacestd;

intmain()

{

……

system(“pause”);

return0;

}

二、數(shù)據(jù)類型及定義

這里只列出常用的類型。

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)對longlong變量賦值時,后要加LL

Longlongx=6327844632743269843LL

**如果位移x<<2LL

**Linux:printf(“%lld\n”,x);

**Windows:printf(“%I64d\n”,x);

2、實型

Pascal

C/C++

范圍

real

float

2.9E-39…1.7E38

single

-

1.5E-45…3.4E38

double

double

5.0E-324…1.7E308

3、字符即字符串

字符在三種語言中都為char,C里沒有字符串,只有用字符數(shù)組來代替字符串,Pascal和C++均為string。Pascal中字符串長度有限制,為255,C++則沒有。

字符串和字符在Pascal中均用單引號注明,在C/C++中字符用單引號,字符串用雙引號。

4、布爾類型

Pascal中為boolean,C/C++為bool。值均為True或False。C/C++中除0外bool都為真。

5、定義

常量的定義均為const,只是在C/C++中必須要注明常量的類型。在C/C++中還可以用宏來定義常量,此時不注明類型。

Pascal

C/C++

const

a=60;

b=-a+30;

d=‘‘;

constinta=60;

constintb=-a+30;

conststringd=“”;

defineMAXN501//這個是宏

**宏定義其實就是直接在程序相應(yīng)的位置替換:

#definerandomizesrand(unsignedtime(NULL))

#definewaitfor(intw=0;w<100000;w++)

變量的定義,C/C++在定義的同時可以賦值:

Pascal

C/C++

var

a,b:integer;

c:char;

d:string;

inta,b=50;

charc=‘A’;

stringd;

boolflag;

三、輸入輸出

C/C++中沒有以回車作為結(jié)束的讀入方式(就本人所知)?!盶n”表示換行。常規(guī)輸入輸出:

Pascal

C

C++

read(a);//讀入變量a

readln(a);//讀入變a,回車結(jié)束

write(a);//輸出a

writeln(a);//輸出a并換行

scanf(“%d”,&a);

printf(“%d”,a);

printf(“%d\n”,a);

cin>>a;

cout<<a;

cout<<a<<endl;

特別說明C++中cin一個字符的話會自動跳過空格和回車,Pascal和C則會讀入空格和回車。在Pascal中writeln(a:n:m)表示在n個字符寬的輸出域上輸出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;//作用臨時

以下三個進(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的輸入輸出里面的字符串中%表示變量,%后面的字目表示變量類型。下面是類型表:

%hd

1個short型整數(shù)

%d

1個int型整數(shù)

%u

1個unsignedint型整數(shù)

%I64d

1個longlong型整數(shù)

%c

1個字符

%s

1個C字符串

%f

1個float型實數(shù)

%lf

1個double型實數(shù)

%10.4f

輸出1個總寬度為10,保留4位小數(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();

因為C++的讀入較慢,個人建議C++的話使用C的輸入方式。當(dāng)然也有人用C的讀入,C++的輸出的,這種方式我們稱之為城鄉(xiāng)結(jié)合。

**中國計算機學(xué)會競賽須知發(fā)布的C讀寫程序:

(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;

以下擴充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īng)的關(guān)系

Pascal

C/C++

賦值運算

賦值

:=

=

基本運算

+

+

-

-

*

*

除(實數(shù))

/

/(double)

除法

取整

div

(int)/(int)

取余

mod

%

比較

等于

=

==

不等于

<>

!=

大于

>

>

大于等于

>=

>=

小于

<

<

小于等于

<=

<=

邏輯

and

&&

or

||

not

!

位運算

左移(*2)

shl

<<

右移(/2)

shr

>>

and

&

or

|

not

~

異或

xor

^

其他

增一

inc(x)

x++

減一

dec(x)

x--

在C/C++中對某個變量自身進(jìn)行運算可以簡寫為

變量名運算符號=改變量

如x+=8就表示x=x+8,即inc(x,8)。

在C/C++里還存在一種三目運算

變量名=條件?值A(chǔ):值B

如x=x>0?x:-x;//表示若x>0則取x,否則取–x,

同ifx>0thenx:=xelsex:=-x;

五、條件語句

1、if

C/C++中if語句的條件必須要用括號括起來,后面不使用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++中一定要寫break,后果你可以去掉break,運行看看就知道了。

六、循環(huán)語句

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滿足條件就會一直循環(huán)。

C/C++中i是實數(shù)、指針都可以*/

C/C++中for的特殊用法:

//變量為實數(shù)

for(doublei=1;i<=2;i*=1.01)

k++;

//變量為指針,->符號為間接引用,后面會提到。

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--;

//也可寫作while(i)i--;

//在C/C++中非0即為真。

3、repeat-until&do-while

Pascal

C/C++

repeat語句until結(jié)束條件;

do{}while(運行條件)

repeatint(i)untili>100;

do{i++;}while(i<=100);

七、數(shù)組

Pascal中數(shù)組的下標(biāo)可以隨意定義,而C/C++下標(biāo)始終為從0開始到(數(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開始,Pascal以1開始。字符串處理很多這里不一一列舉,只寫最常用的幾個。

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

沒有

s.find(‘a(chǎn)’);//不存在返回-1

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個復(fù)制

但沒有從第幾個開始的!

substr(pos,n)//返回從pos開始的長度為n的子串;

strings1=“abcde”,s2;

s2=s1.substr(2,2);

//s2=“cd”

插入

insert(obj,target,pos);

st:=‘helloworld’;

st:=insert(‘‘,st,6);

//st=‘helloworld’

沒有

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’

沒有

erase(pos,n)//從pos位置開始刪除n個字符;

strings1="abcdefghi";

s1.erase(5,3);//得到"abcdei"

C++還有以下功能:

用s.replace(2,2,"ttt")可以部分替換

用s.empty()判斷是否為空

可訪問s[i],位置從0算起

可以s1+s2

可以s1=s2

可以比較s1==s2當(dāng)然><=>=<=!=都可以比較。

C++字符串整串讀入:

getline(cin,s)和cin>>s的區(qū)別:

getline(cin,s)

cin>>s

一次性整行讀入,直至行末尾。

只讀入一個“單詞”,遇空格和行末停止。

例如輸入;Howareyou?

s=”Howareyou?”

讀入整串含空格

例如輸入;Howareyou?

s=”How”

如果三個都讀: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ù)類型

ss>>number;//string->int

cout<<number+100<<endl;

ss<<number;//int->string

stringstr=ss.str();

return0;

}

九、過程和函數(shù)

1、過程

在C/C++中沒有過程,但可以把返回值為“空”的函數(shù)理解為過程。

Pascal

C/C++

無參過程

procedure過程名;

說明部分

begin語句部分end;

//說明部分、begin、end語句部分統(tǒng)稱為過程體

void函數(shù)名();

{

主體部分;

return;

}

帶參過程

procedure過程名(形參表)

過程體

void函數(shù)名(形參表)

過程體

值傳和址傳:當(dāng)一個參數(shù)是值傳時,形參在子過程中相當(dāng)于一個局部變量,對它的改變不影響實在的參數(shù)值。址傳則會影響。下例中a為值傳,b為址傳。初始a=5,b=5,運行后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)用時:tryit(a,b,c),可以傳回a,b,c的值。

**用數(shù)組名(也是地址)傳參可以傳回整組的數(shù)據(jù)

Voidtryit(inta[])

調(diào)用時:tryit(x),可以傳回整個數(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的兩個應(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)先隊列(以堆排為例)

#include<iostream>

#include<queue>

usingnamespacestd;

priority_queue<int>Q;

intmain()

{

intn,a;

cin>>n;

while(n--)

{

cin>>a;

Q.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論