matlab 图片生成mif文件,使用MATLAB一鍵制作mif文件

本文档详细讲解如何使用MATLAB生成16384点14位正弦波数据的MIF文件,以用于FPGA上的DDS信号发生器。通过修改MATLAB脚本,可以方便地调整样本频率、点数、直流分量和信号幅度。最终,脚本将直接在MATLAB中创建MIF文件,无需借助额外软件。生成的波形图显示为标准正弦波,并在实际DDS实验中表现出良好的性能。
摘要由CSDN通过智能技术生成

本文檔主要講解實現一個16384(2^14)點的14位正弦波數據mif格式文件的生成,使用此文件,我們便可以在FPGA上基於直接數字合成(DDS)原理生成標准的正弦波,即實現信號發生器的功能。關於DDS原理的相關內容,請參考由北航出版社出版的《FPGA自學筆記——設計與驗證》一書第六章第6.2節—— “雙通道幅頻相可調DDS信號發生器” 一節的內容。

在很早之前,我曾編寫過一個生成1024點16位正弦波mif文件的方法,不過那時候我的matlab技術還特別特別菜(現在也很菜),只是在matlab中簡單的實現了正弦波數據的生成,關於四舍五入取整以及mif文件的最終生成,我用了excel和quartus兩個軟件經過了復雜的操作才最終完成。如今,自己都對那種方法沒有了耐心,剛好新做的一個雙通道14位高速DAC模塊在做DDS實驗時需要用到14位的mif數據,因此今天對matlab的腳本文件重新編寫了下,實現了僅通過Matlab就可以一鍵生成mif文件的功能。

首先,打開MATLAB軟件,小梅哥這里使用的版本為MATLAB 2012b。新建一個Script文件,操作為File —>New—>Script。在該文件中輸入以下內容:

F1=1; %信號的頻率

Fs=2^14;%采樣頻率

P1=0;%信號初始相位

N=2^14;%采樣點數為N

t=[0:1/Fs:(N-1)/Fs];%采樣時刻

ADC=2^13 - 1;%直流分量

A=2^13;%信號幅度

s=A*sin(2*pi*F1*t + pi*P1/180) + ADC;%生成信號

plot(s);%繪制圖形

fild = fopen('d:/sin14bit_16384.mif','wt');%創建mif文件

%寫入mif文件文件頭

fprintf(fild, '%s\n','WIDTH=14;');%位寬

fprintf(fild, '%s\n\n','DEPTH=16384;');%深度

fprintf(fild, '%s\n','ADDRESS_RADIX=UNS;');%地址格式

fprintf(fild, '%s\n\n','DATA_RADIX=HEX;');%數據格式

fprintf(fild, '%s\t','CONTENT');%地址

fprintf(fild, '%s\n','BEGIN');%

for i = 1:N

s2(i) = round(s(i)); %對小數四舍五入以取整

if s2(i) <0 %強制將負1置0,

s2(i) = 0

end

% addr : data;

fprintf(fild, '\t%g\t',i-1);%地址,從0開始編碼

fprintf(fild, '%s\t',':');

fprintf(fild, '%x',s2(i));

fprintf(fild, '%s\n',';');

end

用戶如果想自己生成其他深度和位寬的數據,只需要對應修改采樣頻率(Fs)、采樣點數(N)、直流分量(ADC)和信號幅度(A)即可。

保存文件,點擊運行按鈕,即可生成我們所需要的正弦波數據,並在電腦的D盤根目錄生成一個名為“sin14bit_16384 .mif”的文件。

4b222283fc1e753f0cb7638a5617feba.png

隨后,會彈出如下圖1所示的界面,該界面便是以我們生產的數據為值,t為時間軸繪制出來的波形,從波形可知為標准的正弦波,你也可以通過放大縮小來具體查看幾個頂點的值,以確定數據是否在自己預期的范圍內。這里,我們直接關掉該界面即可。

下圖2為使用該文件配合我們的ACM9767模塊設計的DDS信號發生器系統,輸出頻率為3.448Mhz(隨機設置的一個值),通過示波器的FFT功能可以看到,諧波量並不大。

1943d8103103980495dc93fadaac13b3.png

f0fe480da4d17af323091845bf2d7b4b.png

小梅哥

2018年3月31日星期六

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值