Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中使用低通滤波器获得数据的相同端点_Matlab_Filter - Fatal编程技术网

在matlab中使用低通滤波器获得数据的相同端点

在matlab中使用低通滤波器获得数据的相同端点,matlab,filter,Matlab,Filter,这是我上一个问题的延伸: 我正在用偷听到的摄像机记录人们。我用一些软件记录了每个人的头部轨迹。我想从轨道周期性由于头部摆动 我采用低通巴特沃斯滤波器。我希望已过滤轨迹的起点和终点与未过滤轨迹相同 Data: K>> [xcor_i,ycor_i ] ans = -101.7000 -77.4040 -102.4200 -77.4040 -103.6600 -77.4040 -103.9300 -76.6720 -103.990

这是我上一个问题的延伸: 我正在用偷听到的摄像机记录人们。我用一些软件记录了每个人的头部轨迹。我想从轨道周期性由于头部摆动

我采用低通巴特沃斯滤波器。我希望已过滤轨迹的起点和终点与未过滤轨迹相同

Data:
K>> [xcor_i,ycor_i ]

ans =
    -101.7000  -77.4040
     -102.4200  -77.4040
     -103.6600  -77.4040
     -103.9300  -76.6720
     -103.9900  -76.5130
     -104.0000  -76.4780
     -105.0800  -76.4710
     -106.0400  -77.5660
     -106.2500  -77.8050
     -106.2900  -77.8570
     -106.3000  -77.8680
     -106.3000  -77.8710
     -107.7500  -78.9680
     -108.0600  -79.2070
     -108.1200  -79.2590
     -109.9500  -80.3680
     -111.4200  -80.6090
     -112.8200  -81.7590
     -113.8500  -82.3750
     -115.1500  -83.2410
     -116.1500  -83.4290
     -116.3700  -83.8360
     -117.5000  -84.2910
     -117.7400  -84.3890
     -118.8800  -84.7770
     -119.8400  -85.2270
     -121.1400  -85.3250
     -123.2200  -84.9800
     -125.4700  -85.2710
     -127.0400  -85.7000
     -128.8200  -85.7930
     -130.6500  -85.8130
     -132.4900  -85.8180
     -134.3300  -86.5500
     -136.1700  -87.0760
     -137.6500  -86.0920
     -138.6900  -86.9760
     -140.3600  -87.9000
     -142.1600  -88.4660
     -144.7200  -89.3210
代码(由@SleuthEye回答):

输出:


在上面的示例中,已过滤轨迹和未过滤轨迹的端点(左侧)不同。我怎样才能保证它是一样的?

你的问题很含糊,没有具体的问题。我假设您希望筛选数据与测量数据在同一点开始,但不确定为什么还没有发生,以及如何做到这一点

低通滤波器是一种降低快速变化影响的滤波器。这样做的一种方法,以及这里使用的方法,是使用滚动平均值。滚动平均值只是先前数据点的平均值。看起来您使用的是5个数据点的滚动平均值。因此,在过滤器提供单个数据点之前,您需要五个原始数据点

 -101.7000  -77.4040 }
 -102.4200  -77.4040 }                   }
 -103.6600  -77.4040 }                   }  
 -103.9300  -76.6720 }                   }
 -103.9900  -76.5130 } Filter point 1.   }
 -104.0000  -76.4780                     } Filter point 2.
 -105.0800  -76.4710
 -106.0400  -77.5660
 -106.2500  -77.8050
 -106.2900  -77.8570
 -106.3000  -77.8680
 -106.3000  -77.8710
为了解决这个问题,您可以将第一个数据点附加到数据集中四次,因为这意味着过滤器将产生相同数量的点。然而,这是一个相当粗糙的解决方案,因为您正在创建新数据。这可以非常简单地实现,例如,如果您的数据集被称为
myArray

firstEntry = myArray(1,:);
myNewArray = [firstEntry; firstEntry; firstEntry; firstEntry; myArray];
这将创建四个与第一个数据点相等的数据点,这将允许您对数据应用低通滤波器,并使其在同一点启动

希望这能有所帮助,尽管值得记住的是,过滤总是会导致数据丢失

因为您不想实施它,但希望其他人: 上述理论是正确的,但需要在向量末尾添加2个值:

x_last = xcor_i(end);
y_last = ycor_i(end);

xcor_i = [xcor_i;x_last;x_last];
ycor_i = [ycor_i;y_last;y_last];
这就产生了以下结果:


正如你所看到的,现在的结局几乎是一样的。

你的问题很模糊,没有具体的问题。我假设您希望筛选数据与测量数据在同一点开始,但不确定为什么还没有发生,以及如何做到这一点

低通滤波器是一种降低快速变化影响的滤波器。这样做的一种方法,以及这里使用的方法,是使用滚动平均值。滚动平均值只是先前数据点的平均值。看起来您使用的是5个数据点的滚动平均值。因此,在过滤器提供单个数据点之前,您需要五个原始数据点

 -101.7000  -77.4040 }
 -102.4200  -77.4040 }                   }
 -103.6600  -77.4040 }                   }  
 -103.9300  -76.6720 }                   }
 -103.9900  -76.5130 } Filter point 1.   }
 -104.0000  -76.4780                     } Filter point 2.
 -105.0800  -76.4710
 -106.0400  -77.5660
 -106.2500  -77.8050
 -106.2900  -77.8570
 -106.3000  -77.8680
 -106.3000  -77.8710
为了解决这个问题,您可以将第一个数据点附加到数据集中四次,因为这意味着过滤器将产生相同数量的点。然而,这是一个相当粗糙的解决方案,因为您正在创建新数据。这可以非常简单地实现,例如,如果您的数据集被称为
myArray

firstEntry = myArray(1,:);
myNewArray = [firstEntry; firstEntry; firstEntry; firstEntry; myArray];
这将创建四个与第一个数据点相等的数据点,这将允许您对数据应用低通滤波器,并使其在同一点启动

希望这能有所帮助,尽管值得记住的是,过滤总是会导致数据丢失

因为您不想实施它,但希望其他人: 上述理论是正确的,但需要在向量末尾添加2个值:

x_last = xcor_i(end);
y_last = ycor_i(end);

xcor_i = [xcor_i;x_last;x_last];
ycor_i = [ycor_i;y_last;y_last];
这就产生了以下结果:


正如您所看到的,现在的结尾非常接近相同。

在我的代码中,起点(最右边)是相同的。终点不同(最左边的点)。那么你的问题是什么?您的问题是如何使过滤结果的左端点与原始数据相同吗?如果是这样的话,试试我在回答中提出的答案。我不明白你的方法。如果您使用提供的数据并显示一个图来比较您的方法,这将是非常有用的。您的数据的格式非常不利于方便使用,而且您没有说明参数
a
b
是什么,因此无法重新创建您所做的操作。只需将第一点重复五次,我就成功地获取了您的数据并弄清楚了您在做什么,将来您真的应该包含所有用于获取当前结果的代码。看看我编辑的答案,它看起来像我认为你想要得到的。我的代码中的起点(最右边)是相同的。终点不同(最左边的点)。那么你的问题是什么?您的问题是如何使过滤结果的左端点与原始数据相同吗?如果是这样的话,试试我在回答中提出的答案。我不明白你的方法。如果您使用提供的数据并显示一个图来比较您的方法,这将是非常有用的。您的数据的格式非常不利于方便使用,而且您没有说明参数
a
b
是什么,因此无法重新创建您所做的操作。只需将第一点重复五次,我就成功地获取了您的数据并弄清楚了您在做什么,将来您真的应该包含所有用于获取当前结果的代码。看看我编辑的答案,它看起来像是我认为你想要得到的。