1 Introduction

Since the first pulse-code modulation transmission of digitally quantized speech, in World War II, digital signal processing (DSP) began to proliferate to all areas of human life. A classic DSP is based on linear systems described by impulse response functions and transfer functions implemented by structures built from adders, multipliers, and unit delays. Another approach was initiated by [31], known as the state space approach. It was also extended to the 2-D case by Roesser [18], as well as to three-dimensional (3-D) [9]. The steady increase in computational power encourages applying DSP techniques to multidimensional processing. However, the n-dimensional (n-D) DSP development has encountered difficulties caused by n-D polynomials [5]. Namely, there is no straightforward generalization of the fundamental theorem of algebra to higher dimensions. Classical digital systems are known to possess poor parameters under finite-precision arithmetic, like the sensitivity of the frequency response to changes in the structural parameters, noise, intrinsic oscillations, and limit cycles. These effects have led to the invention of wave filters [6] and orthogonal filters [2, 3]. The most common approach to orthogonal filter synthesis is a transfer function decomposition and the state space approach. When it comes to multidimensional DSP, the former technique is of a limited use due to the n-D polynomials. In contrast, the latter provides an opportunity to extend 1-D state space techniques to higher dimensions, thanks to the 2-D, 3-D, and possibly n-D state space equations. The state space approach to lossless systems was initiated by the famous paper [30], where paraunitary matrix synthesis techniques were developed for the 2-D transfer function of a continuous system. The state space approach was also used to develop 2-D orthogonal filter synthesis [16] and simplified to cover a class of separable-denominator orthogonal filters [28] which found to be useful in real-time processing [21].

Nowadays, one can observe that a processed data becomes n-D like video, multichannel audio, machine vision, to name a few. The 3-D processing is especially important in medicine [1] and image/video processing [5, 10] but also finds applications in other areas like material structures [12].

DSP synthesis is based on difference equations usually transformed by the \(\mathcal {Z}\) transform. For the 3-D function \(f(x_1, x_2 ,x_3)\), this is given by

$$\begin{aligned} \begin{aligned} \mathcal {Z}_3 \left\{ f(x_1, x_2 ,x_3) \right\} = \sum _{x_1=-\infty }^\infty \sum _{x_2=-\infty }^\infty \sum _{x_3=-\infty }^\infty f(x_1, x_2 ,x_3) z_1^{-x_1} z_2^{-x_2} z_3^{-x_3}, \end{aligned} \end{aligned}$$
(1)

where \(z_1\), \(z_2\), and \(z_3\) are complex numbers. Linear time invariant filters are usually classified into recursive and non-recursive. The latter, called finite impulse response (FIR) filters, are very popular due to their simplicity and natural stability. Typically, they are described by a transfer function which is the \(\mathcal {Z}\) transform of its impulse response. For the 1-D case, it is given by

$$\begin{aligned} T(z)=a_{0}+a_{1}z^{-1}+ \cdots +a_nz^{-n}=\sum _{i=0}^na_{i}z^{-i}, \end{aligned}$$
(2)

where \(a_0,\ldots ,a_n\) are real constant coefficients. In the 3-D case, the transfer function of an FIR filter extends to

$$\begin{aligned} T(z_{h},z_{v},z_{d})=\sum _{i=0}^{n} \sum _{j=0}^{m} \sum _{k=0}^{l} a_{ijk}z_{h}^{-i}z_{v}^{-j}z_{d}^{-k}. \end{aligned}$$
(3)

In this paper, we deal with a class of orthogonal filters. Introducing the energy of a 3-D real vector function \(f(x_1, x_2 ,x_3)\), in the form

$$\begin{aligned} \mathcal {E}\{f(x_1, x_2 ,x_3)\}=\sum _{x_1=-\infty }^\infty \sum _{x_2=-\infty }^\infty \sum _{x_3=-\infty }^\infty f^\mathrm{T}(x_1, x_2 ,x_3)f(x_1, x_2 ,x_3), \end{aligned}$$
(4)

we define an orthogonal filter to be a system which preserves the energy, i.e., the input energy equals the output energy. Technically, we are about to find a net of Givens rotations which realizes a given transfer function between two ports of that net. The Givens rotation rotates a vector \([u_s,u_t]^\mathrm{T}\) by \(\alpha \) radians, i.e., it implements the following set of equations

(5)

We will denote it by \(R_{s,t}(\alpha )\) and use the graphical symbol shown in (5). They are usually implemented using an iterative algorithm called CORDIC [11]. To obtain high throughput, we also utilise permutations in our structures, given by

(6)

It is known that the following holds:

Theorem 1

[7] Transfer function \(H(z_1,z_2,z_3)\) of a 3-D orthogonal filter satisfies

  1. 1.

    \(H(z_1,z_2,z_3)\) is rational in \(z_1,z_2,z_3\);

  2. 2.

    \(H(z_1,z_2,z_3)\) is holomorfic for all \(|z_1|\ge 1,|z_2|\ge 1,|z_3|\ge 1\);

  3. 3.

    \(H(z_1,z_2,z_3)\) is paraunitary, i.e.

    $$\begin{aligned} H^\mathrm{T}(z_1^{-1},z_2^{-1},z_3^{-1})H(z_1,z_2,z_3)=I. \end{aligned}$$
    (7)

The paraunitary condition (7) imposes the single-input single-output system to have a constant, unit frequency response. Typically, orthogonal systems have more inputs and outputs (at least two outputs) to implement practical non-flat frequency responses. During the synthesis process, we use a state space representation [17]. For given

$$\begin{aligned} u(d)=\begin{bmatrix}u_1(d)\\u_2(d)\\\vdots \\u_{N_u}(d)\end{bmatrix}, \quad y(d)=\begin{bmatrix}y_1(d)\\y_2(d)\\\vdots \\y_{N_y}(d)\end{bmatrix}, \quad x(d)=\begin{bmatrix}x_1(d)\\x_2(d)\\\vdots \\x_{N_x}(d)\end{bmatrix}, \end{aligned}$$
(8)

which are input, output, and state vector, respectively, it is defined by

$$\begin{aligned} \begin{bmatrix}x(d+1)\\y(d)\end{bmatrix}= \tau \begin{bmatrix}x(d)\\u(d)\end{bmatrix}. \end{aligned}$$
(9)

\(\tau \) is a real constant partitioned matrix of the form

$$\begin{aligned} \tau =\begin{bmatrix}A&B\\C&D\end{bmatrix}. \end{aligned}$$
(10)

2-D state space equations, known as the Roesser model, are given by [18]

$$\begin{aligned} \begin{bmatrix}x_h(h+1,v)\\x_v(h,v+1)\\y(h,v)\end{bmatrix}= \tau \begin{bmatrix}x_h(h,v)\\x_v(h,v)\\u(h,v)\end{bmatrix}. \end{aligned}$$
(11)

Similarly, u(hv), y(hv) and \(x_h(h,v)\), \(x_v(h,v)\) are the 2-D input, output, and two state vectors in h and v directions, respectively, and can be represented in the following form

$$\begin{aligned} \begin{aligned} u(h,v)= & {} \begin{bmatrix}u_1(h,v)\\u_2(h,v)\\\vdots \\u_{N_u}(h,v)\end{bmatrix}, \quad y(h,v)= & {} \begin{bmatrix}y_1(h,v)\\y_2(h,v)\\\vdots \\y_{N_y}(h,v)\end{bmatrix},\\ x_h(h,v)= & {} \begin{bmatrix}x_{h1}(h,v)\\x_{h2}(h,v)\\\vdots \\x_{hN_h}(h,v)\end{bmatrix}, \quad x_v(h,v)= & {} \begin{bmatrix}x_{v1}(h,v)\\x_{v2}(h,v)\\\vdots \\x_{vN_v}(h,v)\end{bmatrix}. \end{aligned} \end{aligned}$$
(12)

It is easy to show that if \(\tau \) is an orthogonal matrix, i.e., \(\tau ^\mathrm{T}\tau =I\), then the systems described by (9) and (11) are orthogonal filters. During synthesis, this property allow us to focus on the state space matrices orthogonality instead of the energy of signals.

We say that a system described by the impulse response r(hvd) is separable if it can be represented in the form

$$\begin{aligned} r(h,v,d)=r_h(h)r_v(v)r_d(d). \end{aligned}$$
(13)

Otherwise, we call it non-separable.

Nowadays, one can observe that most of n-D DSP designs are based on intuitive manipulation applied to a given computational algorithm like ordering multipliers and adders to speed up calculations. Most of the time, no other parameters, except speed and chip area occupation, are taking into account. Unfortunately, when one improves one parameter, another gets worse. This can readily be seen when comparing direct form structures of infinite impulse response 1-D digital filter (fast and inaccurate) and cascade ones (more accurate but output is delayed) for high orders. Similar problems are observed in active electronic filters compared to passive ones made of inductors, capacitors, and resistors, as well as in classic 1-D DSP direct form structures versus wave and orthogonal filters. There are several other parameters influencing the design performance like the sensitivity of the frequency response to changes in the structural parameters, noise, intrinsic oscillations, and limit cycles. So, the idea which motivated the authors in this paper is that one can design better n-D systems by incorporating the techniques which helped in 1-D domain like the orthogonal filters technique. A novelty of our approach is that we can design orthogonal 3-D filters consisting of Givens rotations. To the best of the authors’ knowledge, no other techniques to synthesize 3-D rotation structures have yet been published. The scope of the paper is to present details of the synthesis algorithms for separable and non-separable systems. The main idea of our approach is to decompose a 3-D systems into a connection of lower dimension blocks and then apply previously elaborated, 1-D and 2-D orthogonal synthesis procedures [24, 26].

The paper is organized as follows. In Sect. 2.1, we present details of the synthesis algorithm of separable orthogonal 3-D filters. Next, an example which illustrates that method is presented in Sect. 2.2 (3-D Gaussian filter). In Sect. 3.1, an expanded version of the technique for the non-separable case is proposed followed by its application in Sect. 3.2 (3-D Laplace filter). In the examples included in this paper, we utilize the standard sample by sample ordering which converts the 3-D signal into 2-D images processed image by image.

2 Separable Orthogonal 3-D FIR Filters

2.1 Synthesis Algorithm

For a separable 3-D system, we represent its transfer function (3) in the form

$$\begin{aligned} T(z_h,z_v,z_d)= & {} T_h(z_h)T_v(z_v)T_d(z_d)\nonumber \\= & {} \left( \sum _{i=0}^n a_{hi}z_h^{-i}\right) \left( \sum _{j=0}^m a_{vj}z_v^{-j}\right) \left( \sum _{k=0}^l a_{dk}z_d^{-k}\right) . \end{aligned}$$
(14)

Applying the 1-D synthesis technique, presented in [25], to \(T_h(z_h)\), \(T_v(z_v)\), and \(T_d(z_d)\) separately, we have paraunitary systems \(H_h(z_h)\), \(H_v(z_v)\), and \(H_d(z_d)\) for which we obtain three 1-D state space realizations spanned on a 3-D domain:

$$\begin{aligned} \left[ \begin{array}{l}x_h(h+1,v,d)\\ y_h(h,v,d)\end{array}\right] =\tau _{h}\left[ \begin{array}{l}x_h(h,v,d)\\ u(h,v,d)\end{array}\right] \text { for }H_h(z_{h}) \end{aligned}$$
(15a)
$$\begin{aligned} \left[ \begin{array}{l}x_v(h,v+1,d)\\ y_v(h,v,d)\end{array}\right] =\tau _{v}\left[ \begin{array}{l}x_v(h,v,d)\\ u_{v}(h,v,d)\end{array}\right] \text { for }H_{v}(z_{v}) \end{aligned}$$
(15b)
$$\begin{aligned} \left[ \begin{array}{l}x_d(h,v,d+1)\\ y_d(h,v,d)\end{array}\right] =\tau _{d} \left[ \begin{array}{l}x_d(h,v,d)\\ u_d(h,v,d)\end{array}\right] \text { for }H_{d}(z_{d}). \end{aligned}$$
(15c)

We also get scaling factors \(k_h\), \(k_v\) and \(k_d\), which are the maxima of the frequency response squared for \(H_h(z_h)\), \(H_v(z_v)\), and \(H_d(z_d)\), respectively. Then, each state space realization in (15) is implemented using pipeline structures \(H_h\), \(H_v\), and \(H_d\), respectively. Constructing a cascade connection of these three implementations, we obtain the separable 3-D orthogonal pipeline structure shown in Fig. 1.

Fig. 1
figure 1

Block diagram of a 3-D separable orthogonal FIR filter

2.2 Realization Example of a Gaussian Filter

Let us give a design example of a separable 3-D FIR Filter. We have chosen a Gaussian filter whose impulse response is given by

$$\begin{aligned} r(h,v,d)= q^3\exp {\left( -\frac{h^2 + v^2 + d^2}{2\sigma ^2}\right) }, \end{aligned}$$
(16)

where

$$\begin{aligned} q=\root 3 \of {\frac{1}{\sigma \sqrt{2\pi }}}. \end{aligned}$$
(17)

Substituting (16) into (13), we have

$$\begin{aligned} r_h(h)=r(h),\quad r_v(v) = r(v),\quad r_d(d) = r(d), \end{aligned}$$
(18)

where

$$\begin{aligned} r(x)=q\cdot \exp {\left( -\frac{x^2}{2\sigma ^2}\right) }. \end{aligned}$$
(19)

By (14), we obtain

$$\begin{aligned} T_{h}(z_h)=T(z_h),\quad T_v(z_v)=T(z_v),\quad T_d(z_d)=T(z_d) , \end{aligned}$$
(20)

where

$$\begin{aligned} T(z)=\sum _{i=0}^N r(i-n_0)z^{-i}. \end{aligned}$$
(21)
Table 1 Kernel coefficients of 3-D Gaussian filter (\(\sigma =0.7\))

The constant \(n_0\) is chosen to shift the origin of (19). The parameters for the filter have been taken from [1], i.e., \(\sigma =0.7\), \(n_0=2\), and \(h,v,d=-2,-1,0,1,2\). Substituting them into (21), we obtain kernel coefficients of the Gaussian filter which are presented in Table 1. From (20) we see that it suffice to design a state space system by the technique presented in [25] applied to T(z), which is given by

$$\begin{aligned} T(z)= & {} 0.0139950 + 0.2988453{z}^{-1} + 0.8290945{z}^{-2} \nonumber \\&+\, 0.2988453{z}^{-3} + 0.0139950{z}^{-4}. \end{aligned}$$
(22)

The synthesis algorithm is as follows. We construct a paraunitary transfer vector:

$$\begin{aligned}&H(z)=\begin{bmatrix} \frac{1}{\sqrt{k}}T(z) \\ G(z) \end{bmatrix}\nonumber \\&\quad =\begin{bmatrix} 0.0096201 + 0.2054237{z}^{-1} + 0.5699125{z}^{-2} + 0.2054237{z}^{-3} + 0.0096201{z}^{-4} \\ 0.5882043 - 0.4851375{z}^{-1} - 0.0960584{z}^{-2} - 0.0068492{z}^{-3} - 0.0001573{z}^{-4} \end{bmatrix}\qquad \nonumber \\ \end{aligned}$$
(23)

where \(G(z^{-1})G(z)=1-\frac{1}{k}T^\mathrm{T}(z^{-1})T(z)\) and k is a constant scalar chosen to make the factorization possible. We have chosen \(k=k_h=k_v=k_d=1.4547750\) which is the maximum of the frequency response of \(|T(e^{j\omega })|^2\). Next, we represent (23) in the form:

$$\begin{aligned} H(z)=\sum \limits _{i=0}^{m}H_iz^{-i} \end{aligned}$$
(24)

where:

$$\begin{aligned} H_{0}= & {} \begin{bmatrix} 0.0096201 \\ 0.5882043 \end{bmatrix} H_{1} = \begin{bmatrix} 0.2054237 \\ -0.4851375 \end{bmatrix} H_{2} = \begin{bmatrix} 0.5699125 \\ -0.0960584 \end{bmatrix}\nonumber \\ H_{3}= & {} \begin{bmatrix} 0.2054237 \\ -0.0068492 \end{bmatrix} H_{4} = \begin{bmatrix} 0.0096201 \\ -0.0001573 \end{bmatrix}. \end{aligned}$$
(25)

By applying QR to \(\begin{bmatrix} H_1&H_2&H_3&H_4 \\ H_2&H_3&H_4&0 \\ H_3&H_4&0&0 \\ H_4&0&0&0 \end{bmatrix} = \hbox {QR} = Q\begin{bmatrix} M \\ 0 \end{bmatrix}\), we find the full rank \(M=\begin{bmatrix}M_0&M_1&M_2&M_3\end{bmatrix}\), where

$$\begin{aligned} M_{0}= & {} \begin{bmatrix} -0.8086551 \\ 0 \\ 0 \\ 0 \end{bmatrix} M_{1} = \begin{bmatrix} -0.3504384 \\ -0.5035462 \\ 0 \\ 0 \end{bmatrix}\nonumber \\ M_{2}= & {} \begin{bmatrix} -0.0630916 \\ -0.1938233 \\ 0.0281133 \\ 0 \end{bmatrix} M_{3} = \begin{bmatrix} -0.0025382 \\ -0.0091515 \\ 0.0015418 \\ -0.0000022 \end{bmatrix}. \end{aligned}$$
(26)

For (23), we determine the state space representation (9), where \(A=\begin{bmatrix}M_1&M_2&M_3&0\end{bmatrix}M^{-1}\), \(B=M_0\), \(C=\begin{bmatrix} H_1&H_2&H_3&H_4 \end{bmatrix}M^{-1}\), and \(\hat{D}=H_0\):

$$\begin{aligned} A= & {} \begin{bmatrix} 0.4333595&-0.1762979&-0.3332045&-0.1269695 \\ 0.6226959&-0.0484429&0.7379438&0.2552332 \\ 0&-0.0558305&-0.3300750&0.9408855 \\ 0&0&-0.0000769&-0.0548415 \end{bmatrix} \nonumber \\ B= & {} \begin{bmatrix} -0.8086551 \\ 0 \\ 0 \\ 0 \end{bmatrix} \nonumber \\ C= & {} \begin{bmatrix} -0.2540313&-0.9550070&0.1527338&-0.0030788 \\ 0.5999313&-0.2267528&-0.4605829&-0.1745056 \end{bmatrix} \nonumber \\ \hat{D}= & {} \begin{bmatrix} 0.0096201 \\ 0.5882043 \end{bmatrix}. \end{aligned}$$
(27)

We apply similarity transformation to (27) starting from Schur decomposition of A (to find upper triangular representation) which changes also B and C which leads to a new matrices \(A_U\), \(\hat{B}_U\), and \(C_U\)

$$\begin{aligned} A_U= & {} \begin{bmatrix} 0&-0.9400852&0.2544060&0.0773702 \\ 0&0&0.6657319&-0.2543591 \\ 0&0&0&0.9401080 \\ 0&0&0&0 \end{bmatrix} \nonumber \\ \hat{B}_U= & {} \begin{bmatrix} -0.2133518 \\ 0.7014064 \\ 0.3408316 \\ 0.0163420 \end{bmatrix} \nonumber \\ C_U= & {} \begin{bmatrix} -0.9998661&-0.0056070&-0.0114712&-0.0034886 \\ 0.0163636&-0.3408934&-0.7013894&-0.2133073 \end{bmatrix}. \end{aligned}$$
(28)

Next, we extend \(\begin{bmatrix} A_U&\hat{B}_U \\ C_U&\hat{D} \end{bmatrix}\) to be a square matrix [27, 29] which leads to final state space realization, given by

$$\begin{aligned}&A_h=A_v=A_d= \begin{bmatrix} 0&-0.9400852&0.2544060&0.0773702 \\ 0&0&0.6657319&-0.2543591 \\ 0&0&0&0.9401080 \\ 0&0&0&0 \end{bmatrix} \nonumber \\&B_h=B_v=B_d=\begin{bmatrix} -0.2133518&0.0034871 \\ 0.7014064&-0.0114639 \\ 0.3408316&-0.0055706 \\ 0.0163420&0.9998665 \end{bmatrix} \nonumber \\&C_h=C_v=C_d=\begin{bmatrix} -0.9998661&-0.0056070&-0.0114712&-0.0034886 \\ 0.0163636&-0.3408934&-0.7013894&-0.2133073 \end{bmatrix} \nonumber \\&D_h=D_v=D_d=\begin{bmatrix} 0.0096201&-0.0001573 \\ 0.5882043&-0.0096137 \end{bmatrix}. \end{aligned}$$
(29)

Applying the Givens decomposition and permutations to (29), we obtain the pipeline rotation structure shown in Fig. 2 whose parameters are presented in Table 2 (detailed algorithm of the decomposition is presented in [26]).

Fig. 2
figure 2

Block diagram of the 1-D sub-block of the 3-D orthogonal Gaussian filter

Table 2 Component parameters of the 1-D sub-block of the 3-D Gaussian filter

To apply the obtained 3-D Gaussian filter to image processing, we need to link each independent variable h, v, and d with the dimensions of an image. To keep things simple, we assign h, v, and d to be indexes of the 3-D image in the horizontal (rows), vertical (columns), and depth (frames) dimensions, respectively. Suppose that an image frame is of size \(H\times V\). We assume that it is processed sample by sample using row by row and frame by frame ordering. To do this, the unit delays D in each state space system \(H_h\), \(H_v\), and \(H_d\), shown in Fig. 2, need to be replaced with the following 1-D delays: \(z^{-1}\), \(z^{-H}\), and \(z^{-HV}\), respectively. The 3-D Gaussian filter has been modelled in the Scilab environment [22]. The impulse response of the filter has been simulated for the \(8\times 8\times 8\) 3-D Kronecker delta matrix input. Obtained results are similar to shown in Table 1 with mean-squared error which equals to \(6.346\cdot 10^{-23}\). The filter has been tested with a real 3-D medical DICOM image taken from [4]. For this task, the authors have implemented Scilab procedures to read and write DICOM files.

3 Non-separable Orthogonal 3-D FIR Filters

3.1 Synthesis Algorithm

Suppose we are given a non-separable transfer function (3). To obtain a rotation structure in this case, we rearrange (3) into one of the following form:

$$\begin{aligned} H(z_{h},z_{v},z_{d})= & {} \sum _{j=0}^{m} H_{j}(z_{h},z_{d}) z_{v}^{-j} \end{aligned}$$
(30a)
$$\begin{aligned}= & {} \sum _{i=0}^{n} H_{i}(z_{v},z_{d}) z_{h}^{-i} \end{aligned}$$
(30b)
$$\begin{aligned}= & {} \sum _{k=0}^{l} H_{k}(z_{v},z_{h}) z_{d}^{-k}. \end{aligned}$$
(30c)

From (30), we have three ways to decompose the system into a cascade connection of 2-D and 1-D blocks. We have chosen (30a); the other two structures can be obtained in a similar way. The coefficients \(H_{j}(z_{h},z_{d})\) can be represented in the so-called Gram form

$$\begin{aligned} H_{j}(z_{h},z_{d}) =Z_{d} C_{j} Z_{h}, \end{aligned}$$
(31)

where

$$\begin{aligned} C_{j}= \left[ \begin{array}{llll} a_{0j0}&{}a_{1j0}&{} \cdots &{}a_{nj0} \\ a_{0j1}&{}a_{1j1}&{} \cdots &{}a_{nj1} \\ \vdots &{}\vdots &{}\ddots &{}\vdots \\ a_{0jl}&{}a_{1jl}&{} \cdots &{}a_{njl} \end{array}\right] , \end{aligned}$$
(32)

and \(Z_{d}=\begin{bmatrix}1&z_{d}^{-1}&\cdots&z_{d}^{-l}\end{bmatrix}\), \(Z_{h}=\begin{bmatrix}1&z_{h}^{-1}&\cdots&z_{h}^{-n}\end{bmatrix}^\mathrm{T}\). Introducing the partitioned matrix

$$\begin{aligned} C=\begin{bmatrix} C_{0}&C_{1}&\cdots&C_{m} \end{bmatrix}, \end{aligned}$$
(33)

we can represent (30a) in the form

$$\begin{aligned} H(z_{h},z_{v},z_{d}) = Z_{d}CZ_{e}, \end{aligned}$$
(34)

where

$$\begin{aligned} Z_{e}= \begin{bmatrix} Z_{h} \cdot z_{v}^{0} \\ Z_{h} \cdot z_{v}^{-1} \\ \vdots \\ Z_{h} \cdot z_{v}^{-m} \end{bmatrix}. \end{aligned}$$
(35)

Applying a full rank factorization [8] to (33), we obtain

$$\begin{aligned} C = C_dC_e, \end{aligned}$$
(36)

where \(C_{d}\) and \(C_{e}\) are real full rank \((l+1)\times r\) and \(r \times (n+1)\) matrices, respectively. Substituting (36) into (34), we obtain

$$\begin{aligned} H(z_{h},z_{v},z_{d}) =\hat{ H}_{d}(z_{d})H_e(z_{h},z_{v}), \end{aligned}$$
(37)

where

$$\begin{aligned} \hat{H}_d(z_d) = Z_d C_d = \begin{bmatrix} H_{d_1}(z_{d})&H_{d_2}(z_{d})&\cdots&H_{d_r}(z_{d}) \end{bmatrix}, \end{aligned}$$
(38)

and

$$\begin{aligned} H_e(z_h,z_v) = C_e Z_e = \begin{bmatrix} H_{e_1}(z_h,z_v) \\ H_{e_2}(z_h,z_v) \\ \vdots \\ H_{e_r}(z_h,z_v) \end{bmatrix}. \end{aligned}$$
(39)

Each \(H_{e_i}(z_h,z_v)\) is an single-input single-output system, so we can apply the algorithm presented in [27, 28] to synthesize 2-D orthogonal state space equations, given by (11), spanned on 3-D. The factors \(k_{e_i}\) obtained from the 2-D synthesis are applied to the corresponding elements of \(\hat{H}_d(z_d)\). The resulting vector will be denoted by

$$\begin{aligned} H_d(z_d)=\begin{bmatrix} k_{e_1}H_{d_1}(z_{d})&k_{e_2}H_{d_2}(z_{d})&\cdots&k_{e_r}H_{d_r}(z_{d}) \end{bmatrix}. \end{aligned}$$
(40)

Thanks to it, we remove r scaling factors from the rotation structure. As (40) is a horizontal vector, it cannot satisfy (7). So, to obtain an orthogonal structure, we take into account a transposed version of (40) [17, p. 546]. So, we can apply the algorithm illustrated in Sect. 2.2 to \(H^\mathrm{T}_d(z_d)\) obtaining (10) which is a square matrix [27]. Then, the result is transposed back to the orthogonal realization of (40), which is 1-D state space equations (9) spanned on 3-D (dimensions h and v are not processed), given by

$$\begin{aligned} \begin{bmatrix}x_{d}(h,v,d+1)\\y_{d}(h,v,d)\end{bmatrix} = \tau _d \begin{bmatrix}x_{d}(h,v,d)\\u_{d}(h,v,d)\end{bmatrix}, \end{aligned}$$
(41)

where

$$\begin{aligned} \tau _d=\begin{bmatrix}A_d&B_d\\C_d&D_d\end{bmatrix}=\begin{bmatrix}A^\mathrm{T}&C^\mathrm{T}\\B^\mathrm{T}&D^\mathrm{T}\end{bmatrix}. \end{aligned}$$
(42)

In (37), we have a dot product of vectors (38) and (39). From a system point of view, (39) can be represented as r one-input one-output parallel blocks. Equation (38) can be treated as a single system consisting of r inputs and one output. So, the transfer function (37) can be realized as a cascade connection of r \(H_{e_i}(z_h,z_v)\) blocks whose outputs are connected to r inputs of \(H_d(z_d)\) and one multiplier, as shown in Fig. 3. Symbols \(H_{e_i}\) and \(H_d\) denote realizations of \(H_{e_i}(z_h,z_v)\) and \(H_d(z_d)\), respectively. Systems \(H_{e_i}\) and \(H_d\) can be implemented using Givens rotations (5) and permutations (6) by the technique presented in [26].

Fig. 3
figure 3

Block diagram of a 3-D non-separable orthogonal FIR filter decomposed into a cascade of 2-D and 1-D systems

3.2 Realization Example of a 3-D Laplace Filter

Let us design the 3-D orthogonal Laplace filter whose mask is given by [12]

$$\begin{aligned} \left[ \left[ \begin{array}{lll} 0&{}0&{}0 \\ 0&{}1&{}0 \\ 0&{}0&{}0 \end{array} \right] , \left[ \begin{array}{lll} 0&{}1&{}0 \\ 1&{}-6&{}1 \\ 0&{}1&{}0 \end{array} \right] , \left[ \begin{array}{lll} 0&{}0&{}0 \\ 0&{}1&{}0 \\ 0&{}0&{}0 \end{array} \right] \right] . \end{aligned}$$
(43)

The transfer function for the system described by (43) is

$$\begin{aligned} H(z_{h},z_{v},z_{d}) = \left[ \begin{array}{ccc}z_{d}^{0}&z_{d}^{-1}&z_{d}^{-2}\end{array}\right] C \left[ \begin{array}{l} Z_{h}z_{v}^{0} \\ Z_{h}z_{v}^{-1} \\ Z_{h}z_{v}^{-2} \end{array}\right] , \end{aligned}$$
(44)

where

$$\begin{aligned} C= \left[ \begin{array}{lll} C_{0}&C_{1}&C_{2} \end{array}\right] = \left[ \begin{array}{lllllllll} 0&{} 0&{}0&{} 0&{} 1&{} 0&{}0&{} 0&{}0 \\ 0&{} 1&{}0&{} 1&{}-6&{} 1&{}0&{} 1&{}0 \\ 0&{} 0&{}0&{} 0&{} 1&{} 0&{}0&{} 0&{}0 \end{array}\right] \end{aligned}$$
(45)

and

$$\begin{aligned} Z_{h}=\begin{bmatrix}z_{h}^{0}&z_{h}^{-1}&z_{h}^{-2}\end{bmatrix}^\mathrm{T}. \end{aligned}$$
(46)

Applying a full rank factorization to (45), we obtain (37), where \(r=2\),

$$\begin{aligned} \hat{H}_{d}(z_{d}) = \begin{bmatrix}z_{d}^{0}&z_{d}^{-1}&z_{d}^{-2}\end{bmatrix} \begin{bmatrix} -0.3748367&-0.4573964 \\ 2.4869572&-0.1378785 \\ -0.3748367&-0.4573964 \end{bmatrix}, \end{aligned}$$
(47)

and

$$\begin{aligned} H_{e}(z_{h},z_{v})= & {} \begin{bmatrix} H_{e_1}(z_h,z_v) \\ H_{e_2}(z_h,z_v) \end{bmatrix}\nonumber \\= & {} \begin{bmatrix} 0&0.3846230&0&0.3846230&-2.4236794&0.3846230&0&0.3846230&0 \\ 0&-0.3151988&0&-0.3151988&-0.2000804&-0.3151988&0&-0.3151988&0 \end{bmatrix} \begin{bmatrix} Z_{h}z_{v}^{0} \\ Z_{h}z_{v}^{-1} \\ Z_{h}z_{v}^{-2} \end{bmatrix}.\nonumber \\ \end{aligned}$$
(48)

Let us focus on \(H_{e_1}(z_h,z_v)\) realization, given by (48), for a moment. We represent \(H_{e_1}(z_h,z_v)\) in the form:

$$\begin{aligned} H_{e_1}(z_h,z_v) = \begin{bmatrix} z_{h}^{0}&z_{h}^{-1}&z_{h}^{-2} \end{bmatrix} P\begin{bmatrix} z_{v}^{0} \\ z_{v}^{-1} \\ z_{v}^{-2} \end{bmatrix} \end{aligned}$$
(49)

where

$$\begin{aligned} P=\begin{bmatrix} 0&0.3846230&0 \\ 0.3846230&-2.4236794&0.3846230 \\ 0&0.3846230&0 \end{bmatrix}. \end{aligned}$$
(50)

Applying the full rank decomposition to (50), we obtain:

$$\begin{aligned} H_{e_1}(z_h,z_v) = H_h^{e_1}(z_h)H_v^{e_1}(z_v) \end{aligned}$$
(51)

where

$$\begin{aligned} \begin{aligned}&H_h^{e_1}(z_h)=\begin{bmatrix} z_{h}^{0}&z_{h}^{-1}&z_{h}^{-2} \end{bmatrix} \begin{bmatrix} 0.2359769&0.2359769 \\ -1.5584563&0.0714618 \\ 0.2359769&0.2359769 \end{bmatrix}, \\&H_v^{e_1}(z_v)=\begin{bmatrix} -0.2359769&1.5584563&-0.2359769 \\ 0.2359769&0.0714618&0.2359769 \end{bmatrix} \begin{bmatrix} z_{v}^{0} \\ z_{v}^{-1} \\ z_{v}^{-2} \end{bmatrix}. \end{aligned} \end{aligned}$$
(52)

For (52), we construct the paraunitary systems:

$$\begin{aligned} \left( U_h^{e_1}\right) ^\mathrm{T}(z_{h})= & {} \begin{bmatrix} \frac{1}{\sqrt{k_h^{e_1}}}\left( H_h^{e_1}\right) ^\mathrm{T}(z_h) \\ 0 \\ F_h^{e_1}(z_h) \end{bmatrix}\nonumber \\= & {} \begin{bmatrix} 0.1140244z_{h}^{0}-0.7530483z_{h}^{-1}+0.1140244z_{h}^{-2} \\ 0.1140244z_{h}^{0}+0.0345305z_{h}^{-1}+0.1140244z_{h}^{-2} \\ 0 \\ 0.4611571z_{h}^{0}+0.4048143z_{h}^{-1}-0.0563866z_{h}^{-2} \end{bmatrix} \nonumber \\ U_v^{e_1}(z_{v})= & {} \begin{bmatrix} \frac{1}{\sqrt{k_v^{e_1}}}H_v^{e_1}(z_v) \\ F_v^{e_1}(z_v) \\ 0 \end{bmatrix} \nonumber \\= & {} \begin{bmatrix} -0.1140244z_{v}^{0}+0.7530483z_{v}^{-1}-0.1140244z_{v}^{-2} \\ 0.1140244z_{v}^{0}+0.0345305z_{v}^{-1}+0.1140244z_{v}^{-2} \\ 0.4611571z_{v}^{0}+0.4048143z_{v}^{-1}-0.0563866z_{v}^{-2} \\ 0 \end{bmatrix} \end{aligned}$$
(53)

We obtain 1-D state space realizations of (53) [in similar way as (24)–(28) in Sect. 2.2]:

$$\begin{aligned} A_t= & {} \begin{bmatrix} -0.1375940&0.1359287 \\ -0.1392797&0.1375940 \end{bmatrix}\qquad \hat{B}_t=\begin{bmatrix} 0.8725430 \\ 0 \end{bmatrix} \nonumber \\ C_t= & {} \begin{bmatrix} -0.8630501&-0.0856547 \\ 0.0395745&-0.9773549 \\ 0&0 \\ 0.4639477&0.0056496 \end{bmatrix}\quad \hat{D}_t=\begin{bmatrix} 0.1140244 \\ 0.1140244 \\ 0 \\ 0.4611571 \end{bmatrix} \end{aligned}$$
(54)
$$\begin{aligned} A_v^{e_1}= & {} \begin{bmatrix} 0&0.2752085 \\ 0&0 \end{bmatrix}\qquad B_v^{e_1}=\begin{bmatrix} 0.6132134 \\ -0.6207259 \end{bmatrix} \nonumber \\ C_v^{e_1}= & {} \begin{bmatrix} 0.6674764&-0.5537755 \\ -0.6674764&-0.7150272 \\ 0.3300763&-0.3260813 \\ 0&0 \end{bmatrix}\quad D_v^{e_1}=\begin{bmatrix} -0.1140244 \\ 0.1140244 \\ 0.4611571 \\ 0 \end{bmatrix} \end{aligned}$$
(55)

We add new columns to \(\hat{B}_t\) and \(\hat{D}_t\), obtaining square matrix \(\begin{bmatrix}A_t&B_t\\C_t&D_t\end{bmatrix}\) [29]:

$$\begin{aligned} B_t= & {} \begin{bmatrix} 0.8725430&0&0&-0.4486204 \\ 0&0.9770079&0&0.0844077 \end{bmatrix} \nonumber \\ D_t= & {} \begin{bmatrix} 0.1140244&-0.1507574&0&0.4605199 \\ 0.1140244&0.1507574&0&-0.0864978 \\ 0&0&1&0. \\ 0.4611571&0&0&0.7563430 \end{bmatrix}. \end{aligned}$$
(56)

Based on (56), we construct a transpose system which is the realization of \(U_h^{e_1}\), given by

$$\begin{aligned} \begin{aligned} A&=\begin{bmatrix} -0.1375940&-0.1392797 \\ 0.1359287&0.1375940 \end{bmatrix} B=\begin{bmatrix} -0.8630501&0.0395745&0&0.4639477 \\ -0.0856547&-0.9773549&0&0.0056496 \end{bmatrix} \\ C&=\begin{bmatrix} 0.8725430&0 \\ 0&0.9770079 \\ 0&0 \\ -0.4486204&0.0844077 \end{bmatrix} D=\begin{bmatrix} 0.1140244&0.1140244&0&0.4611571 \\ -0.1507574&0.1507574&0&0 \\ 0&0&1&0 \\ 0.4605199&-0.0864978&0&0.7563430 \end{bmatrix} \end{aligned} \end{aligned}$$
(57)

We apply Schur upper triangularization to matrix A, obtaining a minimized state space model for \(U_h^{e_1}\):

$$\begin{aligned} A_h^{e_1}= & {} \begin{bmatrix} 0&0.2752085 \\ 0&0 \end{bmatrix} \nonumber \\ B_h^{e_1}= & {} \begin{bmatrix} 0.5537755&-0.7150272&0&-0.3260813 \\ -0.6674764&-0.6674764&0&0.3300763 \end{bmatrix} \nonumber \\ C_h^{e_1}= & {} \begin{bmatrix} -0.6207259&0.6132134 \\ 0.6866301&0.6950421 \\ 0&0 \\ 0.3784687&-0.2552378 \end{bmatrix} \nonumber \\ D_h^{e_1}= & {} \begin{bmatrix} 0.1140244&0.1140244&0&0.4611571 \\ -0.1507574&0.1507574&0&0 \\ 0&0&1&0 \\ 0.4605199&-0.0864978&0&0.7563430 \end{bmatrix} \end{aligned}$$
(58)

Then, we use 1-D state space systems (58) and (55) to construct 2-D state space model:

$$\begin{aligned} A_R^{e_1}= & {} \begin{bmatrix} A_h^{e_1}&\left( C_h^{e_1}\right) ^\mathrm{T}C_v^{e_1} \\ 0_{h \times v}&\left( A_v^{e_1}\right) ^\mathrm{T} \end{bmatrix}\nonumber \\= & {} \begin{bmatrix} 0&0.2752085&0.8468960&0.2045966 \\ 0&0&0&0.8468960 \\ 0&0&0&0.2752085 \\ 0&0&0&0 \end{bmatrix} \nonumber \\ C_R^{e_1}= & {} \begin{bmatrix} \left( B_h^{e_1}\right) ^\mathrm{T}&\left( D_h^{e_1}\right) ^\mathrm{T}C_v^{e_1} \end{bmatrix} \nonumber \\= & {} \begin{bmatrix} -0.6207259&0.6132134&0&-0.1446744 \\ 0.6866301&0.6950421&-0.2012541&-0.0243099 \\ 0&0&0.3300763&-0.3260813 \\ 0.3784687&-0.2552378&0.3651214&-0.1931763 \end{bmatrix} \end{aligned}$$
(59)
$$\begin{aligned} \hat{B}_R^{e_1}= & {} \begin{bmatrix} \left( C_h^{e_1}\right) ^\mathrm{T}D_v^{e_1} \\ B_v^{e_1} \end{bmatrix}= \begin{bmatrix} -0.1446744 \\ 0 \\ 0.6132134 \\ -0.6207259 \end{bmatrix} \nonumber \\ \hat{D}_R^{e_1}= & {} \left( D_h^{e_1}\right) ^\mathrm{T}D_v^{e_1}= \begin{bmatrix} 0 \\ 0.0343800 \\ 0.4611571 \\ -0.0623733 \end{bmatrix} \end{aligned}$$
(60)

We extend the number of columns in (60):

$$\begin{aligned} B_R^{e_1}= & {} \begin{bmatrix}-0.1446744&0&-0.2716726&-0.2653886 \\ 0&-0.2252368&0.4343535&0.2082612 \\ 0.6132134&0.6931186&-0.2329707&0.1163662 \\ -0.6207259&0.6847299&0.3787022&-0.0492859 \end{bmatrix} \nonumber \\ D_R^{e_1}= & {} \begin{bmatrix} 0&0&0.0602207&0.4627221 \\ 0.0343800&0&0.0544406&-0.0146858 \\ 0.4611571&0&0.7302397&-0.1969889 \\ -0.0623733&0&0&0.7855533 \end{bmatrix}. \end{aligned}$$
(61)

Finally, we apply Givens decomposition and permutations to (59) and (61), obtaining the pipeline rotation structure.

Repeating steps (49)–(61) to \(H_{e_2}(z_h,z_v)\) in (48), we design a 2-D state space model:

$$\begin{aligned} A_R^{e_2}= & {} \begin{bmatrix} 0&0.6204384&0.6160282&-0.2064796 \\ 0&0&0&0.6160282 \\ 0&0&0&0.6204384 \\ 0&0&0&0 \end{bmatrix} \nonumber \\ B_R^{e_2}= & {} \begin{bmatrix}-0.2723030&-0.1275783&-0.2764642&0.1614744 \\ 0&0&0&0.7877241 \\ -0.2596936&-0.4926194&-0.2636621&-0.4852049 \\ -0.7124480&0&0.7017249&0 \end{bmatrix} \nonumber \\ C_R^{e_2}= & {} \begin{bmatrix} 0.7124480&0.2596936&0&0.2723030 \\ -0.5610438&-0.2045055&0.3320120&0.2345038 \\ 0&0&0.5612125&0.2045669 \\ -0.4214827&0.7111912&-0.4419477&0.1481315 \end{bmatrix} \nonumber \\ D_R^{e_2}= & {} \begin{bmatrix} 0&0.5527025&0&-0.2129507 \\ -0.1467593&0.6330967&-0.1490020&-0.1833903 \\ 0.5395614&-0.1624233&0.5478065&-0.1599786 \\ 0.1953542&0.0915265&0.1983395&-0.1158441 \end{bmatrix}, \end{aligned}$$
(62)

for which we can also get the pipeline rotation structure. In a similar way as in Sect. 2.2, (47) can by realized by (41), where

Table 3 Impulse response of the 3-D Laplace filter
Fig. 4
figure 4

Pipeline implementation of the 3-D orthogonal Laplace filter

Table 4 Rotation and permutation parameters for the \(H_{e_1}\) system
Table 5 Component parameters for the \(H_{e_2}\) system
Table 6 Component parameters for the \(H_{d}\) system
$$\begin{aligned} A^{d}= & {} \begin{bmatrix} 0&0.3132932 \\ 0&0 \end{bmatrix} B^{d}=\begin{bmatrix} 0.2089567&-0.7822908&0.4961910 \\ -0.8738511&-0.4045045&-0.2697411 \end{bmatrix} \nonumber \\ C^{d}= & {} \begin{bmatrix} 0.4212768&-0.7749423 \\ 0.8635104&0.4694245 \\ -0.2772646&0.2845217 \end{bmatrix} D^{d}=\begin{bmatrix} -0.1153337&-0.0533878&0.4536941 \\ -0.0774472&0.1673091&0 \\ -0.4164389&0.4399483&0.6893445 \end{bmatrix}\nonumber \\ \end{aligned}$$
(63)

The state space equations (59), (61), (62), and (63) are implementations of blocks given in Fig. 3. Replacing \(H_{e_1}\), \(H_{e_2}\), and \(H_d\) with their orthogonal counterparts, we obtain the pipeline structure shown in Fig. 4. Each \(H_{e_1}\), \(H_{e_2}\), and \(H_d\) are implemented using Givens rotations and permutations whose parameters are presented in Tables 4, 5, and 6. As they are multi-input multi-output orthogonal systems, there are extra inputs which will be set to zero as well as additional outputs will not be used. Hence, the first three rotations \(R_1\), \(R_2\), and \(R_3\), and the \(-1\) multiplier in the implementation of \(H_{e_1}\) and rotations \(R_{19}\), \(R_{20}\), and \(R_{21}\), and the \(-1\) multiplier in the implementation of \(H_{e_2}\), have input and output constantly equal to zero. So, they can be removed from the structure. The final structure for the 3-D orthogonal Laplace filter is shown in Fig. 5. If the \(H_{e_i}\) systems have unequal numbers of rotations, we apply extra delay elements to compensate for the processing time of all the \(H_{e_i}\) blocks.

The impulse response of the filter has been simulated for the \(8\times 8\times 8\) 3-D Kronecker delta matrix input. The results are presented in Table 3.

4 Conclusions

The main contribution of the paper is the extension of 1-D and 2-D FIR orthogonal filters to 3-D case. By doing so, we open up new possibilities to take into account parameters which are usually omitted in 3-D designs like sensitivity of the frequency response to changes in structural parameters, noise, intrinsic oscillations, and limit cycles. This is the main difference from 3-D FIR techniques, known in literature, which usually focus on speed and chip area only. However, presented results are occupied by much higher mathematical burden during synthesis which calls for polynomial factorization, matrix pseudoinverse, QR decomposition, full rank matrix factorization, real Schur decomposition, and orthonormal basis extension. Nonetheless, these are standard numerical methods which can be implemented using popular mathematical software. The authors have applied Scilab [22] for these tasks.

The frequency response of a separable system is limited to a superposition of, possibly different, 1-D functions applied to each direction independently. Due to that, a separable system cannot fully exploit a neighbourhood of a processed sample. On the other hand, their synthesis techniques in n-D are as simple as 1-D approaches applied n times. In the non-separable case, we are allowed to design systems which approximate any frequency response at a cost of much more complicated synthesis algorithms. The originality of our non-separable technique, presented in Sect. 3.1, is that we represent a 3-D system in the Gram form with coefficients collected in a matrix which is a subject of a full rank factorization. Thanks to it, we separate one variable from the system at the expense of an increase in the subsystem’s inputs and outputs. As a result, we get a cascade connection of 2-D systems and a 1-D one. However, obtained structures are clearly 3-D, which means that their input and output are 3-D functions. So, to use them in real applications we need to apply any concurrent technique or sample by sample ordering to the signals and systems.

Fig. 5
figure 5

Block diagram implementations of the 3-D orthogonal Laplace filter sub-blocks

The pipeline structures, obtained in Sects. 2.1 and 3.1, have high throughput at the expense of a latency which is not larger then \((m_1(l+1)+m_2(n+1)(m + 1))\tau _R\) and \((m_1(l+1)+m_2(n+1)(m + 1))\tau _R\) for separable and non-separable cases, respectively, where \(\tau _R\) denotes the processing time of a Givens rotation and \(m_{1}\le \min \{l+1,(n+1)\cdot (m+1) \} \), \(m_{2}\le \min \{n+1,m+1\}\), for m,n, and l given by (30). So, they are well suited for hardware real-time 3-D image processing, but also may find applications in other areas where 3-D data are employed like in economy modelling, seismic data, weather forecast models, etc. It is also possible to utilise presented results as a digital replacement for analog controllers in control systems [13,14,15, 19, 20]. Due to the robust orthogonal systems properties, they will be especially applicable when high processing precision is required even for low bit quantization, as in medical imaging. One can give upper bounds for the number of Givens rotations and single delay elements. In the separable case, they are given by \(n+m+l+3\) and \(n+mH+lHV\), respectively, for an \(H\times V\) image frames, where m, n, and l are defined in (14). For the same image in the non-separable case, a structure has no more then \(m_{1}(l+1)+m_{1}m_{2}(n+1)(m+1)\) Givens rotations and \(m_{1}(n+mH)+lHV\) single delay elements, for m,n, and l given by (30).

The \(5\times 5\times 5\) 3-D Gaussian filter, presented in Sect. 2.2, has been implemented in DE2 development board with Cyclone II chip (EP2C35F672C6) running at 125 MHz clock rate [23]. In [10], a similar filter of order \(3\times 3\times 3\) has been presented using the same DE2 board of 100 MHz rate for RAM communication and 25 MHz for the filter module. The reported overall performance was 30 frames/s for \(640\times 480\) images. In [1], a 3-D anisotropic diffusion filter has been proposed which is a \(5\times 5\times 5\) 3-D Gaussian filter. It was implemented in Stratix II chip (EP2S180F1508C4) using 7524 ALUTs and 20 DSP multipliers. Their design achieves voxel processing rate of 192–194 MHz for the system clocked at 200 MHz. An obtained precision was measured with a mean-squared error which is 0.030 for 8-bit fixed number representation.

The authors’ filter, presented in [23], occupies 12020 LUTs (no DSP blocks are utilized) and achieves maximum voxel processing rate of 125 MHz which leads to 409 frames/s for \(640\times 480\) images. The mean-squared error for 8-bit fixed number representation is 0.002. Comparing obtained results one can see that the proposed filter voxel processing rate is at the clock rate. This is a natural property of fully pipeline structures. The number of ALUTs occupied by the proposed filter is greater than that in [1] and probably follows from the CORDIC implementation; however, we do not utilize extra DSP blocks. The proposed filter possesses good precision, due to Givens rotations, manifested by the low mean-squared error and other good properties. For more details the reader is referred to [23].