MATLAB生成mif文件

MATLAB代码

bash 复制代码
% 参数设置
N = 4096; % 数据点数量
t = linspace(0, 2*pi, N); % 时间向量
width = 12; % 位宽

% 正弦波
sine_wave = 2.5 * sin(t) + 2.5; % 幅度在0到5之间

% 三角波
tri_wave = 5 - abs(mod(t/(2*pi)*4, 2) - 1);

% 方波
square_wave = 2.5 * (square(t) + 1); % 将范围调整为0到5之间


% 将波形数据保存为MIF文件
save_to_mif('sine_wave.mif', sine_wave, N, width);
save_to_mif('tri_wave.mif', tri_wave, N, width);
save_to_mif('square_wave.mif', square_wave, N, width);

% 读取并绘制正弦波
sine_wave_data = read_mif('sine_wave.mif', N, width);
figure;
plot(sine_wave_data);
title('Sine Wave');
xlabel('Sample');
ylabel('Amplitude');

% 读取并绘制三角波
tri_wave_data = read_mif('tri_wave.mif', N, width);
figure;
plot(tri_wave_data);
title('Triangle Wave');
xlabel('Sample');
ylabel('Amplitude');

% 读取并绘制方波
square_wave_data = read_mif('square_wave.mif', N, width);
figure;
plot(square_wave_data);
title('Square Wave');
xlabel('Sample');
ylabel('Amplitude');

% 函数:保存为MIF文件
function save_to_mif(filename, data, depth, width)
    % 打开文件
    fid = fopen(filename, 'w');
    
    % 写入头部信息
    fprintf(fid, 'DEPTH = %d;\n', depth);
    fprintf(fid, 'WIDTH = %d;\n', width);
    fprintf(fid, 'ADDRESS_RADIX = UNS;\n');
    fprintf(fid, 'DATA_RADIX = UNS;\n');
    fprintf(fid, 'CONTENT BEGIN\n');
    
    % 写入数据
    for i = 0:depth-1
        fprintf(fid, '%X : %X;\n', i, round(data(i+1) * (2^width - 1)));
    end
    
    % 写入结束
    fprintf(fid, 'END;\n');
    
    % 关闭文件
    fclose(fid);
end

% 函数:从MIF文件中读取数据
function data = read_mif(filename, depth, width)
    % 打开MIF文件
    fid = fopen(filename, 'r');
    
    % 跳过文件头部信息,找到 "CONTENT BEGIN"
    while true
        line = fgetl(fid);
        if contains(line, 'CONTENT BEGIN')
            break;
        end
    end
    
    % 初始化数据数组
    data = zeros(1, depth);
    
    % 读取数据部分
    for i = 1:depth
        line = fgetl(fid);
        % 解析地址和值
        tokens = regexp(line, '(\w+) : (\w+);', 'tokens');
        if ~isempty(tokens)
            addr = hex2dec(tokens{1}{1}); % 地址
            value = hex2dec(tokens{1}{2}); % 数据值
            data(addr + 1) = value / (2^width - 1); % 恢复原始的归一化数据
        end
    end
    
    % 关闭文件
    fclose(fid);
end

运行结果

相关推荐
Dongsheng_20197 分钟前
【汽车篇】AI深度学习在汽车零部件外观检测——连接器X-Ray透视检测
人工智能·深度学习·汽车
没有梦想的咸鱼185-1037-166313 分钟前
SCI论文写作:从实验设计到发表(选题、文献调研、实验设计、数据分析、论文结构及语言规范)
人工智能·信息可视化·数据分析·ai写作
AI新兵19 分钟前
深度学习基础:从原理到实践——第二章神经网络(中)
人工智能·深度学习·神经网络
pearbing27 分钟前
B站排名优化:知识、娱乐、生活类内容的差异化实操策略
人工智能·微信·小程序·生活·娱乐
leijiwen28 分钟前
AI × RWA 本地生活品牌数字资产管理与增长平台
人工智能·web3·区块链
却道天凉_好个秋37 分钟前
卷积神经网络CNN(四):池化技术
人工智能·神经网络·cnn·池化
少许极端1 小时前
算法奇妙屋(五)-链表
数据结构·算法·链表
ARM+FPGA+AI工业主板定制专家1 小时前
基于Jetson+FPGA+GMSL+AI的自动驾驶数据采集解决方案
人工智能·机器学习·自动驾驶
XISHI_TIANLAN1 小时前
【多模态学习】Q&A6: 什么是MOE架构?Router Z Loss函数是指什么?负载均衡损失(Load Balancing Loss)又是什么?
学习·算法·语言模型
木子.李3471 小时前
数据结构-算法C++(额外问题汇总)
数据结构·c++·算法