在师兄基础上,用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

  

猜你喜欢

转载自www.cnblogs.com/chenxiaozhi/p/12620881.html