zoukankan      html  css  js  c++  java
  • 使用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');%
    for i = 1:N
        s2(i) = round(s(i));    %对小数四舍五入以取整
        if s2(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为使用该文件配合我们的ACM9767模块设计的DDS信号发生器系统,输出频率为3.448Mhz(随机设置的一个值),通过示波器的FFT功能可以看到,谐波量并不大。

     

    小梅哥

    2018年3月31日星期六

  • 相关阅读:
    第1章 1.4计算机网络概述--数据包和数据帧
    第1章 1.3计算机网络概述--规划IP地址介绍MAC地址
    sql生成随机字符串
    bootstrap手风琴效果
    C#-java RSA加密解密
    正则表达式验证手机号 身份证号 银行卡号 姓名输入
    微服务在微信后台的架构实践
    react学习
    datatables .fnDraw is not a function
    给当前页或者跳转后页面的导航栏添加选中样式
  • 原文地址:https://www.cnblogs.com/xiaomeige/p/8847043.html
Copyright © 2011-2022 走看看