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

matlab怎么实现数据采集和存储,第1张

用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.1KHzai.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:5y=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:25y=31:35

>>save data3.dat x y -ascii

>>load data3.dat

>>x3=data3(1,:)y3=data3(2,:)% 将data3中的第一及第二列数据分别以x3及y3 变数读入

%,之后在运算中即可使用这二列数据

>>A=[1 2 34 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 的第三行数据

set(AI,'SampleRate',8000) % 设置采样速清衡姿率为8000Hz

ActualRate = get(AI,'SampleRate') % 从AI中获取实际采样速率

set(AI,'TriggerChannel',chan) % 设拦亏置触发通道

set(AI,'TriggerType','software')% 设置触发类型

set(AI,'Triggercondition','rising'答绝) % 设置为电压上升至某值后触发

set(AI,'TriggerConditionValue',0.013) % 设置触发电压值

set(AI, 'TriggerDelay', -1) % 设置触发时延

set(AI, 'TriggerDelayUnits', 'seconds') % 设置触发时延的单位

set(AI,'timeout',2) % 定义超时值

Fs = ActualRate % 设置采样速率

调用函银凯数resample()就可以了

resample为信号降采样处理,迹搏伏姿携理解如下:

B=resample(x,90,250) %

采样从250Hz降到90Hz,如果250在前,就是插值从90到250,可以看B的长度,250Hz采样4000个数据等于90hz采样1440个数据,这就是降采样。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12400681.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存