小编fra*_*ank的帖子

解释卡尔曼滤波器中的过程噪声术语

我只是在学习卡尔曼滤波器.在卡尔曼滤波器术语中,我对过程噪声有一些困难.在许多具体的例子中,过程噪声似乎被忽略了(大多数都集中在测量噪声上).如果有人能够通过示例向我指出一些介绍过程噪声的介绍级别链接,那就太棒了.

让我们使用一个具体的标量例子给出我的问题,给出:

x_j = a x_j-1 + b u_j + w_j
Run Code Online (Sandbox Code Playgroud)

让我们说x_j随着时间的推移模拟冰箱内的温度.它是5度,应该保持这种方式,所以我们建模a = 1.如果在某些时候t = 100,冰箱的温度变为7度(即炎热的天气,绝缘不良),那么我相信此时的过程噪声是2度.所以我们的状态变量x_100 = 7度,这是系统的真正价值.

问题1:

如果我然后解释我经常看到的用于描述卡尔曼滤波器的短语,"我们过滤信号x以使噪声w的影响最小化",http://www.swarthmore.edu/NatSci/echeeve1/Ref/Kalman/ ScalarKalman.html如果我们最小化2度的影响,我们是否试图摆脱2度的差异?但真正的状态是x_100 == 7度.当我们卡门过滤器时,我们对过程噪声做了什么?

问题2:

过程噪声有变化Q.在简单的冰箱示例中,模型似乎很容易,因为您知道底层的真实状态是5度,您可以将其Q视为与该状态的偏差.但是,如果真正的潜在状态随时间波动,那么当你建模时,这部分将被视为状态波动与"过程噪声".我们如何确定一个好的Q(再一个例子会很好)?

我发现,Q无论你处于哪个时间步长,总是会添加到协方差预测中(参见http://greg.czerniak.info/guides/kalman1/中的协方差预测公式),如果选择过大Q,那么看起来卡尔曼滤波器看起来并不是很好.

谢谢.

EDIT1我的解释

我对术语过程噪声的解释是系统的实际状态与从状态转移矩阵(即a * x_j-1)建模的状态之间的差异.卡尔曼滤波器试图做的是使预测更接近实际状态.从这个意义上讲,它实际上通过剩余反馈机制将过程噪声部分地"合并"到预测中,而不是"消除"它,以便它可以更好地预测实际状态.我在搜索的任何地方都没有看过这样的解释,我很感激有人评论这个观点.

kalman-filter

21
推荐指数
1
解决办法
2万
查看次数

在没有CPAN网络访问的计算机上安装具有大量依赖关系的Perl模块

我正在尝试在Linux服务器上安装DateTime机器.不幸的是,这个Linux服务器有一些限制的网络访问策略,阻止我直接使用CPAN shell下载内容或安装cpanminus.更改访问策略是我无法控制的,所以我正在寻找一种解决方法.我也没有root访问权限.

但是,我可以将任何内容下载到我工作的Window机器上,然后上传到该服务器上的文件共享.所以我开始逐个删除DateTime依赖项.我会下载一个模块,有时它会有Makefile.PL,有时它会有Build.PL.然后我将每个Build或Makefile重新绑定到我的INSTALL_BASE,测试每个模块.我做了大约20个模块,树木似乎扩展到更小的类,看不到尽头......

我希望你能告诉我一个更好的方法.有没有办法可以从具有所有DateTime依赖关系的CPAN访问权限(即我的Windows框)的机器下载到一个巨大的Perl包中,将其上传到Linux服务器,并在那里运行CPAN(无网络访问)把东西放在正确的地方?谢谢.

perl cpan

13
推荐指数
2
解决办法
3405
查看次数

请说明以下Python NumPy数组初始化和拼接示例

我正在使用Python 2.6版,我正在学习NumPy 1.3版.

我已经尝试了下面的几个NumPy数组初始化和列拼接示例,并在最后添加了一些内联问题作为注释和结果列表.希望有人可以向我解释行为差异背后的原因.很多相互关联的问题和相当长的帖子,但每个例子都很小,随便回答一个或几个.

import numpy as np

print "Initializing a number of numpy arrays:\n"
Run Code Online (Sandbox Code Playgroud)

a)从元组列表初始化

a = np.zeros((3,),dtype=('i4,i4,a1'))
a[:] = [(1, 2, 'A'), (3, 4, 'B'),(5, 6, 'A')]
print "a: "
print a         # print => [(1, 2, 'A') (3, 4, 'B') (5, 6, 'A')]
print repr(a)   # print => array([(1, 2, 'A'), (3, 4, 'B'), (5, 6, 'A')],
                #     dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '|S1')]
print '\n'
Run Code Online (Sandbox Code Playgroud)

b)正常的元组列表

b = [];
b[:] = [(1, 2, 'A'), (3, …
Run Code Online (Sandbox Code Playgroud)

python numpy multidimensional-array

5
推荐指数
1
解决办法
1074
查看次数

Ruby 的 Virtus gem 与 attr_accessor

我正在查看一些关于 Ruby 中服务对象的教程中使用的 Virtus gem。在 github 页面https://github.com/solnic/virtus中,它给出了以下示例。

将 Virtus 与类结合使用

您可以创建使用 Virtus 扩展的类并定义属性:

class User   include Virtus.model
  attribute :name, String   
  attribute :age, Integer   
  attribute :birthday, DateTime 
end

user = User.new(:name => 'Piotr', :age => 31) user.attributes # => { :name => "Piotr", :age => 31, :birthday => nil }

user.name # => "Piotr"

user.age = '31' # => 31 user.age.class # => Fixnum

user.birthday = 'November 18th, 1983' # => #<DateTime: 1983-11-18T00:00:00+00:00 (4891313/2,0/1,2299161)>

# mass-assignment user.attributes = { …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails virtus

5
推荐指数
1
解决办法
2705
查看次数

Perl概念动态引用数组

我试图在Perl中理解普通数组引用\ @array和[@array]之间的区别.

在下面的文章http://perl-begin.org/tutorials/perl-for-newbies/part2/中,它说"由方括号包围的数组([@array])返回对数组的动态引用.这个引用不直接影响其他值,这就是它被称为动态的原因."
上面的最后一句话,它表示引用不直接影响其他值,我不清楚,它们引用了什么其他值?一些网站复制并粘贴相同的解释.有人可以提供更好的解释,突出差异?

以下是他们提供的示例:

use strict;
use warnings;

sub vector_sum
{
    my $v1_ref = shift;
    my $v2_ref = shift;

    my @ret;

    my @v1 = @{$v1_ref};
    my @v2 = @{$v2_ref};

    if (scalar(@v1) != scalar(@v2))
    {
        return undef;
    }
    for(my $i=0;$i<scalar(@v1);$i++)
    {
        push @ret, ($v1[$i] + $v2[$i]);
    }

    return [ @ret ];
}

my $ret = vector_sum(
    [ 5, 9, 24, 30 ],
    [ 8, 2, 10, 20 ]
);

print join(", ", @{$ret}), "\n";
Run Code Online (Sandbox Code Playgroud)

但是,在上面给出的例子中,如果我改变了返回[@ret]; 到\ @ret,程序返回相同的结果,所以我不知道这是如何作为一个例子来说明动态参考.

谢谢.

arrays perl reference dynamic

4
推荐指数
1
解决办法
244
查看次数