- matlab擅长矩阵操作,应错采用矩阵索引的方式进行运算而避免使用for循环。
- 串口相关
%删除所有串口,防止串口一直被MATLAB占用
delete(instrfindall);
%filename.dat是通过USB采集到的原始数据,通过fopen将数据以2进制形式读取
fid=fopen([filename '.dat'],'rb');
%将二进制读取来的数据以无符号8位数存储在raw中
raw = fread(fid,'uint8');
%关闭文件读取
fclose(fid);
%对数据进一步处理
raw = raw(4001:end);
%将提取后的数据保存成mat格式,并把原先的.dat文件删除。(.mat是提取过有效数据的文件比.dat小)
save([filename num2str(test_num) '_eng.mat'],'eng');
delete([filename num2str(test_num) '.dat']);
%加载.mat文件并转换成方便处理的矩阵格式
EDGE_TDC_NTC = cell2mat(struct2cell(load('TDC_NTC.mat')));
%将矩阵A重构为m*n的矩阵,元素是从A中按列读取的,并且按列排放到D中
D=reshape(A,m,n);
%将矩阵A作为一个元素,并用其重复生成一个新的m*n的矩阵
%其中的每一个元素都是A,新矩阵的行列数由mn和A本身的行列数决定
E=repmat(A,m,n);
%fliplr用于将矩阵A左右镜像 ,flipud(A)上下镜像
F=fliplr(A);
%cat:用来联结数组
cat(2, A, B);% 相当于[A, B]; 行拼接,AB行数要相同。
cat(1, A, B);% 相当于[A; B]. 列拼接
%排序
%找到duty_cycles中第一个满足duty_cycles>0.49 & duty_cycles<0.51条件的元素,返回其行数
ref_clk_list(1) = find(duty_cycles>0.49 & duty_cycles<0.51, 1 );
%找出出现频率最高的值
x_peak = mode(array_eng_total);
%找phase_relation中到所有满足phase_relation(:,5) == ref_clk_list(2)的返回其行数
index = find(phase_relation(:,5) == ref_clk_list(2));
%在[0,2pi]范围内取10个均分的点
m=linspace(0,2*pi,10);
random 语句,其一般形式为
y = random('分布的英文名',A1,A2,A3,m,n),
表示生成 m 行 n 列的 m × n 个参数为 ( A1 , A2 , A3 ) 的该分布的随机数。例如:
(1) R = random('Normal',0,1,2,4): 生成期望为 0,标准差为 1 的(2 行 4 列)2× 4 个正态随机数
(2) R = random('Poisson',1:6,1,6): 依次生成参数为 1 到 6 的(1 行 6 列)6 个 Poisson 随机数
1、用法不同
&适用于矩阵间的逻辑运算,&&不适用,只适用于单个元素,包括数值和字符
2、使用效果不同
当判断两个逻辑值时,例如A&(f(x)>c)和A&&(f(x)>c)时,对于第一种情况,不论A是否为真,A和(f(x)>c)都要计算,但是对第二种情况,如果A是false,那么后面的(f(x)>c)就不用计算了,倘若f(x)是一个计算量大的函数,那么这将节省很多时间。
hist_temp = hist(diff(edge_value_result),35);
plot(hist_temp); ylim([0 250]); xlim([0 35]);