# Filters with Multiple Inputs and Multiple Outputs {cite}`partitioned_convolution` Along with single-input single-ouput (SISO) systems, systems can also be designed that have single-input multiple-output (SIMO), multiple-input single-output (MISO) and multiple-input multiple-output (MIMO) using transform based convolution. This can be efficient because the input and outputs only have to be transformed once, and the rest of the processing can be done in the frequency domain. Listed below are some assumptions that are made for the filters described in this notebook: * All input and output streams share a common sample rate $F_s$. * All input and output streams share a common block length $B$. * All input and output blocks and filters must be transformed using a common transform size $K$. * The relationship $K \ge B + \left( \underset{i, \, j}{max} \, \, N_{i \rightarrow j} \right) - 1$ must be true, where $\left( \underset{i, \, j}{max} \, \, N_{i \rightarrow j} \right)$ is the maximum length FIR filter connecting input $i$ to output $j$. If this is not true, time-aliasing will occur.
## Dual Channel Convolution {cite}`partitioned_convolution` An increase in performance can be realized using a dual channel convolution method where two real channels are combined into a single complex channel before the transform is applied. This can be used for systems that have one input with two filters that need to be applied separately, such as in binaural synthesis where separate head-related impulse responses (HRIR) need to be applied to the same input. Another use case for dual channel convolution is when there are two inputs that need the have the same filter applied to them. To apply the dual channel convolution method, two real inputs $x_0(n)$ and $x_1(n)$ are transformed into a complex-value signal $x(n)$ as follows: $$x(n) \, = \, x_0(n) + i \, x_1(n)$$ The $K$-point DFT is then taken on the complex signal $x(n)$, resulting in: $$DFT_{(k)} \{x(n)\} \quad \Rightarrow \quad X(k) = X_0(k) + i \, X_1(k)$$ The real and imaginary parts of the of the DFT spectra can then be extracted using the following equations: $$X_0(k) \, = \, \frac{1}{2} \left[ X(k) + \overline{X(K-k)} \right]$$ $$X_1(k) \, = \, \frac{i}{2} \left[ X(k) - \overline{X(K-k)} \right]$$ The following dual channel convolution examples are demonstrated below: 1. Apply separate filters to the same input 1. Apply the same filter to separate inputs