主要内容

读下一个连续信号的观察

自从R2020a

描述

例子

团体=阅读(sds)返回信号从数据存储中提取数据。每个后续的调用返回的数据在数据存储(如果下一个文件sds包含文件数据(如果)或下一个成员sds包含内存数据)。

(团体,信息)=阅读(sds)返回信息提取的信号数据。

例子

全部折叠

指定一组音频信号的路径与MATLAB®作为mat文件。

文件夹= fullfile (matlabroot,“工具箱”,matlab的,的音视频);

创建一个指向指定的信号数据存储文件夹并设置采样率变量名Fs。数据存储列表mat文件的名称。

sds = signalDatastore(文件夹,“FileExtension”,“.mat”,“SampleRateVariableName”,“Fs”);[~ c] = fileparts (sds.Files)
c =7 x1细胞{“唧唧喳喳”}{“锣”}{韩德尔的}{‘笑’}{‘mtlb}{的长条木板}{‘火车’}

当信号数据存储未读文件,读取连续文件数据存储。使用进步函数来监控文件阅读的分数。

hasdata (sds)(数据、信息)=阅读(sds);流(的分数文件读:% .2f \ n '、进步(sds))结束
分数的文件读:0.14的文件读:0.29部分文件读:0.43部分文件读:0.57部分文件读:0.71部分文件读:0.86文件读分数:1.00

打印并检查信息最后调用返回的结构函数。

信息
信息=结构体字段:SampleRate: 8192 TimeVariableName:“f”SignalVariableNames: " y "文件名:" / mathworks /猛击/棒/ Bdoc23a /构建/ matlab工具箱/ matlab /音视频/ train.mat”

创建一个信号数据存储来遍历的元素一个内存单元阵列的信号数据。数据由一个呈现正弦调制线性啁啾,凹二次啁啾和电压控制振荡器。在3000赫兹的信号采样。

fs = 3000;t = 0:1 / fs: 3 - 1 / f;data ={唧唧喳喳(300 t, t(结束),800年)。* exp (2 j *π* 10 * cos(2 *π* 2 * t));2 *唧唧喳喳(1000 t, 200 t(结束),,“二次”[],“凹”);vco(罪(2 *π* t) (0.1 - 0.4) * fs, fs)};sds = signalDatastore(数据,“SampleRate”fs);

虽然数据存储数据,从信号数据存储和读取每个观察画出短时傅里叶变换。

plotID = 1;hasdata (sds) [dataOut信息]=阅读(sds);次要情节(3 1 plotID) stft (dataOut info.SampleRate) plotID = plotID + 1;结束

图包含3轴对象。坐标轴对象1标题短时傅里叶变换,包含时间(s), ylabel频率(赫兹)包含一个类型的对象的形象。坐标轴对象2标题短时傅里叶变换,包含时间(s), ylabel频率(赫兹)包含一个类型的对象的形象。坐标轴对象3标题短时傅里叶变换,包含时间(s), ylabel频率(赫兹)包含一个类型的对象的形象。

指定的路径四个信号包含的MATLAB®。一只小鸟唧唧喳喳的信号是录音,锣,一列火车,一个长条木板。所有信号采样在8192赫兹。

文件夹= fullfile (matlabroot,“工具箱”,matlab的,的音视频,(“chirp.mat”,“gong.mat”,“train.mat”,“splat.mat”]);

创建一个点的信号数据存储到指定的文件。每个文件包含的变量Fs表示采样率。

sds1 = signalDatastore(文件夹,“SampleRateVariableName”,“Fs”);

定义一个函数,这个函数的输出功能和计算信号的上、下信封使用样条插值在当地maxima隔开至少80个样本。每个信号的函数也返回样品时间。

函数[dataOut, infoOut] = signalEnvelope (dataIn信息)[dataOut (: 1), dataOut(:, 2)] =信封(dataIn, 80,“高峰”);infoOut =信息;infoOut。TimeInstants =(0:长度(dataOut) 1) / info.SampleRate;结束

调用变换函数创建第二个数据存储,sds2的信封,计算信号使用函数定义。

sds2 =变换(sds1 @signalEnvelope,“IncludeInfo”,真正的);

结合sds1sds2创建第三个数据存储。每一个调用函数相结合的数据存储返回一个矩阵有三列:

  • 第一列对应于原始信号。

  • 第二和第三列对应上下信封,分别。

sdsCombined =结合(sds1 sds2);

读取和显示原始数据和合并后的数据存储的上部和下部信封。使用extractBetween函数来提取文件名的文件路径。

tiledlayout (“流”)hasdata (sdsCombined) [dataOut infoOut] =阅读(sdsCombined);ts = infoOut {2} .TimeInstants;nexttile举行情节(ts dataOut (: 1),“颜色”,“# DCDCDC”,“线型”,“:”)情节(ts dataOut (: 2:3),“线宽”,1.5)包含(“时间(s)”)ylabel (“信号”)标题(extractBetween (infoOut {: 2} .FileName,“音视频\”,“.mat”))结束

图包含4轴对象。坐标轴对象1包含时间(s), ylabel信号包含3线类型的对象。坐标轴对象2包含时间(s), ylabel信号包含3线类型的对象。坐标轴对象3包含时间(s), ylabel信号包含3线类型的对象。4轴对象包含时间,ylabel信号包含3线类型的对象。

sample_chirps文件夹包含示例文件包含在信号处理工具箱™。每个文件包含一个唧唧,随机采样率,fs,从100到150赫兹。创建一个指向四个信号数据存储文件sample_chirps并指定采样率变量的名称。

目录“sample_chirps”)文件= [“chirp_1.mat”,“chirp_4.mat”,“chirp_9.mat”,“chirp_10.mat”];sds = signalDatastore(文件、SampleRateVariableName =“fs”);

定义一个函数,这个函数的输出功能和计算并返回:

  • 唧唧的声音。

  • 相对应的向量的时间瞬间视窗化的中心部分。

  • 相对应的频率估计。

函数[dataOut, infoOut] = extractSpectrogram (dataIn信息)[dataOut F T] = pspectrum (dataIn info.SampleRate,“声谱图”,TimeResolution = 0.25,OverlapPercent = 40,泄漏= 0.8);infoOut =信息;infoOut。CenterFrequencies = F;infoOut。TimeInstants = T;结束

调用变换函数创建一个数据存储,计算每个唧唧喳喳的声谱图使用定义的函数。

sdsNew =变换(sds、@extractSpectrogram IncludeInfo = true);

尽管转换后的数据存储未读文件,读取新的数据存储和可视化三维空间的谱图。

t = tiledlayout (“流”);hasdata (sdsNew) nexttile[团体,infoOut] =阅读(sdsNew);瀑布(infoOut.TimeInstants infoOut.CenterFrequencies,团体)包含(“频率(赫兹)”)ylabel (“时间(S)”)视图([70])结束

图包含4轴对象。坐标轴对象1包含频率(赫兹),ylabel时间(S)包含一个补丁类型的对象。坐标轴对象2包含频率(赫兹),ylabel时间(S)包含一个补丁类型的对象。坐标轴对象3包含频率(赫兹),ylabel时间(S)包含一个补丁类型的对象。4轴对象包含频率(赫兹),ylabel时间(S)包含一个补丁类型的对象。

指定文件路径中包含的示例信号MATLAB®。创建一个信号数据存储指向指定的文件夹。

文件夹= fullfile (matlabroot,“工具箱”,matlab的,的音视频);sds = signalDatastore(文件夹,“SampleRateVariableName”,“Fs”);

得到的信号数据存储的默认分区数量。

n = numpartitions (sds)
n = 7

分区数据存储在默认的分区并返回对应的数据存储到第四个分区。

subsds =分区(sds、n、4);

使用extractAfter函数来显示文件的名称包含在数据存储对应于第四个分区。

帧= extractAfter (subsds.Files,“音视频\”)
帧=1 x1单元阵列{0 x0 char}

读取数据和信息的信号相对应的数据存储第四个分区。提取的采样率信息并重新取样信号原始采样率的一半。绘制原始和重新取样信号。

hasdata (subsds)(数据、信息)=阅读(subsds);fs = info.SampleRate;f_res = 0.5 * fs;ts =(0:长度(数据)1)/ fs;data_res =重新取样(数据,1、2);t_res =(0:长度(data_res) 1) / f_res;情节(ts、数据、t_res data_res,“:”)包含(“时间(s)”)ylabel (“信号”)传说(“原始”,重新取样的,“位置”,“西北”)结束

图包含一个坐标轴对象。坐标轴对象包含时间(s), ylabel信号包含2线类型的对象。这些对象代表原始,重新取样。

输入参数

全部折叠

信号数据存储,指定为一个signalDatastore对象。

输出参数

全部折叠

信号数据,作为一个数组返回。默认情况下,调用一旦返回第一个变量的一个文件。如果你设置ReadSize财产n,这样n> 1,每次调用函数,该函数读取:

  • 第一个变量的第一个n文件,如果sds包含文件数据。

  • 第一个n成员,如果sds包含内存中的数据。

请注意

确定第一个变量在一个文件的名字,遵循这些步骤:

  • mat文件:

    s =负载(文件名);varNames =字段名(s);firstVar = s。(varNames {1});

  • CSV文件:

    选择= detectImportOptions(文件名,“PreserveVariableNames”,真正的);varNames = opts.VariableNames;字符串(varNames firstVar = {1});

如果SignalVariableNames属性数据存储包含不止一个信号的名称,然后团体是一个单元阵列。使用ReadOutputOrientation的属性数据存储控制的方向团体作为一个连续列数组或数组。

信号数据的信息,作为一个结构返回。

  • 在文件数据的情况下,信息包含时间信息(如果指定了的话),文件名,和变量名称用于读取信号和时间数据,如果这些信息中指定的signalDatastore

  • 如果数据存储包含内存数据,信息包含时间信息(如果指定了的话)和成员的名字。

版本历史

介绍了R2020a