matlab分析FPGA的ILA数据(二进制)

@TOC

1 待读取数据

matlab分析FPGA的ILA数据(二进制)_第1张图片

2 主函数

%% 程序功能:MATLAB分析FPGA的二进制数据

close all;
clear all;
clc;


%% 数据导入
% bin2dec函数:将二进制转换为十进制。
% uint16(A)  把A转换为16位非负整型
% Y = typecast(X, DATATYPE) 函数的作用是在不更改基础数据的情况下转换数据类型。
% 大矩阵计算,如果用single类型的数据能节省一半的内存空间
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
filenameCSV = 'iladata.csv';
data = importfile(filenameCSV); 
SIZEdata = size( data );
L = SIZEdata(1);
lie = SIZEdata(2);
y = zeros( L,lie );
for i = 1 : L
    for j = 1 : lie
       x1 = data( i, j );
       x2 = typecast( uint16(bin2dec( x1 )),'int16');
       x3 = single( x2 );
       y( i,j ) = x3;
    end
end

%% 数据分析
Y=fftshift(fft(y'));
P=abs(Y)/L;

fs = 65e6;          % 采样频率  AD9238的采样频率为65M
f = (0:L-1)*fs/L-fs/2;
t=0:1/fs:(L-1)/fs ; 

figure(1)
plot(t,real(y));grid on;
xlabel('时间(s)');ylabel('幅度');

figure(2)
plot(f/1000,P);grid on;
xlabel('频率/KHz');ylabel('幅度');

3 子函数

function data = importfile(filename, startRow, endRow)
% IMPORTFILE1 将文本文件中的数值数据作为列矢量导入。

%  初始化变量。
delimiter = ',';
if nargin<=2
    startRow = 1;
    endRow = inf;
end

%  每个文本行的格式字符串:
%1: 文本 (%q)
%  有关详细信息,请参阅 TEXTSCAN 文档。
formatSpec = '%q%[^\n\r]';

% 打开文本文件。
fileID = fopen(filename,'r');

% 根据格式字符串读取数据列。
% 该调用基于生成此代码所用的文件的结构。如果其他文件出现错误,请尝试通过导入工具重新生成代码。
dataArray = textscan(fileID, formatSpec, endRow(1)-startRow(1)+1, 'Delimiter', delimiter, ...
                     'EmptyValue' ,NaN,'HeaderLines', startRow(1)-1, 'ReturnOnError', false);
for block=2:length(startRow)
    frewind(fileID);
    dataArrayBlock = textscan(fileID, formatSpec, endRow(block)-startRow(block)+1, 'Delimiter', delimiter, ...
                   'EmptyValue' ,NaN,'HeaderLines', startRow(block)-1, 'ReturnOnError', false);
    dataArray{1} = [dataArray{1};dataArrayBlock{1}];
end

% 关闭文本文件。
fclose(fileID);


% 将导入的数组分配给列变量名称
data = dataArray{:, 1};



你可能感兴趣的:(FPGA和MATLAB联合仿真,matlab,fpga开发,开发语言)