在师兄基础上,用fopen再用fgetl,一行一行读取txt数据进行处理,踩的一个坑:一行一行读取进行字符串对比时,要注意空格也要加进去对比,少个空格,字符串比较结果就比一样。
clear; clc; k1=1; %全局变量,最终得到的均值数组序号 l1=1; k2=1; l2=1; k3=1; l3=1; k4=1; l4=1; mark_1='RF1'; %txt文件读取有效信息标志 mark_2='RF2'; mark_3='RF3'; mark_4='RF4'; mark_OK='OK '; %OK标志下一行为有效数据 五角星:此处踩了一个坑,OK后面要加一个空格,才能和txt文件中的对比一致 filename_first='F:\20200311发给陈智资料_赵文玉\20200311发给陈智资料_赵文玉\标定数据集\2019.11.27标定_第一个天线\'; %文件目录,绝对位置第一部分 filename_last='.txt'; %文件后缀,绝对位置最后一部分 for filename_number=25:5:200 %SAW标签与天线标定位置,从25cm,间隔5,到200cm filename_second=num2str(filename_number); %数字转换为字符串,文件名组成需要字符串类型的数字 for filename_letter=1:2 %文件名数字后的a与b即第一次与第二次标定 switch filename_letter case 1 filename_third='a'; case 2 filename_third='b'; case 3 filename_third='c'; case 4 filename_third='d'; case 5 filename_third='e'; end filename=[filename_first,filename_second,filename_third,filename_last]; %组成文件名,并读取该文件进行数据处理 fid=fopen(filename); %打开文件,打开一次后面需要关闭一次,最后一定要有fclose; j1=1; j2=1; j3=1; j4=1; B1=[]; %数组B1,储存一个文件中例如25a中的RF1的信号 B2=[]; B3=[]; B4=[]; for i=1:20000 %读取前20000行 a=fgetl(fid); %相当于指针,每执行一次就读取下一行 RF1_cmp=strcmp(a,mark_1); %判断信号属于哪个天线 RF2_cmp=strcmp(a,mark_2); RF3_cmp=strcmp(a,mark_3); RF4_cmp=strcmp(a,mark_4); if RF1_cmp==1 b=fgetl(fid); TF=strcmp(b,mark_OK);%判断是否读取成功 if TF==1 c=fgetl(fid); C=str2double(c); B1(j1)=C; j1=j1+1; end elseif RF2_cmp==1 b=fgetl(fid); TF=strcmp(b,mark_OK); if TF==1 c=fgetl(fid); C=str2double(c); B2(j2)=C; j2=j2+1; end elseif RF3_cmp==1 b=fgetl(fid); TF=strcmp(b,mark_OK); if TF==1 c=fgetl(fid); C=str2double(c); B3(j3)=C; j3=j3+1; end elseif RF4_cmp==1 b=fgetl(fid); TF=strcmp(b,mark_OK); if TF==1 c=fgetl(fid); C=str2double(c); B4(j4)=C; j4=j4+1; end end end B1_length=length(B1); %求数组列数,因为是一列,所以列数即为元素个数。 B1_median=median(B1); B2_length=length(B2); B2_median=median(B2); B3_length=length(B3); B3_median=median(B3); B4_length=length(B4); B4_median=median(B4); rate=0.3; %剔除无效数据的比率 max1=B1_median*(1+rate); %超过最大值,视为无效数据,去除 max2=B2_median*(1+rate); max3=B3_median*(1+rate); max4=B4_median*(1+rate); min1=B1_median*(1-rate); min2=B2_median*(1-rate); min3=B3_median*(1-rate); min4=B4_median*(1-rate); B1(B1>=max1|B1<=min1)=[]; %数组中不满足的数据从B中剔除 B2(B2>=max2|B2<=min2)=[]; B3(B3>=max3|B3<=min3)=[]; B4(B4>=max4|B4<=min4)=[]; pingjun1(k1)=mean(B1); %求出数据处理后B1均值,存储到pingjun1数组中 zhongwei1(l1)=median(B1); k1=k1+1; l1=l1+1; pingjun2(k2)=mean(B2); zhongwei2(l2)=median(B2); k2=k2+1; l2=l2+1; pingjun3(k3)=mean(B3); zhongwei3(l3)=median(B3); k3=k3+1; l3=l3+1; pingjun4(k4)=mean(B4); zhongwei4(l4)=median(B4); k4=k4+1; l4=l4+1; fclose(fid); end end A1pingjun=reshape(pingjun1,2,[]); %由于进行两次重复实验,所以分成2行,同一列的两个数据,需要相加取均值,得到改点的标定数据 A1zhongwei=reshape(zhongwei1,2,[]); A2pingjun=reshape(pingjun2,2,[]); A2zhongwei=reshape(zhongwei2,2,[]); A3pingjun=reshape(pingjun3,2,[]); A3zhongwei=reshape(zhongwei3,2,[]); A4pingjun=reshape(pingjun4,2,[]); A4zhongwei=reshape(zhongwei4,2,[]); for p=1:length(A1pingjun) D1=[]; for q=1:2 D1(q)=A1pingjun(q,p); end RSSI1(p)=mean(D1); %RSSI1数组中储存从25cm,到200cm处的RF1信号强度。 end for p=1:length(A2pingjun) D2=[]; for q=1:2 D2(q)=A2pingjun(q,p); end RSSI2(p)=mean(D2); end for p=1:length(A3pingjun) D3=[]; for q=1:2 D3(q)=A3pingjun(q,p); end RSSI3(p)=mean(D3); end for p=1:length(A4pingjun) D4=[]; for q=1:2 D4(q)=A4pingjun(q,p); end RSSI4(p)=mean(D4); end
啦啦啦啦啦啦啦啦