如何用MATLAB 实现数据的动态存储

来自:    更新日期:早些时候
matlab怎么实现数据采集和存储~

用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分开

可以先定义一个向量
vector = [];
for i = 1:50
A=path(i,:);
A=A(A>0);
vector = horzcat(vector,A);
end
clear path; %清除原来的变量

可以这样做:
for i=1;50
A=path(i,:);
A=A(A>0);
path(i,1:length(A))=A;
end;
不过由于A的长度小于path的行长度 因此 最后多出来的部分并没有被覆盖掉
处理数据的时候要注意


如何用MATLAB 实现数据的动态存储视频

相关评论:

相关主题精彩

版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

Copyright © 喜物网