罗兰谈MATLAB的艺术

将想法转化为MATLAB

请注意

罗兰谈MATLAB的艺术已退役,不会更新。

用ThingSpeak和MATLAB探索您的物联网数据

今天我想向你们介绍一位客座博主,Eric Wetjen,他是MathWorks的产品营销经理。今天,Eric将讨论ThingSpeak,一个用MATLAB收集和分析物联网(IoT)数据的平台。

内容

简介

你知道你可以从连接互联网的传感器中收集和分析数据吗ThingSpeak?ThingSpeak是一个用于物联网应用原型的web服务。ThingSpeak允许您收集、分析和处理数据,并在云中包含MATLAB分析应用程序,用于分析您发送到ThingSpeak的数据。我们将展示如何在桌面MATLAB中分析ThingSpeak数据,我们还将展示如何使用ThingSpeak内置的MATLAB分析应用程序在云中运行MATLAB分析代码。

在这个项目中,我们使用树莓派、网络摄像头和ThingSpeak来计算车辆数量,并分析繁忙公路上的交通模式。我们的汽车计数器发送数据给频道38629每15秒在ThingSpeak上。

网络摄像头图像中的汽车计数是在树莓派2上完成的,每15秒看到的汽车数量才会由设备发送到ThingSpeak。下面详细介绍了汽车计数算法的硬件设置和开发过程文件交换提交。传感器设置的图片和ThingSpeak中显示原始数据的视图如下所示。

一旦在ThingSpeak中收集到数据,我们就可以使用MATLAB来查看交通模式了。今天,我们将重点介绍使用MATLAB和ThingSpeak对交通数据进行数据分析和可视化。

离线分析:分析存储在ThingSpeak上的数据

为了深入了解我们的交通数据,我们首先需要将ThingSpeak中的数据导入到桌面MATLAB中。为了简化从ThingSpeak中检索数据,我们使用了ThingSpeak支金宝app持工具箱,可在MATLAB中央文件交换。

将一周的交通数据读入MATLAB

开始时,我们使用对象指定开始日期和结束日期datetime对象。因为我们每15秒向ThingSpeak发送一次数据,所以我们有大约40000个数据点需要检索。ThingSpeak在一次读取操作中只允许8000个点,所以我们创建了一个for循环批量收集数据。然后,我们将每次迭代的交通和时间数据附加到两个向量中,称为alltrafficData而且时间戳

endDate =日期时间(“3/13/2016”“InputFormat”“MM / dd / yyyy”);startDate =日期时间(“3/6/2016”“InputFormat”“MM / dd / yyyy”);创建日期向量dateVector = startDate: endDate;%检查最后一个dateVector值是否与endDate相同,如果%不附加它如果(dateVector(end) ~= endDate) dateVector = [dateVector, endDate];结束alltrafficData = [];时间戳= [];%以块方式读取数据,因为ThingSpeak每次读取限制为8000分-1 dateRange = [dateVector(dayCount), dateVector(dayCount+1)];[channelData, t] = thingSpeakRead(38629,“DateRange”, dateRange);[alltrafficData] = [alltrafficData;channelData];[timestamp] = [timestamp];t];结束

绘制原始交通数据

接下来,我们绘制数据并标记图形。从原始数据中可以清楚地看到每日流量的波动。很快,我们就可以看到早晨和下午“高峰时段”对应的高峰。

图(时间戳,alltrafficData)“日期”) ylabel (“每15秒间隔车辆数”网格)标题(“3月6日当周交通量”)传说(“西行交通”“东行交通”

以直方图的形式查看东行交通的每日总和

为了可视化每天的交通量,我们总结了原始交通数据,并使用条形图进行可视化。看起来我们繁忙的高速公路每天有45,000到65,000辆车!

eastTraffic = alltrafficData(:,2);westTraffic = alltrafficData(:,1);i = 1:4%去除几个PTS被5647平均除(一天分)eastTraffic(i) = [];westTraffic(i) = [];结束将数据分成7个块(大约一天24小时)dailysumeast = sum(重塑(eastTraffic, floor(length(alltrafficData)/7),[]));dates = dateVector;%转换为条形图的连续日期日期(8)= [];日期= datenum(日期);图栏(日期,每日最晚)网格包含(“日期”) ylabel (“每日车辆数目”) ax = gca;ax.YAxis.Exponent = 3;标题(3月6日当周东行交通量) datetick

更深入地了解个人日

为了更深入地了解我们的交通数据,我们查看了某一天的交通情况。对于每一天,我们指定一个开始时间和一个停止时间。

清晰的所有开始时间{1}=“2016年3月8日00:00:00”;stopTime {1} =“2016年3月8日23:59:59”我们从ThingSpeak中检索数据,然后我们%对数据进行抽样以去除短期波动。然后我们使用findpeaks函数用于绘制和查找交通量所在的时间%最高。为简单起见,我们只查看东行数据。startDate =日期时间(startTime{1},“InputFormat”' mm d, yyyy HH:mm:ss ');endDate = datetime(stopTime{1},“InputFormat”' mm d, yyyy HH:mm:ss ');datevector = [startDate, endDate];[Daily, t] = thingSpeakRead(38629);“DateRange”, datevector);只看向东行驶的车辆DailyEast = Daily(:, 2);时间戳=日期时间(t,“ConvertFrom”“datenum”);dateAnalyzed = startTime{1};dateAnalyzed = {dateAnalyzed(1:(end-8))};

减少采样到48个30分钟的数据块,并找到峰值

原始的交通数据非常不稳定,很难可视化。如果我们想知道一天中什么时候流量最大,我们需要在大于15秒的时间尺度上查看数据。为了做到这一点,我们把一天的24小时分成30分钟。每一段从整点开始,30分钟后结束。

downsamplesize =地板(长度(DailyEast)/48);teastper30 = datetime(开始时间{1});DailyEastper30(1:48) = 0;%预先分配K = 1:48计算每个30分钟区段的每日流量每日酵母(1+downsamplesize*(k-1):downsamplesize*k));Teastper30 (k+1) = Teastper30 (k)+1/48;%时间戳显示每个30分钟时间段的结束结束teastper30 = teastper30 ';Teastper30 (1) = [];中午12:30开始第一个垃圾箱timestampPer30 = teastper30;查找峰值及其时间(位置)[peaks,location] = findpeaks(DailyEastper30,“阈值”, 100,“MinPeakHeight”, 1100);%地块峰值图findpeaks(DailyEastper30, datenum(时间戳per30),“阈值”, 100,“MinPeakHeight”, 1100) datetick xlabel(“一天中的时间”) ylabel (“每30分钟车辆数目”)标题(strcat (“峰值音量”, {' '}, dateAnalyzed)) dateAnalyzed peaktimes = timestampPer30(位置)DailyVolume = sum(DailyEast)
dateAnalyzed = 'March 8, 2016 ' peaks = 08-Mar-2016 06:00:00 08-Mar-2016 07:30:00 08-Mar-2016 14:00:00 08-Mar-2016 15:30:00 08-Mar-2016 17:30:00 08-Mar-2016 20:00:00 DailyVolume = 51175

在线分析:在ThingSpeak中计算和调度MATLAB代码

到目前为止,我们已经将ThingSpeak的数据带回MATLAB中,对每周和每天的流量模式进行离线分析。但如果我们想计算每日流量并将数据发送到ThingSpeak上的另一个频道呢?离线计算非常简单,但ThingSpeak与MATLAB集成使我们能够在线进行计算。为了计算每日流量,我们使用Thingspeak.com上的MATLAB分析应用程序。我们编写代码获取前一天的原始交通数据,并对结果进行汇总。然后我们使用thingSpeakWrite命令将数据发送到一个名为Daily Volume的新通道。

最后,我们安排我们的分析在每天午夜后使用ThingSpeak TimeControl App运行一次。

在线查看计算数据

我们现在创建了一个频道,用来报告每天统计的汽车数量。因为这个频道是在ThingSpeak上,MATLAB分析应用程序是内置的,我们可以在任何时间使用PC或移动设备上的任何web浏览器查看这个分析。若要查看计算值,请转到ThingSpeak上的51671频道

因为ThingSpeak是一个云服务,即使你没有登录ThingSpeak,它也会每天执行MATLAB分析代码来计算这个值。

有关如何向ThingSpeak发送数据的更多信息,请参阅此金宝app支持页面.如果你有MathWorks账户,你就已经可以使用ThingSpeak了。只要登录ThingSpeak.com就可以探索了!

你想访问什么样的物联网数据?在您构建物联网系统原型时,您是如何进行在线和离线分析的?我们想听听在这里




发布与MATLAB®R2016a

|