I am a computer science master's student but my experience in converting a code to mathematical operations is very very low. Now I am starting to write the master's thesis as well as writing a paper, and I am in doubt about how could I represent mathematically a two-channel signal audio.
For example:
- Write about ranges from an $i^{th}$ to $j^{th}$
- Or maybe case supposing more ranges in the elements: $i^{th}$ to $j^{th}$ to $n^{th}$ or any of these to $n$: 1 < 1 < j < n
- Doing manipulating operations like: add, remove elements
- Create a zero variable that contains zeros in all elements (zeros(rows, columns) function) for example
I have written the stereo audio signal like $S = f(n) = f_1, f_2,...,f_{n-1},f_n ; g(n) = g_1, g_2,...,g_{n-1},g_n$ where $S$ contains two functions (two channels), and a channel for example where all of the samples are equal zero $S = f(n) = f_1, f_2,...,f_{n-1},f_n = 0 ; g(n) = g_1, g_2,...,g_{n-1},g_n = 0 $. I'm in doubt if this representation is correct or not.
I am basing on this explanation: https://x-engineer.org/graduate-engineering/signals-systems/signal-processing/what-is-a-signal/.
Notation varies between sources. The most important thing is getting understood. Here are some suggestions.
Signals sampled in discrete time are sequences of real numbers of length $N \in \mathbb{N}$. We may write $(x_n)_{n\in \{1,2,3,...,N\}}\subset \mathbb{R}$ if you prefer to start indexing from $1$, but especially if you use Python and do DFTs, it is maybe preferable to write $(x_n)_{n\in \{0,1,2,...,N-1\}}\subset \mathbb{R}$. This is for univariate sequences. $$(x_n)_{n\in \{0,1,2,...,N-1\}}=\{x_0,x_1,...,x_{N-1}\}$$
If the sequence contains $m$ data per sampling instance, then we may write $(x_n)_{n\in \{0,1,2,...,N-1\}}\subset \mathbb{R}^m$, where $x_n=(x_{1,n},x_{2,n},...,x_{m,n})$, that is, a vector. $$(x_n)_{n\in \{0,1,2,...,N-1\}}=\{x_0,x_1,...,x_{N-1}\}=\bigg\{\begin{bmatrix}x_{1,0} \\ x_{2,0} \\ ...\\ x_{m,0}\end{bmatrix},\begin{bmatrix}x_{1,1} \\ x_{2,1} \\ ...\\ x_{m,1}\end{bmatrix},\begin{bmatrix}x_{1,2} \\ x_{2,2} \\ ...\\ x_{m,2}\end{bmatrix},...,\begin{bmatrix}x_{1,N-1} \\ x_{2,N-1} \\ ...\\ x_{m,N-1}\end{bmatrix}\bigg\}$$
If I understood correctly, a two channel would be $m=2$.
When selecting a subset of $(x_n)$ from $i$ to $j$, both included (thus length $M=j-i+1$), you can define $$(y_k)_{k\in \{0,1,...,M-1\}}=\{x_{i},x_{i+1},...,x_{j-1},x_j\}$$ which implies for example $y_1=x_{i+1}$. When you do operations on the sequences, you define new sequences. E.g. adding $1$ to the first element of $(x_n)$ $$(s_n)_{n\in \{0,1,2,...,N-1\}}=\{x_0+1,x_1,...,x_{N-1}\}$$
When you program, you usually create matrices. If the columns are the sampling times and the rows are the observed elements of sequences, you obtain a $m \times N$ matrix
$$X=\begin{bmatrix}x_{1,0} & x_{1,1} & x_{1,2} & ... & x_{1,N-1} \\ x_{2,0} &x_{2,1} & x_{2,2} & ... & x_{2,N-1} \\ ... & ... & ... & ... &...\\ x_{m,0} & x_{m,1} & x_{m,2} & ... & x_{m,N-1}\end{bmatrix}$$
when you code
zeros(rows=m,columns=N)you create empty matrices:$$0_{m \times N}=\begin{bmatrix}0 & 0 & 0 & ... & 0 \\ 0 &0 & 0 & ... & 0 \\ ... & ... & ... & ... &...\\ 0 & 0& 0 & ... & 0\end{bmatrix}$$
As when with sequences, you create new matrices when you manipulate them and add elements to them.