《通信原理》課程項(xiàng)目報(bào)告
?
?
?
題 ???目:??? ??????基于開(kāi)發(fā)板的通信系統(tǒng) ?????????
組??? 號(hào):? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
任課教師: ???????????? ? ? ? ? ? ? ??
組??? 長(zhǎng): ??? ????????????
組??? 員: ? ???????????
組??? 員: ??? ???????????
組??? 員: ????????????
組??? 員: ?? ???????????
聯(lián)系方式:? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
?
二零一九年? 2 月 23 日
一、實(shí)施方案
設(shè)計(jì)要求:
在給定的開(kāi)發(fā)板DE10-Lite上,完成以下任務(wù):
?
第一級(jí):完成數(shù)模轉(zhuǎn)換、二進(jìn)制調(diào)制解調(diào)(不含2ASK)(60分)
?
第二級(jí):完成多進(jìn)制調(diào)制解調(diào)、或載波同步(80分)
?
第三級(jí):同時(shí)完成多進(jìn)制調(diào)制解調(diào)和載波同步(90分)
?
單項(xiàng)加分:載波是正弦波,或頻率硬件可調(diào),或系統(tǒng)可以實(shí)現(xiàn)其他功能(每個(gè)10分)
實(shí)現(xiàn)思想:
使用偽隨機(jī)序列模擬基帶信號(hào)進(jìn)行FSK調(diào)制,通過(guò)DA輸出調(diào)制波形;再接入AD口模擬信號(hào)接收端,對(duì)AD采樣的信號(hào)進(jìn)行解調(diào),恢復(fù)出原始基帶信號(hào),并與原始信號(hào)進(jìn)行比較。
在應(yīng)用熟練軟件之后,根據(jù)相同的思路做了多進(jìn)制FSK,對(duì)多進(jìn)制的效率有了更深的體會(huì)。
二、實(shí)施過(guò)程及結(jié)果分析
拿到板子之后,我們組內(nèi)討論得出:做FSK調(diào)制解調(diào);一是便于觀察、演示,二是解調(diào)手段多樣,便于板子上實(shí)現(xiàn)。
不過(guò)初期組內(nèi)熟悉quartus和verilog編程的并不多,而且對(duì)項(xiàng)目要求并不是很了解,所以前幾周更多的是學(xué)習(xí)verilog以及熟悉軟件。在做過(guò)通信原理實(shí)驗(yàn)的同學(xué)幫助下,算是知道了FSK是怎么一回事,緊接著便著手初步的調(diào)制。
在中期的時(shí)候我們總算明白了該怎么起手去做:利用FPGA板子做出數(shù)字的正弦波,再用基帶信號(hào)去進(jìn)行鍵控調(diào)制。
不過(guò)由于當(dāng)時(shí)沒(méi)有DA模塊再加上對(duì)quartus的不熟悉,一切都只是簡(jiǎn)單的嘗試,而且只能花費(fèi)時(shí)間先去學(xué)仿真軟件modelsim,以期望能仿真出一個(gè)正弦波。
網(wǎng)上也各自找了怎么實(shí)現(xiàn)數(shù)字正弦波,一般的做法是要寫(xiě)ROM模塊,通過(guò)累加地址依次輸出一個(gè)一個(gè)數(shù)據(jù),數(shù)據(jù)的來(lái)源則是通過(guò)matlab實(shí)現(xiàn)。
最初感覺(jué)很復(fù)雜,各種各樣的軟件要聯(lián)合起來(lái),大家都不大愿意去做,時(shí)間也越來(lái)越少,只有沉下心去一點(diǎn)點(diǎn)實(shí)現(xiàn)。
中途modelsim軟件又出現(xiàn)各種問(wèn)題,庫(kù)文件不全,無(wú)法仿真,在網(wǎng)上找了很久找到一個(gè)笨辦法,每次仿真時(shí)都要手動(dòng)重新選擇自己生成的庫(kù)文件:
https://wenku.baidu.com/view/67f7dbcb05a1b0717fd5360cba1aa81144318f00.html
在枯燥的重復(fù)操作中算是熟悉了基本的編程以及仿真方法,百度了很多資料,采用讀取ROM的方法總算是生成了初步的正弦載波,踏出了第一步,仿真圖如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
其中使用到來(lái)自matlab生成的mif文件作為數(shù)據(jù)源,matlab代碼如下:
clear;
?
%生成數(shù)據(jù)
depth = 64;
width = 8;
index = 0:2 * depth - 1;
value = 0.5*sin(2*pi*index/depth) + 0.5;
value = im2uint8(value);
%===============================開(kāi)始寫(xiě)mif文件===============================
addr=0:2 * depth-1;
str_width=strcat('WIDTH=',num2str(width));
str_depth=strcat('DEPTH=',num2str(depth));
?
fid=fopen('data2.mif','w');? %打開(kāi)或者新建mif,存放位置和文件名任意
???????????????????????? ?????%如果只寫(xiě)文件名,則在當(dāng)前目錄下建立此文件
fprintf(fid,str_width);
fprintf(fid,';\n');
fprintf(fid,str_depth);
fprintf(fid,';\n\n');
fprintf(fid,'ADDRESS_RADIX=HEX;\n');? %因?yàn)橄旅娴臄?shù)據(jù)輸入我選的是16進(jìn)制,
?
fprintf(fid,'DATA_RADIX=HEX;\n\n');
fprintf(fid,'CONTENT BEGIN\n');
fprintf(fid,'\t%X : %X;\n',[addr;value]);? %開(kāi)始寫(xiě)數(shù)據(jù)了
fprintf(fid,'END;\n');
fclose(fid);
?
就是用128個(gè)點(diǎn)的數(shù)據(jù)去擬合一個(gè)周期的正弦波,同時(shí)這里用了數(shù)字圖像處理的一個(gè)函數(shù)im2uint8,將0~1的值直接轉(zhuǎn)化為0~255的8位二進(jìn)制值。
仿真結(jié)束后,實(shí)際電路我們打算用FPGA的鎖相環(huán)PLL將時(shí)鐘擴(kuò)展到128M,再去驅(qū)動(dòng)這個(gè)ROM模塊,這樣就能生成1MHz的正弦載波了。
調(diào)用的過(guò)程中,我們也了解到FPGA一大方便之處:調(diào)用IP核。很多常用模塊都可以直接通過(guò)調(diào)核來(lái)實(shí)現(xiàn)相應(yīng)功能,像之前實(shí)現(xiàn)的正弦載波其實(shí)可以直接調(diào)用NCO生成。
依靠著強(qiáng)大的百度,我們學(xué)會(huì)了調(diào)用PLL,成功生成128M時(shí)鐘驅(qū)動(dòng)ROM實(shí)現(xiàn)了1MHz正弦波,并初次使用到了FPGA強(qiáng)大的“內(nèi)置示波器signal tap”:

然后簡(jiǎn)單實(shí)現(xiàn)了一個(gè)偽隨機(jī)序列,并編寫(xiě)了選通輸出模塊,兩路載波分別為1M、2M,成功完成了2FSK的調(diào)制。
放假前夕,我們組拿到了ADDA子卡,可以通過(guò)DA輸出、信道傳輸后進(jìn)行AD采樣來(lái)模擬接收了。
假期討論中我們遇到了一個(gè)很?chē)?yán)重的問(wèn)題,DA發(fā)送沒(méi)問(wèn)題,AD接收有問(wèn)題,我們按照ADDA子卡文檔上進(jìn)行操作但觀察到的實(shí)際波形卻是:

第三行是調(diào)制輸出給DA口的,第二行是AD接收的,我們一度懷疑自己設(shè)置錯(cuò)誤了,或者時(shí)鐘沒(méi)給正確。經(jīng)過(guò)一系列排查,我們發(fā)現(xiàn)是頻率的問(wèn)題。這個(gè)“信道”就像是一個(gè)低通濾波器,頻率越高衰減越嚴(yán)重。
因此我們不得不改變?cè)瓉?lái)制定的1M、2M,將頻率降低到能夠演示的范圍。最后直接用10M時(shí)鐘驅(qū)動(dòng)ROM模塊得到78k、156k的兩路載波,而隨機(jī)序列則是10k,也能滿足要求。
其調(diào)制實(shí)際波形通過(guò)示波器查看:

可以看到測(cè)量頻率為78k,與設(shè)計(jì)相符,不過(guò)這個(gè)正弦波很明顯可以看出一些不連續(xù)(臺(tái)階),放大后觀察:

這是因?yàn)橐粋€(gè)周期實(shí)際上只用了128個(gè)點(diǎn)去近似模擬,這也是我們精度不高的原因。之后做MFSK的時(shí)候,已經(jīng)熟悉了各種操作,通過(guò)調(diào)用NCO數(shù)控振蕩器生成的載波就很平滑,如下:

解調(diào)部分我們使用的是非相干解調(diào),將AD接收的信號(hào)分兩路,分別通過(guò)對(duì)應(yīng)的帶通濾波器,經(jīng)過(guò)全波整流,再低通濾波即可提取出兩路信號(hào)的包絡(luò),對(duì)兩路信號(hào)進(jìn)行抽樣判決即可解調(diào)出原始基帶信號(hào),就是按照書(shū)中原理實(shí)現(xiàn)的。
這里又牽扯到一個(gè)問(wèn)題,濾波器的實(shí)現(xiàn),查了很多網(wǎng)上的資料,它們一般都是調(diào)用的FIR Compiler這個(gè)一代IP核,而quartus16給的已經(jīng)是FIR II這個(gè)IP核,有一些不同。
我們借助一代的資料再加上自己的摸索最終實(shí)現(xiàn)了FIR濾波器,它的實(shí)現(xiàn)同樣也要借助于matlab的數(shù)字濾波器設(shè)計(jì),好在matlab集成了一個(gè)fdatool可以方便地給出我們需要的濾波器參數(shù)。
一般工程上實(shí)現(xiàn)濾波器不是我們學(xué)過(guò)的窗函數(shù)等方法,用的最多的是等紋波法,這些都可以直接借助fdatool,十分方便。
利用matlab得到的濾波器系數(shù),設(shè)置好對(duì)應(yīng)的采樣頻率、輸出位數(shù)就成功地實(shí)現(xiàn)了FIR濾波器的調(diào)用:

最后得到的兩路波形,由于2FSK的特性,判決門(mén)限就設(shè)置為0,兩路信號(hào)比較就可以得到輸出的二進(jìn)制波形。
不過(guò)這里還有最后一個(gè)問(wèn)題:實(shí)際應(yīng)用往往需要得到二進(jìn)制比特流,這就需要一個(gè)定時(shí)脈沖去抽樣輸出最終的二進(jìn)制比特流信息。
我們組參考了《數(shù)字調(diào)制解調(diào)技術(shù)的MATLAB與FPGA實(shí)現(xiàn)AlteraVerilog版》一書(shū),利用我們判決輸出的二進(jìn)制波形,實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的“位同步定時(shí)”,能夠比較好地抽樣輸出,完成2FSK的解調(diào),最終效果如下:

第一行是模擬的基帶信號(hào),第三行是DA輸出的調(diào)制波形,第二行是AD采樣進(jìn)來(lái)的信號(hào)(模擬接收端),第四、第五行分別是通過(guò)對(duì)應(yīng)帶通濾波器的信號(hào),第六、第七行是上面兩行提取包絡(luò)(全波整流、低通)波形,第八行是六、七行相減,判決前的波形;以0為門(mén)限判決得到第九行的二進(jìn)制波形,但這并不是數(shù)據(jù)流。
調(diào)用位定時(shí)模塊,利用第九行的二進(jìn)制波形得到了位定時(shí)脈沖(第十行),可以發(fā)現(xiàn)它的相位并不是固定的,在超前和滯后之間來(lái)回跳變,不過(guò)下降沿是比較穩(wěn)定的,取下降沿抽樣輸出得到了最終的解調(diào)信號(hào)(最下面一行)!
做完這些后,整體流程就比較熟悉了,我們又做了一個(gè)簡(jiǎn)單的4進(jìn)制FSK,原理基本相同,不再贅述,直接上signal tap波形:

唯一不同點(diǎn)就是用了四種頻率的載波:第一行基帶數(shù)據(jù)(四進(jìn)制),第二行DA輸出調(diào)制波形,第三行AD采樣波形(可以明顯發(fā)現(xiàn)頻率越大衰減越大),下面的還是帶通、提取包絡(luò)的波形,原理完全一樣。
最后解調(diào)出來(lái)的4進(jìn)制信號(hào)與原始基帶信號(hào)比較:

比較好地恢復(fù)了基帶數(shù)據(jù),完成了多進(jìn)制調(diào)制解調(diào)。
三、項(xiàng)目總結(jié)
這次項(xiàng)目算是大學(xué)以來(lái)最大的挑戰(zhàn)之一了。最開(kāi)始目標(biāo)不明、軟件不會(huì),一點(diǎn)點(diǎn)自學(xué)軟件以及verilog語(yǔ)言,之后能熟練地使用軟件完全都是時(shí)間堆起來(lái)的,quartus、modelsim、matlab等軟件聯(lián)合使用,最終完成了這次的項(xiàng)目。
做這次項(xiàng)目還理解到了FPGA開(kāi)發(fā)的流程和它“模塊化”設(shè)計(jì)的理念,可以進(jìn)行很好的分工、分模塊設(shè)計(jì),最后在頂層文件里調(diào)用小模塊搭建起整個(gè)系統(tǒng),這是不同于以往項(xiàng)目的。
在使用ADDA子卡之前我們?nèi)鞘褂玫?/span>modelsim來(lái)進(jìn)行仿真驗(yàn)證,而使用ADDA模塊后由于仿真無(wú)法實(shí)現(xiàn),我們換成了signal tap直接在板子上驗(yàn)證結(jié)果,也使得我們對(duì)這個(gè)“內(nèi)嵌示波器”有了充足的了解。
項(xiàng)目中也體會(huì)到一點(diǎn):書(shū)本上通俗易懂的原理在實(shí)際工程中往往不是那么好實(shí)現(xiàn)的。我們使用的是非相干解調(diào),也有“不會(huì)載波同步”的原因在里面,書(shū)中直接給出的同步載波卻是整個(gè)項(xiàng)目的最大難題,比較遺憾的是這個(gè)沒(méi)有實(shí)現(xiàn),只參考書(shū)后完成了“位同步定時(shí)脈沖模塊”。
最后做的4進(jìn)制調(diào)制解調(diào)也讓我們更深刻地理解了通信系統(tǒng)的“取舍難題”,我們做的MFSK,傳輸效率確實(shí)高了不少,但其耗費(fèi)的資源(濾波器、尤其是帶寬資源)增加的不是一點(diǎn)半點(diǎn)。尤其是高速通信的當(dāng)今,帶寬資源更是稀缺,也難怪MFSK實(shí)際中基本沒(méi)有應(yīng)用,而基于PSK發(fā)展起來(lái)的QDPSK、QAM等技術(shù)得到了廣泛的應(yīng)用,確實(shí)有著其優(yōu)勢(shì)所在。
四、小組分工
?
參考文獻(xiàn):
?
[1] ?? 杜勇. 《數(shù)字調(diào)制解調(diào)技術(shù)的MATLAB與FPGA實(shí)現(xiàn)AlteraVerilog版》. 電子工業(yè)出版社,2015.3
[2] ?? 李穎潔等. 《現(xiàn)代通信原理——信息傳輸?shù)幕驹怼?/span>.清華大學(xué)出版社,2007.5
電子發(fā)燒友App
























































評(píng)論