【技能秒get】如何使用MATLAB一键制作mif文件

这里讲解实现一个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','width=14;');%位宽
fprintf(fild,'%s','depth=16384;');%深度
fprintf(fild,'%s','address_radix=uns;');%地址格式
fprintf(fild,'%s','data_radix=hex;');%数据格式
fprintf(fild,'%s ','content');%地址
fprintf(fild,'%s','begin');%
fori= 1:n
s2(i) =round(s(i));%对小数四舍五入以取整
ifs2(i) <0%强制将负1置0,
s2(i) = 0
end
% addr : data;
fprintf(fild,' %g ',i-1);%地址,从0开始编码
fprintf(fild,'%s ',':');
fprintf(fild,'%x',s2(i));
fprintf(fild,'%s',';');
end
用户如果想自己生成其他深度和位宽的数据,只需要对应修改采样频率(fs)、采样点数(n)、直流分量(adc)和信号幅度(a)即可。
保存文件,点击运行按钮,即可生成我们所需要的正弦波数据,并在电脑的d盘根目录生成一个名为“sin14bit_16384 .mif”的文件。
随后,会弹出如下图1所示的界面,该界面便是以我们生产的数据为值,t为时间轴绘制出来的波形,从波形可知为标准的正弦波,你也可以通过放大缩小来具体查看几个顶点的值,以确定数据是否在自己预期的范围内。这里,我们直接关掉该界面即可。
下图2为使用该文件设计的dds信号发生器系统,输出频率为3.448mhz(随机设置的一个值),通过示波器的fft功能可以看到,谐波量并不大。

华为mate10什么时候上市?华为mate10最新消息:华为Mate10再次被确认,这才是华为的真正水平
寒武纪的前世今生与未来你知道吗?
影响薄膜电容器性能的原因有哪些
Tt曜越发布新款Tt G821飞行家机械键盘 可同时连接三台蓝牙设备
超宽范围输入的开关电源电路设计
【技能秒get】如何使用MATLAB一键制作mif文件
替代水浸泡水法,气密性检测仪成产品防水测试首选方案
如何使用电流检测放大器,差分放大器测量智能设备的电池充电和放电电流
新冠疫情已彻底改变了航空航天行业
PIC16F系列单片机的ADC参考电压
晶振都有哪些焊接封装方式?
QT 串口示波器的串口调试助手功能
离散/数字式传感器的常见类型、技术特点和使用技巧
openharmony怎么用
J型FM发射天线尺寸,FM ANTENNA
开关电源管理芯片可分为AC/DC和DC/DC两大类
国产机器人增长放缓 究竟哪些企业可以留到最后还未可知
如何预防PCBA焊接加工的虚焊和假焊缺陷问题呢
什么是二次设备?二次设备有哪些
基于Interbus总线在汽车工业控制系统中的应用