ex-6: went on writing on the FFT

This commit is contained in:
Giù Marcer 2020-03-21 23:16:12 +01:00 committed by rnhmjoj
parent 03f42f11f0
commit 0a31d3b39b

View File

@ -15,7 +15,7 @@ where:
- $E$ is the electric field amplitude, default set $E = \SI{1e4}{V/m}$;
- $a$ is the radius of the slit aperture, default set $a = \SI{0.01}{m}$;
- $\theta$ is the angle specified in @fig:fenditure;
- $\theta$ is the angle specified in @fig:slit;
- $J_1$ is the Bessel function of first order;
- $k$ is the wavenumber, default set $k = \SI{1e-4}{m^{-1}}$;
- $L$ default set $L = \SI{1}{m}$.
@ -46,7 +46,7 @@ where:
\node [cyclamen] at (5.5,-0.4) {$\theta$};
\node [rotate=-90] at (10.2,0) {screen};
\end{tikzpicture}
\caption{Fraunhofer diffraction.}
\caption{Fraunhofer diffraction.}\label{fig:slit}
}
\end{figure}
@ -101,11 +101,8 @@ same bin width of the previous one, but a smaller number of them ($m < n$), was
filled with $m$ points according to a Gaussian distribution with mean $\mu$,
corresponding to the central bin, and variance $\sigma$.
Then, the original histogram was convolved with the kernel in order to obtain
the smeared signal. The result is shown in @fig:convolved.
![Same sample of @fig:original convolved with the
kernel.](images/6_convolved.pdf){#fig:convolved}
the smeared signal. Some results in terms of various $\sigma$ are shown in
@fig:convolved.
The convolution was implemented as follow. Consider the definition of
convolution of two functions $f(x)$ and $g(x)$:
@ -124,8 +121,9 @@ $$
$$
where $j$ runs over the bins of the kernel.
For a better understanding, see @fig:dot_conv. Thus, the third histogram was
obtained with $n + m - 1$ bins, a number greater than the initial one.
For a better understanding, see @fig:dot_conv. As can be seen, the third
histogram was obtained with $n + m - 1$ bins, a number greater than the initial
one.
\begin{figure}
\hypertarget{fig:dot_conv}{%
@ -194,6 +192,104 @@ obtained with $n + m - 1$ bins, a number greater than the initial one.
}
\end{figure}
\textcolor{red}{Missing various $\sigma$ comparison.}
## Unfolding
## Unfolding with FFT
Two different unfolding routines were implemented, one of which exploiting the
Fast Fourier Transform.
This method is based on the property of the Fourier transform according to
which, given two functions $f(x)$ and $g(x)$:
$$
\hat{F}[f*g] = \hat{F}[f] \cdot \hat{F}[g]
$$
where $\hat{F}[\quad]$ stands for the Fourier transform of its argument.
Thus, the implementation of this tecnique lies in the computation of the
Fourier trasform of the signal and the kernel, the product of their transforms
and the anti-transformation of the result. Being the histogram a discrete set of
data, the Discrete Fourier Transform (DFT) was emploied.
In order to accomplish this procedure, every histogram was transformed into a
vector. The kernel vector was 0-padded in order to make its length the same as
the one of the signal, making it feasable to implement the dot product between
the vectors.
FFT are efficient algorithms for calculating the DFT. Namely, given a set of $n$
values {$z_i$}, each one is transformed into:
$$
x_j = \sum_{k=0}^{n-1} z_k \exp \left( - \frac{2 \pi i j k}{n} \right)
$$
The evaluation of the DFT is a matrix-vector multiplication $W \vec{z}$. A
general matrix-vector multiplication takes $O(n^2)$ operations. FFT algorithms,
instad, use a divide-and-conquer strategy to factorize the matrix into smaller
sub-matrices. If $n$ can be factorized into a product of integers $n_1$, $n_2
\ldots n_m$, then the DFT can be computed in $O(n \sum n_i) < O(n^2)$
operations, hence the name.
The inverse Fourier transform is thereby defined as:
$$
z_j = \frac{1}{n}
\sum_{k=0}^{n-1} x_k \exp \left( \frac{2 \pi i j k}{n} \right)
$$
In GSL, `gsl_fft_complex_forward()` and `gsl_fft_complex_inverse()` are
functions which allow to compute the foreward and inverse transform,
respectively.
In this special case, the sequence which must be transformed is made of real
numbers, but the Fourier transform is not real: it is a complex sequence wich
satisfies:
$$
z_k = z^*_{n-k}
$$
Where $z^*$ is the conjugate of $z$. A sequence with this symmetry is called
'half-complex'. This structure requires a particular storage layouts for the
forward transform (from real to half-complex) and inverse transform (from
half-complex to real). As a consequence, the routines are divided into two sets:
`gsl_fft_real` and `gsl_fft_halfcomplex`. The symmetry of the half-complex
sequence implies that only half of the complex numbers in the output need to be
stored. This works for all lengths: when the length is even, the middle value
where $k = n/2$ is real. Thus, only $n$ real numbers are required to store the
half-complex sequence (real and imaginary parts).
The ratio between the kernel and the sigmal transformations where therefore
made between complex numbers.
If the time-step of the DFT is $\Delta$, then the frequency-domain includes
both positive and negative frequencies, ranging from $-1 / (2 \Delta)$ to
$+1 / (2 \Delta$). The positive frequencies are stored from the beginning of
the array up to the middle, and the negative frequencies are stored backwards
from the end of the array. \textcolor{red}{Useful?}
---
<div id="fig:convolved">
![Convolved. $\sigma = 0.05 \Delta \theta$](images/noise-0.05.pdf){width=7cm}
![Deconvolved. $\sigma = 0.05 \Delta \theta$](images/deco-0.05.pdf){width=7cm}
![Convolved. $\sigma = 0.1 \Delta \theta$](images/noise-0.1.pdf){width=7cm}
![Deconvolved. $\sigma = 0.1 \Delta \theta$](images/deco-0.1.pdf){width=7cm}
![Convolved. $\sigma = 0.5 \Delta \theta$](images/noise-0.5.pdf){width=7cm}
![Deconvolved. $\sigma = 0.5 \Delta \theta$](images/deco-0.5.pdf){width=7cm}
![Convolved. $\sigma = 1 \Delta \theta$](images/noise-1.pdf){width=7cm}
![Deconvolved. $\sigma = 1 \Delta \theta$](images/deco-1.pdf){width=7cm}
Signal convolved with kernel on the left and deconvolved signal on the right.
Increasing values of $\sigma$ from top to bottom. $\Delta \theta$ is the bin
width.
</div>
As can be seen from the plots on the left in @fig:convolved, increasig the
value of $\sigma$ implies a stronger smoothing of the curve, while the
deconvolution process seems not to be affected by $\sigma$ amplitude changes:
it always gives the same outcome.
It was also implemented the possibility to add a Poisson noise to the
distribution to check weather the deconvolution is affected or not by this
kind of noise.