GithubHelp home page GithubHelp logo

data-fusion-for-indoor-tracking-by-rfid's Introduction

欢迎来到“多传感器数据融合”课程

课程网站 data fusion on GitHub 包含了这门课程的所有信息。

课程内容

  本课程共分为三大部分。它们的关系见下图课程内容结构关系   课程主要包括理论、方法及实现系统等内容。

文件说明 

课程资料放在每一个子目录下,每个子目录的名字以“Lesson”开头,后面加数字,例如Lesson1表示第一部分,即理论部分。 每个文件夹有4种文件:

  1. 课程说明PDF文件,该文件详细给出每一次课的课程内容。
  2. matlab程序文件,每一次课程涉及到的所有程序,包括所需的数据。
  3. readme文件,该文件只是简要介绍每次课程的大致内容,共学习者迅速了解该课程。
  4. 如何使用matlab文件的相关说明。

关于Matlab程序

为使用方便,请将所有matlab文件下载后放在一个目录下例如datafusion,并确保已经将其放在matlab的有效路径下。

MATLAB语言基础知识

已有功底的飘过~~~~~

编程知识之一:matlab程序结构

MATLAB语言广泛应用于各种仿真研究中,尤其是自动控制领域。与Python,R等具有计算功能的语言相比,MATLAB具有更为专业的工具包。 MATLAB程序通常包括四部分,下面我们来详细说明。

第一部分:清除主界面和内存空间

MATLAB几十年来一直沿用主界面风格,可以在命令窗口(Command window)上调试某一条语句是否正确,还可以执行输入命令。当程序出现错误时,命令窗口也会出现红色报错提示,想要输出某个变量的结果时,命令窗口也会非常方便地显示运行结果。可见主界面的内容是相当丰富的,但主界面保存的变量并不会自己清空,其历史命令(Command history)及工作空间 (Workspace)的变量自动保存着。 这会使用户弄不清楚哪个是当前程序的执行结果,当程序报错时,也给错误排查带来了困难。因此在程序执行的开始,最好清除主界面现有的内容,这样在本次程序执行之后,方便分析本次程序执行的结果。

在MATLAB中,清除主界面的语句是

clc; 

清空内存变量是  

clear; 

关闭所有图形窗口是

  close all;

建议使用者在程序的开始就使用以上命令,这个习惯对管理程序数据空间很有帮助。 MATLAB的“管辖”的数据空间范围包括内存空间、路径,输入命令,类似这样的超简单的语句:

a=b+1

MATLAB首先寻找变量b的值,如果内存空间已经有该变量的值,该语句在执行的时候就不会出错。但如果变量b在之前的程序中已被赋值,那么,在内存空间中已经存在b值,当前执行的程序当中并没有对b进行赋值,但由于MATLAB在内存空间中有b值就导致a被赋值。

然而,此时程序是错的,因为没有在使用变量之前进行赋值。人们会大呼“程序通过了!”然后,很开心地关机,当下一次打开MATLAB时,MATLAB会再次运行原程序,会发现系统出现错误提示“b没有赋值”,这对一个初学者来讲是相当费解的一件事:程序昨天还好好的,为什么又出现了错误?

现在明白了吧:由于没有使用clear语句清除内存空间,导致最初运行程序时,b变量没有初始化的错误“漏”报。

这样的错误不是每次都会有,但是在算法研究的过程中错误率的确非常高。初学者由于缺乏专业的编程经验,在变量命名时比较随意,常常使用c、A、PP、n等简单的字母变量,在内存空间中留下痕迹。因此,养成一个好习惯至关重要,即在程序的开始使用清除主界面的clc语句,在“视觉”上有一个良好的开始,迎接“干干净净”的主界面;使用clear清除内存空间,使内存空间“干干净净”,程序每次都重新开始。

第二部分

设置问题中交代的因变量,一般是一些已知的数据;

第三部分

需要解决计算问题的结果变量,需要依据题意进行计算;

第四部分

结果输出,有的只需要输出数据,而大多数情况下都需要用图形来表达。这几部分很多MATLAB书籍进行了详细介绍,本书不再赘述。下面使用一段具体的实例进行说明。

假设温度传感器A具有均匀分布测量噪声,噪声的均值为0,方差为2,请模拟当室内温度是20的时候,传感器的输出数据是多少?给出1000个数。

% 清除主界面和内存空间
clc;
clear;
% 设置变量:
m=20;
v=2;

在MATALB中,通过使用randn函数产生随机数。这里,测量值是真实值与测量噪声的叠加。根据测量方差和均值可以模拟出噪声,也就是将randn产生的结果乘以标准差,然后加上期望均值并将其与真实值叠加:

% 室内温度
s1=m+sqrt(v)*randn(1,1000); %这里期望均值为0,所以语句中没有显示均值。

最后,将模拟出的测量噪声如图所示,测量噪声是一个离散序列,所以形式非常简单,使用plot函数就可以实现:

plot(s1)
xlabel(‘采样时刻’)
ylabel(‘测量数据’)

模拟传感器A的测量数据输出

模拟传感器A的测量数据输出

MATLAB画图函数非常丰富,还可以对图设定适当的标注来提高效果图的表达方式和内容,增强可视化效果,比如横坐标、纵坐标的设置,用不同线型来区别不同变量的曲线,或在一张图上画出多个图进行对比分析。详情可查阅MATLAB相关书籍。

下面再看几个类似的例子:

若传感器B的噪声更大些,其噪声的均值为0,方差为8,请模拟当室内温度是20的时候,传感器的输出数据是多少?给出1000个数。 同理,MATLAB程序应该有四大部分,可以给出下面这段程序:

%C2_1
clc;
clear;
m=20; 
v=8; 
s2=m+sqrt(v)*randn(1,1000); 
plot(s2) 
xlabel(‘采样时刻’) 
ylabel(‘测量数据’) 

模拟传感器B的测量数据输出

模拟传感器B的测量数据输出

如果室温在上升,实际的上升曲线是2*t+20,传感器A的输出数据是多少?给出1000个数。

与上面两例不同,本例的实际室温随着时间的变化而变化,为了描述这个关系,需要给出时间t的变化,然后再考虑测量噪声与真值的关系。在实际的仿真中,需要指定时间t的仿真范围,也就是开始时间和结束时间,一般情况下开始时间可以设为从0开始,而结束的时间则可以根据实际情况进行设置。但是题中要求我们给出1000个数据,也就是t要包含1000个数据点。

我们可以用语句t=0:0.01:9.99来表示从0时刻到9.99秒的采样时间,每0.01秒采集的一个数据共获得1000个测量数据。或者使用另外一个语句t=linspace(0,9.99,1000),也能输出1000个结果值。若使用传感器A进行测量,在真值之上需要叠加测量噪声获得测量数据,程序如下

%C2_2 
clc; 
clear; 
t=0:0.01:9.99; 
m=2*t+20; 
v=2; 
s3=m+sqrt(v)*randn(1,1000); 
plot(t,s3) 
xlabel('t') 
ylabel('measurement data')

室内温度变化时模拟传感器A测量数据的输出

室内温度变化时模拟传感器A测量数据的输出

编程知识之二:MATLAB函数文件

本小节对MATLAB函数的知识进行简单介绍。

MATLAB语言除了主程序(如上述编写的这些小程序)之外,还可以编写函数文件。

以下面的小例子来说明函数文件的格式: 1)在MATLAB的新建function文件中,编写如下程序并进行保存:

function s = sumfunc (a,b) s = a+b; 

2)然后在MATLAB的工作空间中调用sumfunc函数,便可完成MATLAB函数的编写目的。

在上述程序中,文件需要有关键字,即文件中第一行。函数文件必须由function开头,然后标明函数的输入输出变量。在函数体中需要表明函数输入输出变量之间的关系,如在上述小例子中,函数的输入输出是简单的求和关系。

在调用函数时可以使用

y=sumfunc (3,4)

语句,会得出y=7的计算结果。

总结一下,本小节介绍了仿真语言的基础知识,以编写仿真程序的四部分步骤为例,简单介绍了MATLAB语言的基本使用方法,以及函数的编写。给出了几个小实例,来说明仿真过程产生的数据方法。如果想要更深入地了解MATLAB语言,可以参阅其它相关书籍。

data-fusion-for-indoor-tracking-by-rfid's People

Contributors

xue-bojin avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.