日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > ZYNQ
		


一、概述


說是概述,但是你還是得必須容我先瞎扯一番的。又是課程的作業(yè),要通過FPGA實現(xiàn)AM信號的產(chǎn)生與解調(diào)。我們最開始手上是有硬件的板卡的,型號是叫Nexys Video。(當然現(xiàn)在被老師收走了,所以下面的程序只能講解到仿真的層次)要求是通過VIO控制載波頻率、調(diào)制信號頻率、調(diào)制深度可調(diào),然后通過ILA觀察AM信號和解調(diào)后的信號。我記得載波信號的頻率要求是1M~10M,調(diào)制信號的頻率要求是1K~10K,調(diào)制深度從0到1、步進0.1。當然他規(guī)定了一定的精度。(VIO與ILA只能通過硬件板卡實現(xiàn),下面的講解中演示不了)。這個程序雖然說不算難吧,但是我確實忙活了一個星期才搞明白,每天都得超過12點睡覺。最讓我崩潰的是:考試驗收的那一天,我竟然忘記把昨天晚上最后改好的程序考到U盤上來,又是各種原因不能回去拿電腦。我的那個心涼的。。。從頭一點點開始寫啊,然后還有各種各樣的波折,害的我都以為這門課是要來年重修的節(jié)奏。還好,最后一刻順利完成。好,瞎扯到此為止,下面進入正題。


二、平臺


軟件:Vivado 2016.4


硬件:Nexys Video(這個不重要)


三、要求


為了更好的說明下面一些參數(shù)設(shè)定的意義,把我們課程的部分要求貼上來

完成AM信號調(diào)制和解調(diào)功能,具體要求如下:

(1)載波信號頻率范圍:1M-10MHz,分辨率0.01MHz;

(2)調(diào)制信號為單頻正弦波信號,頻率范圍:1kHz-10kHz,分辨率0.01kHz;

(3)調(diào)制深度0-1.0,步進0.1,精度優(yōu)于5%;

(4)調(diào)制信號和解調(diào)信號位寬為8位,AM信號16位,其他信號位寬自定義。

四、原理


雖然這部分簡單,但卻是最最重要的,把這部分看懂,所有的程序也就明白了。


1.  AM信號:(A+ma*cos(w0t))*cos(wct)


一步步來嘛,首先肯定要產(chǎn)生兩個頻率不同的余弦波cos(w0t),cos(wct)。立馬想到調(diào)用系統(tǒng)自帶的DDS IP核來實現(xiàn)嘛,這是最簡單的方法。我在網(wǎng)上還看到一個自己通過導(dǎo)coe文件來模擬DDS然后來產(chǎn)生余弦波的,這里就不說了。


產(chǎn)生兩個余弦波后,再來兩個乘法器(現(xiàn)在沒有徹底想明白“*”這個符號和乘法器的區(qū)別,這里就不說了,我還是乖乖的調(diào)系統(tǒng)的乘法器吧)、一個加法器(后面程序直接用的“+”號,沒有用加法器ip 核),運算一把不就搞定了嗎。


2.AM信號生成中的注意點(這個有點繞)


首先看一下調(diào)制深度的問題。調(diào)制深度通常為已調(diào)波的最大振幅與最小振幅之差對載波最大振幅與最小振幅之和的比。就是生成AM波包絡(luò)的最大值與最小值之差除以最大值與最小值之和。包絡(luò)其實就是(A+ma*cos(w0t))。它的最大值是A+ma,最小值是A-ma。最后可以算出調(diào)制深度就是ma/A。A為1時,調(diào)制深度就是ma,其實只要A的值和后面的余弦波的最大值是相同的,調(diào)制深度就會為ma,為0~1之間。


但是有一個重要的問題不要忘了,就是在硬件描述語言中表示小數(shù)并不像C語言那么簡單直接(其實所謂的小數(shù)只是我們對每個字節(jié)中的0和1的解釋方式不同而已,在硬件描述語言中,我們會很自然的會把0和1兩種狀態(tài)直接轉(zhuǎn)換為十進制,比如8'b0000_0011,我們會很自然的把它看做3,那么這樣的話,硬件描述語言中是沒有小數(shù)的)。我們上面生成的余弦信號cos(w0t)并不是在0~1范圍內(nèi)。假如我們讓DDS的輸出位寬為8位,那么這個余弦信號的幅度大小-128~127。我們就當做是-127~127,那么這里先假設(shè)A為127。再來再算一下調(diào)制深度。這時包絡(luò)最大值為127+ma*127,最小值為127-ma*127。最后調(diào)制深度還會是ma,這個ma的范圍還是0~1。ma是從0~1之間變的話,還是有不能直接表示小數(shù)這個問題。有兩種解決方法:


1.讓A=1270,也就是包絡(luò)最大值為1270+ma*127,最小值1270+ma*127。算出調(diào)制深度最后應(yīng)該為ma/10的。這時便可以設(shè)定ma為1~10來改變調(diào)制深度了。


2,.下面的程序是用的是以下這種方法。比如說(127*256)>>8(要知道右移一位相等于除2,右移8位的話等于除以256),就相當于127*1。而(127*128)>>8就相當于127*0.5=63。也就是這樣產(chǎn)生我們的小數(shù)ma的,通過設(shè)定一個8位的變量depth_con乘以127,然后將得到的結(jié)果右移8位,那么我們就可以通過depth_con來控制調(diào)制深度depth了。他們的關(guān)系也就是depth=depth_con/256。當然這些推理是在保持A=127的情況下進行的,也就是AM信號包絡(luò)為127+(depth_con*COS)>>8。(COS是DDS產(chǎn)生的8位信號)


前面的127+(depth_con*COS)>>8得到后,再經(jīng)過乘法器乘以8位的載波就行了,這個乘法器的輸出的就是我們要的AM信號了。這里還有一點就是127+(depth_con*COS)>>8的結(jié)果的范圍是0~256。這時可以將乘法器的一個輸入改為8無符號數(shù),正好可以滿足0~256的范圍。乘以8位的載波信號后,得到的AM波正好是我們要求的那樣,輸出16位的AM波。(主要就是因為這才選的這種方法)


3.AM信號的解調(diào)


首先來談一下解調(diào)方法:


相干解調(diào),就是在AM波的基礎(chǔ)上再乘以載波一次,然后經(jīng)過低通濾波,隔直便可以得到我們要的解調(diào)信號。在頻域分析也就是乘以載波后有了會產(chǎn)生一個w0的頻率分量和幾個高頻分量,將這幾個高頻分量濾除便可以得到原始的調(diào)制信號。這個原理簡單。


然而我用的還是下面的這種方法不知道算不算包絡(luò)解調(diào)(我覺得不算吧),就是將AM波進行全波整流(就是取絕對值)或者半波整流(就是把負半軸的信號不要),然后低通濾波便可以得到我們要的解調(diào)信號了。這個原理最開始我是百思不得其解,因為最開始不知聽誰說這種方法算包絡(luò)解調(diào),所以我一直在想為什么AM信號直接低通濾波后提取不了包絡(luò),而整流后低通濾波就可以提取包絡(luò)了呢?但是其實再回頭看,原理也挺簡單。跟本不算提取包絡(luò)吧。下面是AM信號進行全波整流后的頻譜圖(MATLAB)。調(diào)制信號頻率為1KHz,載波頻率為100KHz。


放大前

放大后

可以看出全波整流后的AM波在調(diào)制信號頻率處有了新的頻率分量,所以再經(jīng)過低通濾波就可以得到最開始的調(diào)制信號。


理論推導(dǎo)的話,這幾天也大概搞明白了。首先(1+cosw0t)coswct全波整流后得到(1+cosw0t)|coswct|(肯定要保證(1+cosw0t)大于0的)


其實你只要得到|coswct|的傅里葉級數(shù)就可以明白了。|coswct|的傅里葉級數(shù)具體我記不清了,但是我記得展開后有一個常數(shù)項2/pi,然后加上后面的一大坨(上網(wǎng)上搜一下就知道了)。主要就是有了這個常數(shù)項2/pi,它和前面的(1+cosw0t)相乘后就會得到w0的頻率分量,也就是我們調(diào)制信號的頻率。然后濾波一下,你懂得。


至于半波整流一樣分析吧。


再來說一下濾波器在vivado里的實現(xiàn)


直接調(diào)用系統(tǒng)自帶的fir IP核,點開后第一個界面。選COE文件,然后導(dǎo)入。

這個COE文件可以通過MATLAB生成(我也只知道這一種方式)。在MATLAB窗口輸入命令:》fdatool

有些東西并不一定按照我這么選,比如FIR濾波器的種類(Window,Hamming),選其余的應(yīng)該沒什么大問題。主要是要保證截止頻率,我設(shè)的是20K,因為要求調(diào)制信號的頻率是1~10K,我稍微設(shè)高了一點。采樣頻率的話最少比載波頻率大2倍(采樣定理)我設(shè)的100M


還要進行量化后才能導(dǎo)出COE文件。如下

選擇Fixed-point后可能要等幾秒鐘。稍微等一會。量化完后就可以導(dǎo)出了,就是點Targets里的選項,就不給圖了


fir IP核第二,第三個設(shè)置窗口基本上不用改什么。下面的Input Sampling Frequency最好不要太大。我設(shè)成100時,程序運行好久都運行不完,太慢。

fir IP核設(shè)置完后,基本就沒什么說的了。直接給程序吧,對照著前面的原理看,看懂應(yīng)該不是問題。

五、程序

代碼的話,先直接全部貼上來吧,還是比較簡單的,不像我最開始從網(wǎng)上看到的一個,各種各樣的模塊疊加在一起。一些注意點講解在后面。

wire [23:0] modulate_con=1679;//用vio輸入時,將下面的vio代碼激活,并且要這幾個變量不能賦初值(carrier_con,modulate_con,depth)

wire [3:0] depth= 9;

//    vio_0 vio_instance_name (

//      .clk(sysclk),                // input wire clk

//      .probe_in0(AM_out),    // input wire [22 : 0] AM signal

//      .probe_out0(depth),  // output wire [3 : 0] shen to control the depth of modulation

//      .probe_out1(carrier_con),  // output wire [15 : 0] carrier_con to control the frequence of carrier signal

//      .probe_out2(modulate_con)  // output wire [15 : 0] modulate_con to control the frequence of modulate signal

//    );

還有仿真模塊的頂層文件,就幾行。

六、注意事項

從最容易出現(xiàn)的錯誤開始說吧

1、fir iP核

在從U盤里往電腦里拷程序時一定會出現(xiàn)錯誤的,首先要把fir IP核的COE文件再導(dǎo)一遍。如果還是報錯的話要把以前的coe文件刪掉。就是下面紅色的文件

2.DDS的設(shè)置


前面沒怎么說DDS的事,比較簡單嘛。就是調(diào)系統(tǒng)的ip核,改一下頻率控制字的位寬和輸出位寬,其余的基本上不用改。計算輸出信號的頻率:100M/2^24是頻率分辨率,再用它乘以頻率控制字就是輸出信號的頻率了。程序前面的modulate_con,,carrier_con就是這樣算的,分別是10K,1M。


需要注意的是,當DDS的頻率控制字的位寬太小時,輸出的AM信號可能會失真的,這時只要把位寬改大點就好。我最開始調(diào)制信號dds的位寬設(shè)定16位,出來的就是失真AM信號。改完dds位寬后,不要忘了改前面定義的wire modulate_con的位寬。他們是對應(yīng)的。


3.截位


由于最后要求輸出的是8位的解調(diào)信號,而通過fir IP 核濾波后的輸出信號遠遠大于8位,所以這里就有一個截位的問題。截位其實是通過看仿真圖來覺定截哪幾位的。

可以看到39到35位都是0,所以就從第34位開始往下截取8位嘛。要注意的是,我們這樣截的話,連符號位也截去了,但符號位一直是0。所以在觀察最后解調(diào)出來的信號的波形時,要設(shè)為無符號數(shù)來觀察。


最后放一張完整的圖

最后,這個程序同學(xué)也在硬件板子上試過的沒有問題的。把那個VIO,和前面的幾個變量(carrier_con,modulate_con,depth)的初始化去掉。綜合生成bit流,導(dǎo)入板子。完工~


又想了一下,在網(wǎng)上查了一下包絡(luò)解調(diào)的定義:


包絡(luò)解調(diào)又稱包絡(luò)檢波,適用于普通調(diào)幅信號的解調(diào),指產(chǎn)生的輸出信號與已調(diào)信號包絡(luò)線成正比的幅度解調(diào)。



本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉