【 MATLAB 】filter 函数介绍 之 Filter Data in Sections

【 MATLAB 】filter 函数介绍(一维数字滤波器)

在上篇博文中,里面有一个例子,就是过滤部分中的数据,这个部分中的数据的意思是如果有一个向量需要过滤,我们可以把它分为几段,然后分段过滤。

关于这个问题,使用语法:

[y,zf] = filter(___)

赋值符号左边的部分有一个y是过滤后的数据,那至于zf到底是个什么玩意,当时没有弄清楚,所以这里来专门讨论一番,参考MATLAB的参考文档的例子。

赋值符号右边的部分,可以是函数filter的语法中任何一种,即:

filter(b,a,x):对x进行滤波;

filter(b,a,x,zi):关于zi的解释,我们看下面这一段:


zi — Initial conditions for filter delays
[] (default) | vector | matrix | multidimensional array

Initial conditions for filter delays, specified as a vector, matrix, or multidimensional array.

滤波器延迟的初始条件,指定为矢量,矩阵或多维数组。

  • If zi is a vector, then its length must be max(length(a),length(b))-1.

  • If zi is a matrix or multidimensional array, then the size of the leading dimension must be max(length(a),length(b))-1. The size of each remaining dimension must match the size of the corresponding dimension of x. For example, consider using filter along the second dimension (dim = 2) of a 3-by-4-by-5 array x. The array zi must have size [max(length(a),length(b))-1]-by-3-by-5.

 

The default value, specified by [], initializes all filter delays to zero.

Data Types: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Complex Number Support: Yes


对比zf,看看zf的解释:

zf — Final conditions for filter delays
vector | matrix | multidimensional array

Final conditions for filter delays, returned as a vector, matrix, or multidimensional array.

滤波器延迟的最终条件,作为矢量,矩阵或多维数组返回。

  • If x is a vector, then zf is a column vector of length max(length(a),length(b))-1.

  • If x is a matrix or multidimensional array, then zf is an array of column vectors of length max(length(a),length(b))-1, such that the number of columns in zf is equivalent to the number of columns in x. For example, consider using filter along the second dimension (dim = 2) of a 3-by-4-by-5 array x. The array zf has size [max(length(a),length(b))-1]-by-3-by-5.

Data Types: double | single


filter(b,a,x,zi,dim):dim是指定维度,如果x是一个矩阵,那么如果dim为1(默认值),那么就把对矩阵的每个列进行滤波,如果dim为2,则对矩阵的行进行滤波。


Filter Data in Sections


Use initial and final conditions for filter delays to filter data in sections, especially if memory limitations are a consideration.


Generate a large random data sequence and split it into two segments, x1 and x2.
x = randn(10000,1);

x1 = x(1:5000);
x2 = x(5001:end);
The whole sequence, x, is the vertical concatenation of x1 and x2.

Define the numerator and denominator coefficients for the rational transfer function, 

b = [2,3];
a = [1,0.2];

Filter the subsequences x1 and x2 one at a time. Output the final conditions from filtering x1 to store the internal status of the filter at the end of the first segment.
[y1,zf] = filter(b,a,x1);

Use the final conditions from filtering x1 as initial conditions to filter the second segment, x2.
y2 = filter(b,a,x2,zf);
y1 is the filtered data from x1, and y2 is the filtered data from x2. The entire filtered sequence is the vertical concatenation of y1 and y2.

Filter the entire sequence simultaneously for comparison.
y = filter(b,a,x);

isequal(y,[y1;y2])


上面这个例子,验证了一种情况,就是如果对一个序列进行滤波,可以得到一个结果。

也可以通过另一种方式,就是把该序列分成两段,分段滤波,最后将滤波数据拼接起来,对比两种方式的最终结果,发现是一致的。

对第一段数据进行滤波时候会得到一个zf,这个zf作为第二段数据滤波时候的zi。

 

 


 

你可能感兴趣的:(#,区)