利用Matlab筛选给定条件的数据

最近帮朋友写了个matlab筛选数据的程序,程序为从二维数据中,对两个变量均设置范围和允许误差,筛选出符合要求的数据,话不多说,上code:

%%%%%%%%%%%%%%%%%%%%数据处理问题
%解决问题:输入所需频率信息,搜索出在该频率下某个文件中确定组数中相位为确定的数据,本代码适合于两组文件
%所需输入及修改数据:
%修改文件路径
%输入所需要搜索的频率信息freobj
%输入所需要搜索的相位信息phaobj
%输入频率允许误差范围eps
%输入相位允许误差范围peps
clear all;
clc;
A1=xlsread('C:\Users\sdwan\Desktop\reflect-45.xlsx');
A2=xlsread('C:\Users\sdwan\Desktop\reflect45.xlsx');
A3=zeros(3,2);%A3的目的是为了组合两个文件
A=[A1;A3;A2];
size_A1=size(A1);
size_A2=size(A2);
data1_num=(size_A1(1,1)+3)/204;
data2_num=(size_A2(1,1)+3)/204;
Frequency=A(:,1);
Phase=A(:,2);
size_Frequency=size(Frequency);
Group_number=(size_Frequency(1,1)+3)/204;
%输入频率各组数据
fre=[];
fre(:,1)=Frequency(1:201);
for p=2:Group_number %Group_number是组数
    fre(:,p)=Frequency(201*(p-1)+3*(p-1)+1:201*(p-1)+3*(p-1)+201);
end
%输入相位各组数据
pha=[];
pha(:,1)=Phase(1:201);
for q=2:Group_number %350是组数
    pha(:,q)=Phase(201*(q-1)+3*(q-1)+1:201*(q-1)+3*(q-1)+201);
end

%组合数据,频率相位保存为列向量
z=[];
z(:,1)=fre(:,1);
z(:,2)=pha(:,1);

for r=3:2:Group_number*2-1%总的组数乘2减一
z(:,r)=fre(:,(r+1)/2);
z(:,r+1)=pha(:,(r+1)/2);
end
%输入允许的误差范围
% fprintf("请输入频率所允许的误差:");
eps=input('请输入频率所允许的误差:');%%%%%%%%%%%%%自己设置!
%设置所需的筛选频率
% fprintf("请输入所要筛选的频率:");
freobj=input('请输入所要筛选的频率:');%%%%%%%%%%%%%%自己设置!
n=Group_number*2;
%判断 其中n为数据组数量的两倍
ff=zeros(201,n);%ff矩阵存储频率信息201 700为z矩阵行列数
pp=zeros(201,n);%pp存储相位信息
m=zeros(201,n);

for j=1:2:n%j为列同时为数据组
   for i=1:201%i为行
      if(abs(z(i,j)-freobj)<=eps)
      m(i,j)=z(i,j);
      m(i,j+1)=z(i,j+1);%将符合条件的数据对保存在m矩阵中
      end
   end
end


   for k=2:2:n%处理相位为负的数据,k为列
       for r=1:201%r为行     
         if(m(r,k)==0)
             m(r,k)=999999;
         else if(m(r,k)<0)
                 m(r,k)=m(r,k)+360;
         end
         end
       end
   end
   
   
%peps为相位所允许的误差
% fprintf("请输入相位所允许的误差:");
   peps=input('请输入相位所允许的误差:');%%%%%%%%%%%自己设置!
%phaobj为目标相位
% fprintf("请输入目标相位:")
   phaobj= input('请输入目标相位:');%%%%%%%%

for s=2:2:n%列
    for t=1:201%行
        if(s/2<=data1_num)%data1_num为第一组有的数据组数
            num=s/2;
            str="reflect.-45"; 
        elseif(s/2>data2_num)
            num=s/2-data2_num;
            str="reflect.45";
            
        end
        
        if(abs((m(t,s)-phaobj))<peps)

            fprintf("来自%s文件中第%d组的数据,频率为%d,相位为%d,符合要求",str,num,m(t,s-1),m(t,s));
%             fprintf("来自第%d组的数据,频率为%d,相位为%d,符合要求",s/2,m(t,s-1),m(t,s));
            fprintf("\n");

            end
        end
end

需要说明的是:朋友的数据是每一组中有201个数据,不同excel文件中的组数是可以随意的,但必须每组的数据都是201个,当然,朋友们要是需要筛选不同个数的数据可以设置个变量,将code中的201全部换为变量,即可实现任意组数,每组中任意个数据的筛选问题,大家有需要自取。

  • 4
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值