基于Nios的DDS高精度信號源實(shí)現(xiàn)
互聯(lián)網(wǎng)
摘要: 該設(shè)計(jì)利用Ahera公司的Cyclone FPGA,,借助Nios軟核設(shè)計(jì)的信號產(chǎn)生器,,采用兩級DDS串聯(lián).提高了信號的精度,另外提出了提高精度的動(dòng)態(tài)分頻法,。針對實(shí)際需求,,采用雙口ROM方便的實(shí)現(xiàn)了多路不同相位信號的輸出 另外介紹了Matlab與Quartus的接口程序的編寫,,借助Matlab強(qiáng)大的計(jì)算能力和畫圖功能,,為我們的設(shè)計(jì)帶來了極大的方便。實(shí)驗(yàn)結(jié)果表明該設(shè)計(jì)是行之有效的,,具有很大的實(shí)用性,。
Abstract:
Key words :
摘要:直接數(shù)字頻率合成器DDS" title="DDS">DDS具有極高的分辨率、頻率轉(zhuǎn)換速度快,、相位噪聲低等優(yōu)點(diǎn),。以ALTERA公司的CPU軟核Nios" title="Nios">Nios為基礎(chǔ),利用Quartus II軟件和Sopc Builder,,采用兩級DDS和動(dòng)態(tài)分頻法,,提高了信號源的精度。采用雙口ROM可以很方便的同時(shí)輸出兩路具有一定相位差的信號,,而且頻率幅度可調(diào)。另外著重介紹了怎樣用Matlab產(chǎn)生波形幅度數(shù)據(jù)以及最后的仿真驗(yàn)證,。
1 引言
在實(shí)際的通信過程中,,系統(tǒng)對頻率的精度和穩(wěn)定度都有較高的要求.而且常常需要用到多種不同頻率和相位的信號。傳統(tǒng)的波形發(fā)生器都是由模擬的電路實(shí)現(xiàn),,受到硬件電路的限制,,不僅產(chǎn)生的波形少,精度低,,而且體積大,。靈活性差。DDS(Direct DigitalFrequncy Synthesis,,直接數(shù)字頻率合成)的出現(xiàn)為我們提供了一種新選擇,。DDS是從相位概念出發(fā)直接合成所需要波形的一種新的頻率合成技術(shù)。由于其具有頻率轉(zhuǎn)換快,、分辨率高,、頻率合成范圍寬、相位噪聲低且相位可控制的優(yōu)點(diǎn),,因此,,DDS技術(shù)常用于產(chǎn)生頻率快、轉(zhuǎn)換速度快,、分辨率高,、相位可控的信號。目前.市場上已出現(xiàn)許多DDS專用芯片.但是專用芯片有很多局限性,,比如控制方式固定,,同時(shí)只能輸出一路信號.而且
價(jià)格普遍偏高。利用fpga的高速,、高性能和可重構(gòu)性可實(shí)現(xiàn)各種比較復(fù)雜的調(diào)頻,、調(diào)相和調(diào)幅功能,。
本文介紹設(shè)計(jì)的DDS信號源應(yīng)用ALTERA公司的FPGA器件、Quartus II開發(fā)環(huán)境和NIOS軟核等相關(guān)的開發(fā)工具,,采用VHDL語言及SOPC設(shè)計(jì)思想,。采用兩級DDS技術(shù)設(shè)計(jì)波形發(fā)生器,并且可以同時(shí)輸出多路不同相位的信號,,滿足我們實(shí)際的需求,。
2 DDS原理
基本DDS的結(jié)構(gòu)框圖如圖1所示。主要由相位累加器,、相位調(diào)制器,、ROM查找表、D/A以及低通濾波器組成,。
圖1 DDS結(jié)構(gòu)圖
頻率字和相位字分別控制輸出信號的頻率和相位,。DDS的核心是N位的相位累加器。在時(shí)鐘脈沖控制下,,相位累加器不斷對頻率控制字K進(jìn)行累加,,將累加器的輸出作為讀波形存儲(chǔ)器ROM的地址,讀出波形數(shù)據(jù),,然后再進(jìn)行調(diào)幅,、數(shù)模轉(zhuǎn)換、濾波從而得到光滑的波形信號,。在整個(gè)過程中相位累加器進(jìn)行的是線性累加,,當(dāng)累加滿時(shí)便產(chǎn)生溢出,一個(gè)周期完成,。相位累加器這個(gè)產(chǎn)生溢出的頻率就是DDS的輸出頻率,。設(shè)頻率控制字為K,相位累加器為N位,,時(shí)鐘頻率為fs,。所以合成輸出的信號頻率fout 是:
fout=(K/2N)fs
當(dāng)K=1時(shí)有最小頻率分辨率:Δf=fs/2N
3 設(shè)計(jì)方案
3.1提高精度實(shí)現(xiàn)
在我們的實(shí)際應(yīng)用中往往對頻率較小的信號精度要求較高,而對高頻率信號的精度則沒有那么高的要求,。傳統(tǒng)的方法就是增加相位累加器的位數(shù)N.但N一旦設(shè)計(jì)好便不可更改,,這樣便導(dǎo)致了產(chǎn)生的信號精度不能隨頻率的降低而升高。根據(jù)以上的分析在N不變的情況下要提高精度則只有降低時(shí)鐘fs(很顯然這時(shí)的輸出頻率較低),。下面介紹兩種降低fs的方法:
第一,,動(dòng)態(tài)分頻法。設(shè)計(jì)的信號發(fā)生器不但要能產(chǎn)生低頻信號同時(shí)也能產(chǎn)生高頻信號,,所以用固定的分頻辦法降低fs不能達(dá)到要求,,這就要求我們采用動(dòng)態(tài)分頻法。在需要產(chǎn)生較高頻率信號的時(shí)候選擇小的分頻比.而在合成低頻率信號的時(shí)候選擇大的分頻比,。根據(jù)預(yù)先給定的不同的輸出信號頻率選擇相應(yīng)的分頻比,,保證了產(chǎn)生信號的寬頻帶,。
第二,采用兩級DDS,。第一級合成DDS1產(chǎn)生一定頻率的方波并將此方波送給第二次合成DDS2作為時(shí)鐘輸入,。其中DDS1的K1可調(diào),保證輸出不同的頻率,,DDS2的K2=1,,保證了輸出的精度。本次設(shè)計(jì)采用此方法,。
3.2多路輸出設(shè)計(jì)
無論是用專用芯片還是其他設(shè)計(jì)的DDS產(chǎn)品,,同時(shí)都只能輸出一路信號,而在我們的實(shí)際應(yīng)用中往往同時(shí)需要多路相位不同的信號,,借助ALTERA公司的Cyclone" title="Cyclone">Cyclone系列器件.可以很方便的生成雙口的ROM,,這樣使得我們可以同時(shí)對ROM的不同單元尋址,從而產(chǎn)生不同相位的信號,,調(diào)節(jié)相位控制器,,可以很方便的改變兩路信號的相位差。這樣設(shè)計(jì)的DDS框圖如圖2:
圖2多路輸出DDS框圖
3.3基于Nios的DDS實(shí)現(xiàn)
系統(tǒng)的開發(fā)包括硬件和軟件兩部分,,硬件部分采用ALTERA公司性價(jià)比較高的Cyclone系列FPGA,使用SoPC Builder生成Nios嵌入式處理器,。由于本設(shè)計(jì)中要求信號幅度,、相位和頻率都可調(diào)節(jié),并且能通過LCD實(shí)時(shí)的顯示,,利用SoPC Builder生成可裁剪的Nios CPU軟核,,并添加一些外圍設(shè)備接口,如作為控制輸入的鍵盤接口:實(shí)時(shí)顯示用的LCD接口;DDS控制接口等,。系統(tǒng)硬件框圖如圖3,。
圖3 系統(tǒng)總框圖
在Cyclone的FPGA中帶了一個(gè)PLL.這樣我們便能很好的控制系統(tǒng)時(shí)鐘和DDS的時(shí)鐘.靈活地選擇晶振信號源。另外幅度調(diào)制采用一個(gè)乘法器,,運(yùn)用硬件電路搭建,,充分使用內(nèi)部的LE資源,而且方便,、靈活,,能達(dá)到速度要求。
系統(tǒng)的軟件設(shè)計(jì)主要是鍵盤掃描程序的編寫,、LCD顯示的控制接口和對DDS的控制.采用C語言編寫,。而DDS單元?jiǎng)t用VHDL硬件描述語言。PLL模塊直接使用MegaWizard Plug-in Manager功能同時(shí)產(chǎn)生兩路不同的時(shí)鐘輸出.一路給DDS,,另一路給Nios軟核,。
由于DDS的結(jié)構(gòu),,產(chǎn)生的波形由ROM查找表的數(shù)據(jù)決定,所以改變查找表中的數(shù)據(jù)便得到不同的信號輸出,,這樣可以很方便的產(chǎn)生正弦,、余弦、方波,,三角波,、鋸齒波等。在這次設(shè)計(jì)中,,要產(chǎn)生正弦和余弦信號沒必要改變查找表的數(shù)據(jù),,只需要調(diào)整相位即可,這就是多路輸出不同相位信號最大的優(yōu)點(diǎn),。
4 Matlab與Quartus接口設(shè)計(jì)
設(shè)計(jì)中需要大量的計(jì)算,,特別是ROM查找表初始化數(shù)據(jù)的產(chǎn)生,可以借助matlab強(qiáng)大的計(jì)算能力,。最后的仿真數(shù)據(jù)也可以用matlab畫圖直觀的觀察,。
4.1相位幅度變換
由于Cyclone系列的FPGA具有豐富的memory資源,本方案中選用4K的RAM Block構(gòu)成查找表,。在實(shí)際的設(shè)計(jì)中.當(dāng)我們產(chǎn)生方波的時(shí)候則可以直接采用數(shù)學(xué)計(jì)算,,沒必要構(gòu)建查找表,從而節(jié)約了資源,。而產(chǎn)生正弦或余弦信號時(shí),,考慮到正弦信號1/4波形對稱的性質(zhì).只需要存儲(chǔ)π/2的正弦采樣點(diǎn),利用數(shù)學(xué)計(jì)算便可以產(chǎn)生2π弧度的正弦波形,。這樣大大的縮小了ROM.節(jié)約了資源,。ROM的初始化數(shù)據(jù)文件為.mif
文件。生成該文件可以借助matlab數(shù)學(xué)工具,,先在matlab里生成正弦信號的采樣點(diǎn)數(shù)據(jù)表格,,還需要自己添加程序,下面舉例說明,。
先編寫一段m文件程序,,這里以產(chǎn)生216X12正弦波π/2幅度值為例。即在π/2的幅度范圍內(nèi)采樣65536個(gè)點(diǎn).每個(gè)點(diǎn)的值用12位二進(jìn)制數(shù)表示,。在matlab里編寫的m文件,, 保存的文件名為sin_data.mif。
x=0:1:65535;
y=round(2047*sin(pi*x/131072)) +2048; %pi*x/131072的范圍為0~/2
%改變131072即可改變正弦信號的長度,。2048則決定了數(shù)據(jù)寬度,。
fid=fopen('sin_data.mif','W' );
fprinf(fid,'%d:%d;\n' ,x,y);
fclose(fid);
plot(x,y);
grid on
在sin_data.mif中數(shù)據(jù)的存放格式為:
相位:幅度值;
但是這樣的數(shù)據(jù)表格在Qualtus 4.2里還不能直接調(diào)用,需要我們自己編程,,加上數(shù)據(jù)類型申明,,其格式如下:
DEPTH =65536;% Memory depth and width are required%
WIDTH = 12; % Enter a decimal number %
ADDRESS_RADIX=DEC; % Address and value radixes are required%
DATA_RADIX =DEC;% Enter BIN,DEC,,HEX,,OCT,or UNS;unless%
% otherwise specified,radixes=HEX %
--Specify values for addresses, which can be single address
or range
CONTENT
BEGIN
0:2048;
1:2048:
2:2048;
64613:4094;
64614:4095;
END;
4.2 幅度數(shù)據(jù)的matlab仿真
經(jīng)過Quartus的綜合,、波形仿真后,,可以得到.vwf波形文件。然后選擇File菜單下的Save Current Report Section As,,保存類型選擇為.tbl,。這樣便可以得到輸出波形的數(shù)字幅度序列數(shù)據(jù)。就可以借助Matlab工具方便的觀察波形,。.tbl文件的數(shù)據(jù)存儲(chǔ)格式如下:
時(shí)間>邊沿標(biāo)志 相位=幅度值;
其中時(shí)間單位默認(rèn)為ns,,邊沿標(biāo)志只有一位,其中1表示上升沿,,0表示下降沿,,地址和幅度值君采用十六進(jìn)制數(shù)表示。用Matlab進(jìn)行畫圖時(shí)需要我們自己編寫m文件程序,。我們需要從表格中提取數(shù)據(jù),,而識(shí)別幅度數(shù)據(jù)的標(biāo)志就是“=”,所以判斷“=”的位置便可將數(shù)據(jù)提取出來,。但在文件前面的說明中有兩個(gè)“=”,,這是我們不需要的,所以編程的時(shí)候應(yīng)該濾除,。在這里假設(shè).tbl文件保存路徑為:C:\altera\benben\sin.sim.tbl。m文件如下:
fid=fopen('C:\altera\henben\sin.sim.tbl,'r');
yy=fscanf(fid,'%s')
fclose(fid);
aa=fid(yy=='='); %找出“=”的下標(biāo)
i=0:
for j=1:length(aa)
if yy(aa(j)-1)<='F' %濾除說明中的“=”
i=i+l;
data_hex(i,1)=yy(aa(j)+1);data_hex(i,2)=yy(aa(i)+2);data_hex(i,
3)=yy(aa(j))+3);
%取出幅度數(shù)據(jù)值.?dāng)?shù)據(jù)為十六進(jìn)制數(shù)
end
end
data_dec=hex2dec(data_hex);%將十六進(jìn)制數(shù)轉(zhuǎn)為十進(jìn)制數(shù)
plot(data_dec);
grid on
5 結(jié)論
該設(shè)計(jì)利用Ahera公司的Cyclone FPGA,,借助Nios軟核設(shè)計(jì)的信號產(chǎn)生器" title="信號產(chǎn)生器">信號產(chǎn)生器,,采用兩級DDS串聯(lián).提高了信號的精度,另外提出了提高精度的動(dòng)態(tài)分頻法,。針對實(shí)際需求,,采用雙口ROM方便的實(shí)現(xiàn)了多路不同相位信號的輸出 另外介紹了Matlab與Quartus的接口程序的編寫,借助Matlab強(qiáng)大的計(jì)算能力和畫圖功能,,為我們的設(shè)計(jì)帶來了極大的方便,。實(shí)驗(yàn)結(jié)果表明該設(shè)計(jì)是行之有效的,具有很大的實(shí)用性,。
1 引言
在實(shí)際的通信過程中,,系統(tǒng)對頻率的精度和穩(wěn)定度都有較高的要求.而且常常需要用到多種不同頻率和相位的信號。傳統(tǒng)的波形發(fā)生器都是由模擬的電路實(shí)現(xiàn),,受到硬件電路的限制,,不僅產(chǎn)生的波形少,精度低,,而且體積大,。靈活性差。DDS(Direct DigitalFrequncy Synthesis,,直接數(shù)字頻率合成)的出現(xiàn)為我們提供了一種新選擇,。DDS是從相位概念出發(fā)直接合成所需要波形的一種新的頻率合成技術(shù)。由于其具有頻率轉(zhuǎn)換快,、分辨率高,、頻率合成范圍寬、相位噪聲低且相位可控制的優(yōu)點(diǎn),,因此,,DDS技術(shù)常用于產(chǎn)生頻率快、轉(zhuǎn)換速度快,、分辨率高,、相位可控的信號。目前.市場上已出現(xiàn)許多DDS專用芯片.但是專用芯片有很多局限性,,比如控制方式固定,,同時(shí)只能輸出一路信號.而且
價(jià)格普遍偏高。利用fpga的高速,、高性能和可重構(gòu)性可實(shí)現(xiàn)各種比較復(fù)雜的調(diào)頻,、調(diào)相和調(diào)幅功能,。
本文介紹設(shè)計(jì)的DDS信號源應(yīng)用ALTERA公司的FPGA器件、Quartus II開發(fā)環(huán)境和NIOS軟核等相關(guān)的開發(fā)工具,,采用VHDL語言及SOPC設(shè)計(jì)思想,。采用兩級DDS技術(shù)設(shè)計(jì)波形發(fā)生器,并且可以同時(shí)輸出多路不同相位的信號,,滿足我們實(shí)際的需求,。
2 DDS原理
基本DDS的結(jié)構(gòu)框圖如圖1所示。主要由相位累加器,、相位調(diào)制器,、ROM查找表、D/A以及低通濾波器組成,。
頻率字和相位字分別控制輸出信號的頻率和相位,。DDS的核心是N位的相位累加器。在時(shí)鐘脈沖控制下,,相位累加器不斷對頻率控制字K進(jìn)行累加,,將累加器的輸出作為讀波形存儲(chǔ)器ROM的地址,讀出波形數(shù)據(jù),,然后再進(jìn)行調(diào)幅,、數(shù)模轉(zhuǎn)換、濾波從而得到光滑的波形信號,。在整個(gè)過程中相位累加器進(jìn)行的是線性累加,,當(dāng)累加滿時(shí)便產(chǎn)生溢出,一個(gè)周期完成,。相位累加器這個(gè)產(chǎn)生溢出的頻率就是DDS的輸出頻率,。設(shè)頻率控制字為K,相位累加器為N位,,時(shí)鐘頻率為fs,。所以合成輸出的信號頻率fout 是:
fout=(K/2N)fs
當(dāng)K=1時(shí)有最小頻率分辨率:Δf=fs/2N
3 設(shè)計(jì)方案
3.1提高精度實(shí)現(xiàn)
在我們的實(shí)際應(yīng)用中往往對頻率較小的信號精度要求較高,而對高頻率信號的精度則沒有那么高的要求,。傳統(tǒng)的方法就是增加相位累加器的位數(shù)N.但N一旦設(shè)計(jì)好便不可更改,,這樣便導(dǎo)致了產(chǎn)生的信號精度不能隨頻率的降低而升高。根據(jù)以上的分析在N不變的情況下要提高精度則只有降低時(shí)鐘fs(很顯然這時(shí)的輸出頻率較低),。下面介紹兩種降低fs的方法:
第一,,動(dòng)態(tài)分頻法。設(shè)計(jì)的信號發(fā)生器不但要能產(chǎn)生低頻信號同時(shí)也能產(chǎn)生高頻信號,,所以用固定的分頻辦法降低fs不能達(dá)到要求,,這就要求我們采用動(dòng)態(tài)分頻法。在需要產(chǎn)生較高頻率信號的時(shí)候選擇小的分頻比.而在合成低頻率信號的時(shí)候選擇大的分頻比,。根據(jù)預(yù)先給定的不同的輸出信號頻率選擇相應(yīng)的分頻比,,保證了產(chǎn)生信號的寬頻帶,。
第二,采用兩級DDS,。第一級合成DDS1產(chǎn)生一定頻率的方波并將此方波送給第二次合成DDS2作為時(shí)鐘輸入,。其中DDS1的K1可調(diào),保證輸出不同的頻率,,DDS2的K2=1,,保證了輸出的精度。本次設(shè)計(jì)采用此方法,。
3.2多路輸出設(shè)計(jì)
無論是用專用芯片還是其他設(shè)計(jì)的DDS產(chǎn)品,,同時(shí)都只能輸出一路信號,而在我們的實(shí)際應(yīng)用中往往同時(shí)需要多路相位不同的信號,,借助ALTERA公司的Cyclone" title="Cyclone">Cyclone系列器件.可以很方便的生成雙口的ROM,,這樣使得我們可以同時(shí)對ROM的不同單元尋址,從而產(chǎn)生不同相位的信號,,調(diào)節(jié)相位控制器,,可以很方便的改變兩路信號的相位差。這樣設(shè)計(jì)的DDS框圖如圖2:
3.3基于Nios的DDS實(shí)現(xiàn)
系統(tǒng)的開發(fā)包括硬件和軟件兩部分,,硬件部分采用ALTERA公司性價(jià)比較高的Cyclone系列FPGA,使用SoPC Builder生成Nios嵌入式處理器,。由于本設(shè)計(jì)中要求信號幅度,、相位和頻率都可調(diào)節(jié),并且能通過LCD實(shí)時(shí)的顯示,,利用SoPC Builder生成可裁剪的Nios CPU軟核,,并添加一些外圍設(shè)備接口,如作為控制輸入的鍵盤接口:實(shí)時(shí)顯示用的LCD接口;DDS控制接口等,。系統(tǒng)硬件框圖如圖3,。
在Cyclone的FPGA中帶了一個(gè)PLL.這樣我們便能很好的控制系統(tǒng)時(shí)鐘和DDS的時(shí)鐘.靈活地選擇晶振信號源。另外幅度調(diào)制采用一個(gè)乘法器,,運(yùn)用硬件電路搭建,,充分使用內(nèi)部的LE資源,而且方便,、靈活,,能達(dá)到速度要求。
系統(tǒng)的軟件設(shè)計(jì)主要是鍵盤掃描程序的編寫,、LCD顯示的控制接口和對DDS的控制.采用C語言編寫,。而DDS單元?jiǎng)t用VHDL硬件描述語言。PLL模塊直接使用MegaWizard Plug-in Manager功能同時(shí)產(chǎn)生兩路不同的時(shí)鐘輸出.一路給DDS,,另一路給Nios軟核,。
由于DDS的結(jié)構(gòu),,產(chǎn)生的波形由ROM查找表的數(shù)據(jù)決定,所以改變查找表中的數(shù)據(jù)便得到不同的信號輸出,,這樣可以很方便的產(chǎn)生正弦,、余弦、方波,,三角波,、鋸齒波等。在這次設(shè)計(jì)中,,要產(chǎn)生正弦和余弦信號沒必要改變查找表的數(shù)據(jù),,只需要調(diào)整相位即可,這就是多路輸出不同相位信號最大的優(yōu)點(diǎn),。
4 Matlab與Quartus接口設(shè)計(jì)
設(shè)計(jì)中需要大量的計(jì)算,,特別是ROM查找表初始化數(shù)據(jù)的產(chǎn)生,可以借助matlab強(qiáng)大的計(jì)算能力,。最后的仿真數(shù)據(jù)也可以用matlab畫圖直觀的觀察,。
4.1相位幅度變換
由于Cyclone系列的FPGA具有豐富的memory資源,本方案中選用4K的RAM Block構(gòu)成查找表,。在實(shí)際的設(shè)計(jì)中.當(dāng)我們產(chǎn)生方波的時(shí)候則可以直接采用數(shù)學(xué)計(jì)算,,沒必要構(gòu)建查找表,從而節(jié)約了資源,。而產(chǎn)生正弦或余弦信號時(shí),,考慮到正弦信號1/4波形對稱的性質(zhì).只需要存儲(chǔ)π/2的正弦采樣點(diǎn),利用數(shù)學(xué)計(jì)算便可以產(chǎn)生2π弧度的正弦波形,。這樣大大的縮小了ROM.節(jié)約了資源,。ROM的初始化數(shù)據(jù)文件為.mif
文件。生成該文件可以借助matlab數(shù)學(xué)工具,,先在matlab里生成正弦信號的采樣點(diǎn)數(shù)據(jù)表格,,還需要自己添加程序,下面舉例說明,。
先編寫一段m文件程序,,這里以產(chǎn)生216X12正弦波π/2幅度值為例。即在π/2的幅度范圍內(nèi)采樣65536個(gè)點(diǎn).每個(gè)點(diǎn)的值用12位二進(jìn)制數(shù)表示,。在matlab里編寫的m文件,, 保存的文件名為sin_data.mif。
x=0:1:65535;
y=round(2047*sin(pi*x/131072)) +2048; %pi*x/131072的范圍為0~/2
%改變131072即可改變正弦信號的長度,。2048則決定了數(shù)據(jù)寬度,。
fid=fopen('sin_data.mif','W' );
fprinf(fid,'%d:%d;\n' ,x,y);
fclose(fid);
plot(x,y);
grid on
在sin_data.mif中數(shù)據(jù)的存放格式為:
相位:幅度值;
但是這樣的數(shù)據(jù)表格在Qualtus 4.2里還不能直接調(diào)用,需要我們自己編程,,加上數(shù)據(jù)類型申明,,其格式如下:
DEPTH =65536;% Memory depth and width are required%
WIDTH = 12; % Enter a decimal number %
ADDRESS_RADIX=DEC; % Address and value radixes are required%
DATA_RADIX =DEC;% Enter BIN,DEC,,HEX,,OCT,or UNS;unless%
% otherwise specified,radixes=HEX %
--Specify values for addresses, which can be single address
or range
CONTENT
BEGIN
0:2048;
1:2048:
2:2048;
64613:4094;
64614:4095;
END;
4.2 幅度數(shù)據(jù)的matlab仿真
經(jīng)過Quartus的綜合,、波形仿真后,,可以得到.vwf波形文件。然后選擇File菜單下的Save Current Report Section As,,保存類型選擇為.tbl,。這樣便可以得到輸出波形的數(shù)字幅度序列數(shù)據(jù)。就可以借助Matlab工具方便的觀察波形,。.tbl文件的數(shù)據(jù)存儲(chǔ)格式如下:
時(shí)間>邊沿標(biāo)志 相位=幅度值;
其中時(shí)間單位默認(rèn)為ns,,邊沿標(biāo)志只有一位,其中1表示上升沿,,0表示下降沿,,地址和幅度值君采用十六進(jìn)制數(shù)表示。用Matlab進(jìn)行畫圖時(shí)需要我們自己編寫m文件程序,。我們需要從表格中提取數(shù)據(jù),,而識(shí)別幅度數(shù)據(jù)的標(biāo)志就是“=”,所以判斷“=”的位置便可將數(shù)據(jù)提取出來,。但在文件前面的說明中有兩個(gè)“=”,,這是我們不需要的,所以編程的時(shí)候應(yīng)該濾除,。在這里假設(shè).tbl文件保存路徑為:C:\altera\benben\sin.sim.tbl。m文件如下:
fid=fopen('C:\altera\henben\sin.sim.tbl,'r');
yy=fscanf(fid,'%s')
fclose(fid);
aa=fid(yy=='='); %找出“=”的下標(biāo)
i=0:
for j=1:length(aa)
if yy(aa(j)-1)<='F' %濾除說明中的“=”
i=i+l;
data_hex(i,1)=yy(aa(j)+1);data_hex(i,2)=yy(aa(i)+2);data_hex(i,
3)=yy(aa(j))+3);
%取出幅度數(shù)據(jù)值.?dāng)?shù)據(jù)為十六進(jìn)制數(shù)
end
end
data_dec=hex2dec(data_hex);%將十六進(jìn)制數(shù)轉(zhuǎn)為十進(jìn)制數(shù)
plot(data_dec);
grid on
5 結(jié)論
該設(shè)計(jì)利用Ahera公司的Cyclone FPGA,,借助Nios軟核設(shè)計(jì)的信號產(chǎn)生器" title="信號產(chǎn)生器">信號產(chǎn)生器,,采用兩級DDS串聯(lián).提高了信號的精度,另外提出了提高精度的動(dòng)態(tài)分頻法,。針對實(shí)際需求,,采用雙口ROM方便的實(shí)現(xiàn)了多路不同相位信號的輸出 另外介紹了Matlab與Quartus的接口程序的編寫,借助Matlab強(qiáng)大的計(jì)算能力和畫圖功能,,為我們的設(shè)計(jì)帶來了極大的方便,。實(shí)驗(yàn)結(jié)果表明該設(shè)計(jì)是行之有效的,具有很大的實(shí)用性,。
此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載。