官方淘宝店 易迪拓培训 旧站入口
首页 > 仿真设计 > CST微波工作室 > 有关数据读入matlab

有关数据读入matlab

05-08
前些日子在论坛见不少人都对读入数据有些迷茫
cst、hfss的数据基本格式是描述性语言+数据的格式
下面是一个cst的数据输出
       Frequency / GHz        SZmin(1),Zmin(1)/abs,linear           
-----------------------------------------------------------------
                         5                           0.4557996
                 5.029                           0.4553181
                 5.058                           0.4547905
                 5.087                           0.4542164
                 5.116                           0.4535954
                 5.145                           0.452927
                 5.174                           0.4522107
                 5.203                           0.4514461
但是matlab没有这么高的领悟了,不会自己读数据
方案不少说一说常用的。
1自己手动删除
       Frequency / GHz        SZmin(1),Zmin(1)/abs,linear           
-----------------------------------------------------------------
然后使用
load (文件名).txt
不错的方法,如果你文件名是纯数字的,比如是24,在matlab的workspace中会有一个X24的数组。
下面对x24处理就是了。
2一些人比较懒,不愿意删东西
可以这样:
[f,tr]=textread('24.txt','%f%f',2);
先到上面在看一下cst的数据结构,这里的2 是说从第3行开始读数。
如果你的数据是大于两列的,有几列,在[a1,a2,a3……]就是几个向量,同时,"%f%f……"中的%f的个数和前面的列向量的个数相同。
3有些时候仪器的输出比较牛,我们的古董级别的失网的输出是csv格式的带编码的数据。
# Version 1.00
#
freq[Hz];re:Trc1_b2d1sam[V];im:Trc1_b2d1sam[V];
1.700000000000000E+011;7.317389423714706E-003;-3.586198237922638E-003;
1.701500000000000E+011;-8.718488268764849E-003;5.495278251522440E-003;
1.703000000000000E+011;-1.050072140670953E-002;3.472822925688487E-003;
可以这么处理
fid=fopen('C:\Documents and Settings\Administrator\My Documents\58.csv','r');% open file
i=0;
while 1                                                       %get the length of the data
    tline = fgetl(fid);
    if ischar(tline),   break,   end
    i=i+1;
end
fclose(fid);                                              %the array can't go back, when it get the bottom of the file. so open the file again
fid=fopen('C:\Documents and Settings\Administrator\My Documents\58.csv','r');
temp=fgetl(fid);                                        % due to the structure of the data, first three line is useless. 
temp=fgetl(fid);
temp=fgetl(fid);
for j=1:1:i-3                                               %read the data
    temp=fgetl(fid);
    a=strrep(temp,';',' ');                               % use the 'table' to replace ';'
    [b,c]=strtok(a);
    [e,f]=strtok(c);
    data(j,1)=str2double(b);
    data(j,2)=str2double(e);
    data(j,3)=str2double(f);
end
4事实上,我们的数据量比较大,可以一次打开多个文件
clc
close all
clear all
t1=27;
t2=30;
for t=t1:1:t2
f=strcat(num2str(t),'.cvs');
g='C:\Documents and Settings\Administrator\My Documents\04.13\';
fid=fopen(strcat(g,f),'r+');
t1,t2可以自己指定。因为实验数据是要测60次取均值的,导师一直是这么要求的。如果让你删60个文件的说明的话,会发疯的。
5上面的这些都是对不会使用dos的人写的
如果你会使dos,十分简单,写一个批处理文件,在matlab的m文件的一开始执行一下
       Frequency / GHz        SZmin(1),Zmin(1)/abs,linear           
-----------------------------------------------------------------
                     5                           0.4557996
                 5.029                           0.4553181
                 5.058                           0.4547905
马上全部变成
                     5                           0.4557996
                 5.029                           0.4553181
                 5.058                           0.4547905
现在我们的实验室都是在用批处理的方式来写的,因为数据太多了。
先写到这里了,希望对大家数据处理有帮助。

不错,多谢小编奉献

貌似用matlab直接处理不是那么简单,lz的第二个方法好像不行

可以的啊,在我的机器运行的很正常。要不你把数据给我,我帮你写一个m文件?

谢谢了!

Top