MAAB設(shè)計(jì)FPGA實(shí)現(xiàn)聯(lián)合ISE和Modelsim仿真的FIR濾波器設(shè)計(jì)_第1頁(yè)
MAAB設(shè)計(jì)FPGA實(shí)現(xiàn)聯(lián)合ISE和Modelsim仿真的FIR濾波器設(shè)計(jì)_第2頁(yè)
MAAB設(shè)計(jì)FPGA實(shí)現(xiàn)聯(lián)合ISE和Modelsim仿真的FIR濾波器設(shè)計(jì)_第3頁(yè)
MAAB設(shè)計(jì)FPGA實(shí)現(xiàn)聯(lián)合ISE和Modelsim仿真的FIR濾波器設(shè)計(jì)_第4頁(yè)
MAAB設(shè)計(jì)FPGA實(shí)現(xiàn)聯(lián)合ISE和Modelsim仿真的FIR濾波器設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、MATLAB設(shè)計(jì),F(xiàn)PGA實(shí)現(xiàn),聯(lián)合ISE和Modelsim仿真的FIR濾波器設(shè)計(jì)摘要:本文首先利用MATLA滬生兩個(gè)頻率不一樣的正弦信號(hào),并將這兩個(gè)正弦信號(hào)相加,得到一個(gè)混疊的波形;然后利用MATLAB設(shè)計(jì)一個(gè)FIR低通濾 波器,并由Verilog實(shí)現(xiàn),聯(lián)合ISE和Modelsim仿真,實(shí)現(xiàn)濾除頻率較 高的信號(hào),并將濾波后的數(shù)據(jù)送到MATLAB分析。本文首先介紹FIR濾波器的基本原理,然后從目前最流行的的設(shè)計(jì)方式入手,逐步介紹FIR濾波器的設(shè)計(jì),其流程圖如圖1所示:圖1FIR濾波器的基本原理:數(shù)字濾波器是從分析信號(hào)中提取用戶需要的信息,濾去不需要的信號(hào)成分或者干擾成分。數(shù)字濾波器的數(shù)學(xué)模型:

2、線性時(shí)不變數(shù)字濾波器的數(shù)學(xué)模型在時(shí)域中可以用線性常系數(shù)差分方程給出:其等效的Z變換為:PqgzN1 dkgzk 1當(dāng)dk全為o時(shí),Z域系統(tǒng)函數(shù)只有零點(diǎn),數(shù)字濾波器的單位脈沖響應(yīng)有限, 通常這用濾波器被稱為有限沖激響應(yīng)(FIR)濾波器。它的輸出只與當(dāng)前的輸入 和過(guò)去的輸入有關(guān),跟過(guò)去的輸出無(wú)關(guān)。 FIR濾波器的一個(gè)重要特性是具有線性相位,即系統(tǒng)的相異和頻率成正比,可達(dá)到無(wú)失真?zhèn)鬏?。更加詳?xì)的介紹 FIR 濾波器的理論算法知識(shí),請(qǐng)參考別的先關(guān)書(shū)籍資料、 二、 FIR 濾波器的設(shè)計(jì)及驗(yàn)證:1) 由MATLA產(chǎn)生FIR濾波器的輸入數(shù)據(jù),并存放到.txt文件中用MATLAB生兩個(gè)頻率分別為:0.5MHz

3、和2MHz的正弦信號(hào),并將這兩個(gè)正弦信號(hào)疊加,得到一個(gè)混疊的信號(hào),并將這個(gè)混疊信號(hào)的波形數(shù)據(jù)存放到C盤(pán)根目錄下面的 matlab_wave_data.txt文件中。MATLAB現(xiàn)代碼如下:clear all;fs = 25000000; % 25M 采樣率t = 0:1/fs:0.0002; % 共 0.0002 * 25000000 = 5000 個(gè)點(diǎn)f1 = 500000;f2 = 2000000;signal1 = sin(2*pi*f1*t); %頻率為 0.5MHz 的正弦信號(hào)signal2 = sin(2*pi*f2*t); %頻率為 2.0MHz 的正弦信% 由于正、余弦波形的值

4、在 0,1 之間,需要量化成 16bit, 先將數(shù)值放大y2 = fix(16384 + (2A14 - 1) * sig nail); %量化到 15bit量化到 15bity3 = fix(16384 + (2八14 - 1) * sig nal2); %y1 = y2 + y3; % 量化到 16bit % 再將放大的浮點(diǎn)值量化,并寫(xiě)道到存放在 C 盤(pán)的文本中fid = fopen('c:/matlab_wave_data.txt', 'wt');fprintf(fid, '%xn', y1); %以 16 進(jìn)制的格式將數(shù)據(jù)存放到 .txt

5、 文件中。如果不用 16 進(jìn)制,后面% 讀數(shù)會(huì)出錯(cuò)。fclose(fid);plot(y2, 'b');hold on;plot(y3, 'b');hold on;plot(y1, 'r');legend('0.5MHz 正弦 ','2MHz 正弦 ',' 兩者疊加 ');title('MATLAB 產(chǎn)生的兩個(gè)正弦信號(hào)的疊加波形 ');信號(hào)波形圖如圖 2 所示:存放數(shù)據(jù)的文件路徑、名稱已經(jīng)文本的內(nèi)容如圖 3 所示:圖3用MATLAB讀C盤(pán)根目錄下的 matlab_wave_data.

6、txt 文件,驗(yàn)證存入的波形數(shù) 據(jù)是否正確,MATLA代碼如下:fid = fopen('c:/matlab_wave_data.txt','r');for i = 1 : 5001;% 一共有 5001 個(gè)數(shù)據(jù)num(i) = fscanf(fid, '%x', 1);%從 fid 所指的文件中,以 16 進(jìn)制的方式讀出一個(gè)數(shù)據(jù)endfclose(fid);figure(2);plot(num,'b');legend('MATLAB 從 txt 文件中讀出的原始疊加波形數(shù)據(jù) ');title('直接回讀M

7、ATLAB生的兩個(gè)正弦信號(hào)的疊加波形');顯示的波形如圖 4 所示:圖4對(duì)比圖 4 和圖 2 中的疊加波形,可知以上操作的正確性。2) 用MATLABS計(jì)FIR濾波器輸入信號(hào)是頻率別為 0.5MHz和2MHz的正弦信號(hào)的疊加,我們的任務(wù)是設(shè)計(jì)一 個(gè)低通濾波器濾除掉2MHz的干擾信號(hào)。因此,我們可以設(shè)計(jì)一個(gè)采樣率為25MHz的低通濾波器,其通帶帶寬為 1MHz阻帶寬度為2MHz通帶內(nèi)紋波抖動(dòng)為1dB,阻帶 下降為 80dB。在MATLAB的命令窗口輸入:fdatool 命令并回車,打幵 FDATool工具箱,用MATLAB勺FDATool工具設(shè)計(jì)該濾波器,參數(shù)設(shè)置如圖5所示:設(shè)計(jì)好參數(shù)后

8、,點(diǎn)擊 DesignFilter ,可以在FDATool窗口的左上角看到濾波器 的階數(shù)為 63 階,點(diǎn)擊 File ?Generate M-file ,并將濾波器命名為 mylowfilter 。圖5編寫(xiě)如下代碼,濾除混疊信號(hào)中的高頻信號(hào)。Hd = mylowfilter; %濾波器名稱output = filter(Hd, y1); %對(duì)疊加信號(hào) y ,進(jìn)行濾波處理figure(3);plot(y2, 'k');hold on;plot(output, 'r');legend('0.5MHz 原始信號(hào) ',' 濾波后取出的信號(hào) '

9、;);title('信號(hào)通過(guò)MTALAB勺低通濾波器后的波形');濾波后的波形如圖 6 所示:圖6生成 .coe 文件,用于 Xilinx 的 IPCore 設(shè)計(jì)濾波器, FDATool 窗口點(diǎn)擊 File ?Export ,保持默認(rèn)設(shè)置,點(diǎn)擊 Export即可,次數(shù)在 MATLAB勺workspace 窗口多出一個(gè)Num的1*64的數(shù)組,這就是濾波器的系數(shù),如圖 7所示:圖7由于MATLA生成的濾波器系數(shù)全是一些小數(shù),而FPGA只能處理整數(shù),因此我們必須將這些小數(shù)擴(kuò)大一定的倍數(shù),使它們變成整數(shù)。在MATLAB勺命令窗口輸入下面的一段代碼然后按Enter,即可將上面這些系數(shù)變?yōu)?/p>

10、整數(shù),注意這里的 *32767 ,表示將系數(shù)擴(kuò)大 32767 倍,這里的擴(kuò)大倍數(shù)只能選2AN,目的是為了后面濾波后的波形數(shù)據(jù)的高位截取(丟掉低位,即除以2AN)0返回ans=0,表示操作正確。coeff=round(Num/max(abs(Num)*32767);% abs() 求絕對(duì)值, max() 求最大值, round() 四舍五入fid = fopen('e:/fircoe.txt','wt'); %將濾波器系數(shù)寫(xiě)入文件件中fprintf(fid,'%16.0fn',coeff);% 將濾波器系數(shù)以 16 位浮點(diǎn)數(shù)的格式保存fclose(

11、fid)程序運(yùn)行的結(jié)果如圖 8 所示:圖8將文件的格式改為 .coe 格式,在文件的開(kāi)口加上:radix = 10;coefdata =在每個(gè)數(shù)字前的空格處加一個(gè)逗號(hào)“ , ”,并在最后一個(gè)數(shù)字后面加上分號(hào)“ 如圖 9 所示:圖9這樣就產(chǎn)生了可供 FIR 濾波器的 IPCore 可調(diào)用的 .coe 文件。3) 用Verilog編程讀取MATLA產(chǎn)生的波形數(shù)據(jù)通過(guò)Verilog 的$readmemh()函數(shù)即可讀出.txt文件中的數(shù)據(jù)(這里的數(shù)據(jù)是以 16 進(jìn)制形式存儲(chǔ)的) ,具體用法如下:reg 15 :0 data_in0:2000; /定義一個(gè) 16bit * 2001 的數(shù)組initia

12、l begin讀出 MATLA產(chǎn)生的波形數(shù)據(jù) 0.5MHz_sin + 4MHz_sin 信號(hào)$readmemh("c:/matlab_wave_data.txt", data_in);/ 將 matlab_wave_data.txt 中的數(shù)據(jù)讀入存儲(chǔ)器 data_inEnd我在modelsim中嘗試用readmemh來(lái)讀取matlab生成的數(shù)據(jù),但是一旦到了負(fù)數(shù)的地方就出現(xiàn)問(wèn)題了,之后的所有數(shù)據(jù)都變成了xxxxx,因此我在用MATLAE產(chǎn)生波形數(shù)據(jù)時(shí)都給正弦信號(hào)添加了一個(gè)偏移量,將正弦信號(hào)平移到了 0之上。用 Modelsim 仿真工具可以看到讀出的數(shù)據(jù),并與原文件數(shù)據(jù)(

13、圖3)比較,可以判斷讀出的數(shù)據(jù)是否正確,這里是ISE和Modelsim聯(lián)合仿真的結(jié)果,如圖10所示:圖 104)由Xilinx 的FIR的IPCore實(shí)現(xiàn)FIR濾波器FIR 的 IPCore 的生成步驟就不多說(shuō)了,簡(jiǎn)單的說(shuō)一下參數(shù)配置情況:a)我們使用由MATLABt成的.coe文件導(dǎo)入濾波器的系數(shù)。b)輸入信號(hào)的采樣頻率為 25MHz這里必須和MATLA曠生的波形數(shù)據(jù)的采樣頻率保持一致。c)FIR濾波器的運(yùn)行時(shí)鐘,這里我們選擇 250MHz這里必須和仿真文件里給的時(shí)鐘保持一致16bit ,因?yàn)閐) 輸入數(shù)據(jù)的類型,我們這里選擇了無(wú)符號(hào)數(shù),輸入數(shù)據(jù)位寬為modelsim 不能讀出負(fù)數(shù)要么用補(bǔ)碼

14、,要么加偏移)。如圖 11、圖 12 所示:圖 11圖 12FIR 的 IPCore 的列化如下:FIR16_IP FIR16_IP_ins (.clk(clk), / input clk.rfd(rfd), / output rfd在其上升沿將輸入數(shù)據(jù)加載到濾波器內(nèi)核中.rdy(rdy), / output rdy在其上升沿輸出濾波器的計(jì)算結(jié)果特別注意這個(gè)數(shù)據(jù)位寬.din(data_in_reg), / input 15 : 0 din.dout(dout); / output 35 : 0 dout我們主要對(duì)其進(jìn)行簡(jiǎn)單的控制: 在 rfd 上升沿將輸入數(shù)據(jù)加載到濾波器內(nèi)核中, 在 rdy

15、上升沿輸出濾波器的計(jì)算結(jié)果。具體的 Verilog 代碼如下:always (posedge clk) beginif(reset = 1'b0) begin<=1'b0;endendm <= 1'b0;data_in_reg <= 16'h0000;end else beginrfd_1q <=rfd;rfd_2q <=rfd_1q;endendif(rfd_1q & rfd) begin/ rfd 信號(hào)的上升沿將輸入數(shù)據(jù)加載到濾波器內(nèi)核中endenddata_in_reg <= data_ini;i <= i

16、 + 1;m <= m;if(i = 2002)i <= 0;endendendendend always (posedge clk) beginif(reset = 1'b0) beginData_out_reg <= 0;j <= 0;n <= 0;endelse beginrdy_1q <= rdy;rdy_2q <= rdy_1q;if(rdy_1q & rdy) beginData_out_reg <= dout;j <= j + 1'b1;n <= n;endendend這里還做了一個(gè)附加功能, 將

17、 FIR 濾波器的輸入數(shù)據(jù)存放到一個(gè) .txt 文件當(dāng)中, 然后用MATLABfc讀取這個(gè)波形文件數(shù)據(jù),看看讀出的波形是否和原來(lái)的混疊波形一 樣。具體的Verilog和MATLA代碼如下:integerwr_file;initialwr_file = $fopen("c:/FIR_in_data.txt");always ( m ) beginif(reset = 1'b1) begin$fdisplay(wr_file,"%h", data_in_reg);/ 33bit數(shù)if(j = 11'd2002) /共寫(xiě)入 2001個(gè)數(shù)據(jù)$st

18、op;endendfid = fopen('c:/FIR_in_data.txt','r');for j = 1 : 2000;num1(j) = fscanf(fid, '%x', 1);%這句話的意思是從 fid 所指的文件以 16 進(jìn)制方式讀出一個(gè)數(shù)據(jù)。end fclose(fid);figure(4);plot(num1,'r');legend('Verilog 讀出的 txt 文件中的數(shù)據(jù) ');title('FIR 濾波器的輸入數(shù)據(jù) ');MATLAB 讀出的波形數(shù)據(jù)如圖 13 所示:圖

19、 13面就將5) 將 FIR 濾波器的輸出存入 .txt 文件中有上面的步驟我們已經(jīng)驗(yàn)證了輸入到 FIR 濾波器的數(shù)據(jù)都是正確的,F(xiàn)IR濾波器的輸出數(shù)據(jù)保存到一個(gè).txt文件當(dāng)中供MATLAB取。/ 剛剛的問(wèn)題是, matlab 讀一個(gè)數(shù)據(jù)是 32bit 的,/ 而 FIR 的輸出是 36bit 的,因此高 4bit 根本沒(méi)有讀上來(lái)。assign Data_out31:0 = Data_out_reg35:4;initialinteger w_file;w_file = $fopen("c:/FIR_out.txt");always ( n ) beginif(reset

20、= 1'b1) begin$fdisplay(w_file,"%h", Data_out31:14);/ 33bit數(shù)if(j = 11'd2002) /共寫(xiě)入 2001 個(gè)數(shù)據(jù)$stop;endend這里我也搞了好久才搞好,這里 FIR 濾波器的輸出數(shù)據(jù)位寬變成了 36bit ,而輸 入數(shù)據(jù)位寬是 16bit ,為什么數(shù)據(jù)會(huì)變大幾萬(wàn)倍呢?因?yàn)槲覀冊(cè)趯V波器的系數(shù)由小數(shù)變成整數(shù)的時(shí)候,對(duì)這些系數(shù)整體擴(kuò)大了32767 倍,再做了一個(gè)四舍五入(影響濾波器精度) ,對(duì)濾波器的系數(shù)擴(kuò)大的倍數(shù)越 大,四舍五入對(duì)精度的影響就越小,但是系數(shù)乘的倍數(shù)越大,F(xiàn)PGA在做乘加運(yùn)

21、算也就越復(fù)雜,也就越耗時(shí),越耗資源,因此我們需要找一個(gè)平衡點(diǎn)。這里為了將信號(hào)的幅度變回原始的幅度(盡可能的靠近) ,我們只能通過(guò)將低位 截取掉,截取低位相當(dāng)于對(duì)數(shù)據(jù)做除法(除 2),所以前面的濾波器系數(shù)的擴(kuò)大倍數(shù) 我們一定要用20,這樣我們?cè)谶@里還原信號(hào)幅度的時(shí)候,只需要截位就能達(dá)到目比如這里我們對(duì)濾波器的系數(shù)乘了 32767,那我們?cè)谧龀ㄟ€原波形幅度時(shí),只 需要除以 32767 即可(即截掉低 16bit )。還有一種操作方式就是我們只保留數(shù)據(jù)的 高 16bit (和輸入數(shù)據(jù)的位寬保持一致) ,這兩種方式波形的幅度也就幾倍的差距, 我還沒(méi)有完全搞懂這里,究竟怎樣才能將波形的幅度完全的還原回

22、去,還是一個(gè)值 得好好思考的問(wèn)題?另一個(gè)問(wèn)題是我的電腦是 32bit位寬的,如果我們一次性讓 MATLAB讀取36bit 的數(shù)據(jù)那么數(shù)據(jù)的高 4bit 會(huì)讀不上來(lái), 會(huì)導(dǎo)致很奇怪的波形, 我也遇到了這個(gè)問(wèn)題。 如圖 14 所示, 波形明顯可以通過(guò)一些平移拼合成一個(gè)正弦波。 通過(guò)對(duì)波形數(shù)據(jù)一個(gè) 個(gè)的分析,我找到了這個(gè)問(wèn)題。圖 14圖 15 是波形幅度發(fā)生變化的截圖:圖 156)由MATLA牘入FIR濾波器的輸出數(shù)據(jù),并分析濾波結(jié)果由MATLAB取FIR濾波器的輸出數(shù)據(jù),分析波形,具體的代碼如下:fid = fopen('c:/FIR_out.txt','r');f

23、or i = 1 : 2000;num(i) = fscanf(fid, '%x', 1);%這句話的意思是從 fid 所指的文件以 16 進(jìn)制方式讀出一個(gè)數(shù)據(jù)。endfclose(fid);figure(5);plot(num,'r');y4 = y2;hold on;plot(y4, 'k');legend(' 經(jīng)過(guò) FIR_IPCore 濾波后的數(shù)據(jù) ','0.5MHz 的原始數(shù)據(jù)放大 16384 倍');title(' 經(jīng)過(guò) FIR 濾波器的輸出數(shù)據(jù) ');波形數(shù)據(jù)如圖 16 所示:圖 16

24、三、 總結(jié)本次設(shè)計(jì)我大約耗時(shí)一周, 從 0 開(kāi)始研究 FIR 濾波器的設(shè)計(jì), 聯(lián)合了 MATLA、B ISE、Modelsim三個(gè)工具,不得不佩服 MABLABS數(shù)據(jù)分析方面強(qiáng)大的功能。本 次設(shè)計(jì)走通了 FIR 濾波器的總體設(shè)計(jì)流程, 為以后的工程實(shí)用打下了基礎(chǔ), 當(dāng)然 還有一些基本問(wèn)題,如波形幅度如何完美的還原還沒(méi)搞清楚,有待進(jìn)一步研究。 在實(shí)際工程應(yīng)用時(shí), 我們可以通過(guò)聯(lián)合 MATLA、BISE、 Modelsim 三個(gè)工具完全脫 離硬件來(lái)設(shè)計(jì)、 仿真、 驗(yàn)證 FIR 數(shù)字濾波器的性能, 肯定能夠大大的縮短設(shè)計(jì)周期,提升濾波器性能 附錄:是可以直附錄為Verilog源代碼和MATLABM代

25、碼,這些源代碼是經(jīng)過(guò)調(diào)試的, 接使用的。供大家參考。Verilog 源代碼:module FIR_Lowpass(clk,reset,Data_out);inputclk;inputreset;output31:0Data_out;reg35:0Data_out_reg;reg 10:0 i0;reg 10:0 j = 0;reg 15 :0 data_in0:2000; /定義一個(gè) 16bit * 2001 的數(shù)組reg 15:0 data_in_reg = 0;in itial beg in/讀出 MATLA產(chǎn)生的波形數(shù)據(jù) 0.5MHz_sin + 4MHz_sin 信號(hào)$readmemh

26、("c:/matlab_wave_data.txt",data_in);/將matlab_wave_data.txt 中的數(shù)據(jù)讀入存儲(chǔ)器 data_inendwirerfd;wirerdy;wire 35:0 dout;reg rfd_1q;reg rfd_2q;reg rdy_1q;reg rdy_2q;reg n = 0;reg m = 0;always (posedge clk) beginif(reset = 1'b0) begini<=1'b0;m<=1'b0;data_in_reg <= 16'h0000;end

27、else beginrfd_1q <=rfd;rfd_2q <=rfd_1q;if(rfd_1q & rfd) begin/ rfd 信號(hào)的上升沿將輸入數(shù)據(jù)加載到濾波器內(nèi)核中data_in_reg <= data_ini;i <= i + 1;m <= m;if(i = 2002)i <= 0;endend endFIR16_IP FIR16_IP_ins (.clk(clk), / input clk.rfd(rfd), / output rfd在其上升沿將輸入數(shù)據(jù)加載到濾波器內(nèi)核中.rdy(rdy), / output rdy在其上升沿輸出濾波器

28、的計(jì)算結(jié)果.din(data_in_reg), / input 15 : 0 din.dout(dout); / output 35 : 0 doutalways (posedge clk) beginif(reset = 1'b0) beginData_out_reg<=0;j<=0;n<=0;endelse beginrdy_1q <= rdy;rdy_2q <= rdy_1q;if(rdy_1q & rdy) beginData_out_reg<=dout;j<=j + 1'b1;n <= n;endendend/

29、剛剛的問(wèn)題是, matlab 讀一個(gè)數(shù)據(jù)是 32bit 的,而 FIR 的輸出是 36bit 的,因此 高 4bit 根本沒(méi)有讀上來(lái)。/ assign Data_out31:0 = Data_out_reg35:4;assign Data_out31:0 = Data_out_reg35:4; /*integer wr_file;initialwr_file = $fopen("c:/FIR_in_data.txt");always ( m ) beginif(reset = 1'b1) begin$fdisplay(wr_file,"%h",

30、data_in_reg);/ 33bit數(shù)if(j = 11'd2002) / 共寫(xiě)入 2001 個(gè)數(shù)據(jù)$stop;endend/*integer w_file;initialw_file = $fopen("c:/FIR_out.txt");always ( n ) beginif(reset = 1'b1) begin$fdisplay(w_file,"%h", Data_out31:14);/ 33bit數(shù)if(j = 11'd2002) / 共寫(xiě)入 2001 個(gè)數(shù)據(jù)$stop;end endendmoduleMATLAB源

31、代碼%*MATLAB 產(chǎn) 生 信 號(hào) 并 保 存 到 .txt文 件 中*clear all;fs = 25000000; % 25M 采樣率t = 0:1/fs:0.0002;% 共 0.0002 * 25000000 = 5000 個(gè)點(diǎn) f1 = 500000;f2 = 2000000;signal1 = sin(2*pi*f1*t); %頻率為 0.5MHz 的正弦信號(hào)signal2 = sin(2*pi*f2*t); %頻率為 4.0MHz 的正弦信號(hào)%y1 = signal1 + signal2; %兩個(gè)正弦信號(hào)疊加%x = linspace(0, 12.56, 2048); %在區(qū)

32、間 0,6.28 = 2*pi之間等間隔的取 1024個(gè)點(diǎn)I 八、%y1 = sin(x); % 計(jì)算相應(yīng)的余弦值% 由于正、余弦波形的值在 0,1 之間,需要量化成 16bit, 先將數(shù)值放大%y1 = y1 * 32768; % 32 * 1024 = 32768 %y1 = y1 * 16384; % 32 * 1024 = 32768%y1 = y1 + 32768;y2 = fix(16384 + (2A14 - 1) * sig nail);y3 = fix(16384 + (2八14 - 1) * sig nal2);y1 = y2 + y3;% 再將放大的浮點(diǎn)值量化,并寫(xiě)道到存

33、放在C 盤(pán)的文本中fid = fopen('c:/matlab_wave_data.txt', 'wt');%fprintf(fid, '%16.0fn',y1);% 在 寫(xiě) 文 件 時(shí)量 化 為 16bit 的定 點(diǎn) 實(shí)數(shù)【%16.0f,16.0 表示 16bit 定點(diǎn)數(shù), f 表示實(shí)數(shù)】,范圍是: -32768 - 32767fprintf(fid, '%xn', y1); %在寫(xiě)文件時(shí)量化為 16bit 的定點(diǎn)實(shí)數(shù)【 %16.0f,16.0表示 16bit 定點(diǎn)數(shù), f 表示實(shí)數(shù)】,范圍是: -32768 - 32767fc

34、lose(fid);figure(1);plot(y2, 'b');hold on;plot(y3, 'b');hold on;plot(y1, 'r');legend('0.5MHz 正弦 ','2MHz 正弦 ',' 兩者疊加 '); title('MATLAB 產(chǎn)生的兩個(gè)正弦信號(hào)的疊加波形 ')%*MATLAB 回 讀 保 存 到 .txt 文 件 中 的 信 號(hào)*fid = fopen('c:/matlab_wave_data.txt','r');for i = 1 : 5001;%num(i) = fscanf(fid, '%f', 1)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論