matlab怎么实现数据采集和存储

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab怎么实现数据采集和存储相关的知识,希望对你有一定的参考价值。

我的想法是先将电网正常运行时监测一些点的电流大小,最好能存储在Excel中,然后故障时再监测同样的点进行对比,实现故障定位。我应该利用matlab(simulink)中的哪部分呢?

用matlab实现数据采集的方法
我们在这里介绍两种共同学习参考。

① 直接利用MATLAB数据采集箱中提供的的函数命令进行采集,即wavrecord 。wavrecord是利用Windows 音频输入设备记录声音, 其调用格式为: y=wavrecord(n ,fs ,ch ,dtype) ;
式中n 为采样的点数,决定了录音长度;
fs为采样频率,默认值为11025Hz,还可根据要求自己选择合适的采样率;
ch为声道数,默认值为1,表示单声道,如果指定为2,则采样为双声道立体声数据;
dtype为采样数据的存储格式,用字符串指定,可以是‘double’、‘single’、‘int16’、‘int8’,指定存储格式的同时也就规定了每个采样值量化的精度,int8 对应8 位精度采样,其它都是16 位采样精度。 在我们的实验中参数这样选择:
n=1024 fs=44100 ch=1
dtype=’double’
② 采用对声卡产生一个模拟输入对象的方式进行采集。数据采集过程可以分为四步:
1) 初始化。Matlab将声卡等设备都作对象处理,其后的一切操作都不与硬件直相关,而是通过对该对象的操作来作用于硬件设备,所以首先要对声卡产生一个模拟输入对象:
ai = analoginput (’winsound’) ai ——Matlab 中的变量,它是一个模拟输入设备对象句柄,所有的数据采集过程都是通过对该句柄的操作来实现;
analoginput ( ) ——模拟输入设备对象建立函数,通过该函数将A/ D 转换硬件映射为Matlab workspace 中的一个模拟输入设备对象句柄;
winsound——声卡设备驱动程序,Matlab 软件内含该驱动程序。 2) 配置。给ai对象添加通道,设置采样频率。 addchannel (ai ,1);%添加通道
fs = 44100; %采样频率设置为44.1KHz ai.SampleRate = fs ;%设置采样频率 3) 采样。启动设备对象,开始采集数据。 t = 2s ; %设定采样时间 start (ai); %启动设备对象
data = get (ai ,t *fs) ; %获得采样数据 4) 终止。停止对象并删除对象。 stop (ai) ; delete (ai) ;
这样便完成了一次完整的数据采集过程,采样频率和采样时间都是由用户输入的,十分方便。

Matlab中存储及读取数据
我们在使用MATLAB过程中,免不了希望将运算过程中的某些数据「储存」起来,以便下次使用再「读取」利 用。「储存」和「读取」的指令分别是save及load,而save的数据型态又分为:(1)双位元格式 (binary format) 的 MAT-file,(2) ASCII 格式的 ASCII-file。MAT-file 是以双位元字元储存,可让电脑在读出/入(input/output) 速率加 快,其格式为test.mat(test为档名),MATLAB将档案的型态预设为MAT-file;而ASCII-file则是以可辨识的字元 储存,但会降低电脑在读出/入的速率,其格式为test.dat(test为档名)。如果你的数据是只在MATLAB中产生 及被使用,那最好使用MAT-file。ASCII-file则必须用在当数据档要为其它不是MATLAB的应用软体读取时。

另外要注意,当save成MAT档是储存变数本身,而非直接储存变数的数据;而save成ASCII档则是直接储存变数的数值。
这二者储存的差异,造成在读取MAT档和ASCII档的数据有所不同,详见以下的范例。

须注意的是在储存及读取数据时,MAT-file或是ASCII-file的档最好为矩阵型态,否则可能在读取时有困难。数 据储存成矩阵的大小可以为m×n,其中m是列的数目,n则为行的数目。

以下就是几个save, load的使用范例
>> x=1:5; y=11:15; % 先产生二个列阵列 (row array x, y
>> save data1 x y % 是将 x,y 二个变数的数值存入 data1 这个MAT-file,
%即data1其实是data1.mat。data1.mat 的内容为变数x, y,而非(1:5, 11:15) 的数据
>> save data2.dat x y -ascii % 如果要将data1改以ASCII格式储存,则须加上-ascii
% 的选项。data2.dat 的内容为(1:5, 11:15) 的数据
>> type data2.dat % type 指令可以将 data2.dat 的内容列出

>> load data1 % 读取 data1.mat 档
>> x, y % 叫出 data1.mat中的变数来读取其内容(1:5, 11:15)

>> load data2.dat % 读取 data2.dat 档
>> x2=data2(1,:); y2=data2(2,:); % 将data2中的第一及第二列数据分别以x2及y2
%变数读入,之后在运算中即可使用这二列数据
>> x=21:25; y=31:35;
>> save data3.dat x y -ascii
>> load data3.dat;
>> x3=data3(1,:); y3=data3(2,:); % 将data3中的第一及第二列数据分别以x3及y3 变数读入
%,之后在运算中即可使用这二列数据
>> A=[1 2 3; 4 5 6];
>> save data4.dat A -ascii %是将A阵列的数值存入data4这个ASCII-file
>> load data4.dat
>> x4=data4(:,1); % 令 x4 为 data4 的第一行数据
>> y4=data4(:,2); % 令 y4 为 data4 的第二行数据
>> z4=data4(:,3); % 令 z4 为 data4 的第三行数据
参考技术A 你的问题包括几个大的方面:
1、首先应该明确,你的数据采集手段是什么?用外部的设备测量然后通过通用接口(如串口)读入,还是在电脑中安装专用板卡?
2、采集到的数据以什么方式存储的问题;
3、数据的分析处理问题。追问

我在仿真中加一个电流测量模块,可以实时检测电流波形,如何转换成可以存在存储的数据就是我遇到的第一个问题。

追答

就是说,硬件层面已经不存在问题,现在讨论的是软件层面的问题?
你说加一个模块来实时检测波形,那也就是说用的是Simulink?
存储数据包括两个方面,一是以什么样的方式——仿真结束后存储或者间隔一定时间按帧存储;二是存储的格式,例如用mat或xls。
你需要把已有的条件和需求再说清楚一点。

本回答被提问者采纳
参考技术B 在simulink模型中的电流模块后面加入一个“to workspace”的模块,或者加入“to file”模块,然后再读入数据,写个小程序自动对比定位就可以了

已知算法 怎么用Matlab进行仿真

参考技术A 按运行快捷键F5即可实现仿真图。 MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MATLAB是matrix&laboratory两个词的组合.

以上是关于matlab怎么实现数据采集和存储的主要内容,如果未能解决你的问题,请参考以下文章

matlab如何读取结构体中的数据,比如我想利用里面的数据画图

matlab数据长度不一样,怎么扩充

C程序:从文件中读取矩阵数据,并显示出来,利用链式存储结构。

MATLAB数据如何存成数组?

matlab中load进来的数据怎么处理?

matlab 怎么批量保存数据