【vivado导出仿真波形数据至txt文件+matlab分析】

vivado导出仿真波形数据至txt文件

导出m_axis_data_tdata[31:0]
若想把上述波形中的m_axis_data_tdata[31:0]打印出来,则只需在.v代码中加入以下代码,run behavioral simulation后,波形内容就会被保存下来。
下面展示代码

integer save_file;
initial begin
    save_file = $fopen("路径/m_axis_data_tdata.txt");    //打开所创建的文件;若找不到该文件,则会自动创建该文件。
    if(save_file == 0)begin 
        $display ("can not open the file!");    //如果创建文件失败,则会显示"can not open the file!"信息。
        $stop;
    end
end

always @(posedge clk) begin
    if (data_en) begin
        $fdisplay(save_file,"%d",m_axis_data_tdata);    //在使能信号为高时,每当时钟的上升沿到来时将数据写入到所创建的.txt文件中
    end
end

保存的txt文件

matlab读取txt文件

m_axis_data_tdata = csvread('m_axis_data_tdata.txt');

matlab分析txt文件数据频谱

%% 信号频谱
% 计算FFT
X_m_axis_data_tdata = fft(m_axis_data_tdata);%data_mix
X_m_axis_data_tdata_len = length(m_axis_data_tdata); 
% 计算双边频谱(默认情况下,fft给出单边频谱)
X_m_axis_data_tdata = abs(X_m_axis_data_tdata);
X_m_axis_data_tdata_phase = angle(X_m_axis_data_tdata);
X_m_axis_data_tdata = X_m_axis_data_tdata/max(X_m_axis_data_tdata);  % 归一化幅度以便可视化
 
% 创建频率向量
% f = fs*(0:(sin_len/2))/sin_len;
f_m_axis_data_tdata = fs*(0:(X_m_axis_data_tdata_len/2))/X_m_axis_data_tdata_len;
 
% 绘制幅度频谱
figure(114)
% plot(f, X_mag(1:sin_len/2+1));
plot(f_m_axis_data_tdata, X_m_axis_data_tdata(1:X_m_axis_data_tdata_len/2+1));
title('Amplitude Spectrum of Sin Signal');
xlabel('Frequency (Hz)');
ylabel('Amplitude');
title('vivado信号频谱');
grid on;

在这里插入图片描述

matlab cell数组转换为double数组

coe_data_mix_lh_buf = coe_data_mix_lh(3:end,:);%去掉进制说明
data_mix_lh_char = char(coe_data_mix_lh_buf);
data_mix_lh = str2num(data_mix_lh_char);

参考:
链接: [https://blog.youkuaiyun.com/weixin_43872190/article/details/122271074?fromshare=blogdetail&sharetype=blogdetail&sharerId=122271074&sharerefer=PC&sharesource=lzr232&sharefrom=from_link]

### 如何从Vivado导出仿真波形数据Matlab进行处理 #### 使用ILA工具导出数据FPGA设计中,为了更好地分析内部信号,在Vivado环境中可以利用内置的ILA(集成逻辑分析仪)来捕获所需的数据。当需要将这些数据用于更深入的研究或验证算法效果时,则可将其导出至外部软件如Matlab来进行进一步处理。 对于想要获取特定时间段内的波形样本而言,可以在ILA界面内选定目标信号后,通过右键菜单选项选择`Export CSV File...`命令完成操作[^2]。此过程会创建一个包含时间戳以及各条目数值信息的CSV文档,方便后续加载入其他应用程序之中做详尽解析工作。 #### 数据预处理脚本编写 一旦获得了来自ILA记录下来的原始资料集——即上述提到过的CSV文件格式——就可以着手准备相应的Matlab程序段用来读取并转换成适合计算的形式: ```matlab % 定义变量名与路径 filename = 'path_to_your_file.csv'; % 替换成实际位置字符串 dataCellArray = csvread(filename); % 加载整个表格内容作为单元格矩阵看待 % 假设第一列为时刻标记而其余部分代表不同通道采样值 timeStamps = dataCellArray(:,1); signalValues = dataCellArray(:,2:end); % 如果遇到非纯数字型态(比如首行列标题),则应先跳过它们再执行以上指令 ``` 这段简单的代码片段展示了怎样快速地把存储于文本中的多维序列映射成为易于操控的对象结构。值得注意的是,由于某些情况下可能含有表头说明文字干扰正常识别流程,因此务必确认所选取范围确实只涵盖了有效测量结果才行[^3]。 #### 进一步的数据分析方法 有了经过初步整理后的数组形式表达之后,便能够灵活运用各种现成函数库实现诸如傅里叶变换之类的高级运算任务了。例如要观察某一组IQ调制信号随频率变化特性的话,只需简单几行就能达成目的: ```matlab Fs = ... ; % 设定采样率Hz单位 NFFT = length(signalValues(:,1)); % FFT长度等于单路总点数 Y = fftshift(fft(signalValues,NFFT)); f = Fs*(-NFFT/2:NFFT/2-1)/NFFT; figure; plot(f,abs(Y)) title('Single-Sided Amplitude Spectrum of X(t)') xlabel('Frequency (Hz)') ylabel('|X(f)|') grid on ``` 此处假设已经知道了确切的工作参数(像采样速率这样的基本信息)。借助此类绘图功能直观展示频谱分布情况有助于发现潜在问题所在或是评估整体性能指标表现如何[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值