在fpga数据处理时往往要对ila的输出的大量csv文件进行分析,而手动一个一个文件的导入处理太过麻烦。因而笔者编写了一段matlab代码可以对csv文件进行批量处理。
clear;
clc;close all;
file_read=dir('C:\Users\admin\Desktop\shuju\水平\*.csv'); %读取文件夹的位置
%在对其他文件类型处理时更改*.csv即可
filename={file_read.name};
file_length=length(file_read);
for i=1:file_length
id=file_read(i).name;
path=strcat('C:\Users\admin\Desktop\shuju\水平\','\',id);
data=csvread(path,1,0,[1,0,8192,7]); %ila的108个csv文件依次读入
[f1(i,1),f1(i,2),f1(i,3)]=ilapro(data); %此处调用ilapro函数对数据处理
%f1为数据结果result为第一列,rx_add为第二列,rx_dif为第三列
end
此程序不光可以对csv文件进行处理,其他文件类型进行相应更改即可。
%%此函数为笔者所用进行信号处理的函数
function [result,rx_add,rx_dif]=ilapro(data)
%导入数据为复数格式
iladata = data;
rx1_comp = iladata(:,4)+1j*iladata(:,5);
rx2_comp = iladata(:,6)+1j*iladata(:,7);
%plot(fft(rx1_comp));
%取幅值
rx1_abs_arr = abs(rx1_comp);
rx2_abs_arr = abs(rx2_comp);
%求平均
rx1_mean = mean(rx1_abs_arr);
rx2_mean = mean(rx2_abs_arr);
%求和与差,并做运算
rx_add = rx1_mean + rx2_mean;
rx_dif = rx1_mean - rx2_mean;
result = rx_dif/rx_add;
% x_axi = [-20,-15,-10,-5,0,5,10,15,20,25,30];
% y_axi = [
% 0.016478528664057,0.069554793670470,0.069554793670470,0.076067360057933,-0.071667912464474,-0.018676870515626,0.009990320734708,-0.003122688821096,0.015848312968234,-0.033048681655585,-0.043266337449823
% ];
% plot(x_axi,y_axi)
% P = polyfit(x_axi,y_axi,1)