---
# System prepended metadata

title: Fourier Analysis
tags: [111course]

---

---
title: Fourier Analysis
tags: 111course
description: Use `{%hackmd theme-dark %}` syntax to include this theme.
toc: true
toc_float: true
toc_collapsed: true
toc_depth: 4
---
# <div id="animation_title">**Fourier Analysis**</div>
:::spoiler <span class="NOselect">參考資料們</span>
[But what is the Fourier Transform? A visual introduction ←3Blue1Brown](https://www.youtube.com/watch?v=spUNpyF58BY)
[傅立葉變換如何理解？美顏和變聲都是什麼原理？李永樂老師告訴你←李永乐老师
](https://www.youtube.com/watch?v=0LuyxzqI3Hk)[Fourier Analysis \[Data-Driven Science and Engineering\]
](https://youtube.com/playlist?list=PLMrJAkhIeNNT_Xh3Oy0Y4LTj0Oxo8GqsC)[The Book](http://databookuw.com/databook.pdf)
:::

## <div id="green_tittle">Fourier Series</div>
### Prat I
+ Inner product in Hilbert space

$\qquad<f,g>=\int_a^bf(x)\bar{g}(x)dx$
+ Fourier Series 
$$f(x)=\frac{A_0}{2}+\sum_{k=0}^\infty A_k\cos(kx)+B_k\sin(kx)$$
$\frac{A_0}{2}$ is constant where is zero frenquency.
$f(x)$ is made of combination of Cos and Sin function.

+ Fourier cofficients
$$A_k=\frac{1}{\pi}\int_{-\pi}^\pi f(x)\cos(kx)dx=\frac{1}{\lVert \cos(kx) \rVert^2}<f,\cos(kx)>$$
$$B_k=\frac{1}{\pi}\int_{-\pi}^\pi f(x)\sin(kx)dx=\frac{1}{\lVert \sin(kx) \rVert^2}<f,\sin(kx)>$$
$\overrightarrow{f}=<\overrightarrow{f},\overrightarrow{x}>\frac{\overrightarrow{x}}{\lVert x \rVert^2}+<\overrightarrow{f},\overrightarrow{y}>\frac{\overrightarrow{y}}{\lVert y \rVert^2}$
$=<\overrightarrow{f},\overrightarrow{u}>\frac{\overrightarrow{u}}{\lVert u \rVert^2}+<\overrightarrow{f},\overrightarrow{v}>\frac{\overrightarrow{v}}{\lVert v \rVert^2}$
![](https://i.imgur.com/tC3B1AQ.png =70%x)

### Conclude
SO, Fourier serie is combination of two orthogonal bases Sin and Cos
And , the infinite means combine all period of Sin and Cos.
SO, we can rewrite the equity.

$$f(x)\approx \frac{A_0}{2}+\sum_{k=0}^{100} A_k\cos(kx)+B_k\sin(kx)$$
to somehow approximate the f(x).

### Prat II
Then what we focus is from $[-\pi,\pi ]$ to $[0,L ]$
Therefore, $f(x)\in L_2(0,L)$
Then, we rewrite the above things.
$$f(x)=\frac{A_0}{2}+\sum_{k=0}^\infty A_k\cos(\frac{2\pi}{L}kx)+B_k\sin(\frac{2\pi}{L}kx)$$
$$A_k=\frac{2}{L}\int_{-\pi}^\pi f(x)\cos(\frac{2\pi}{L}kx)dx\qquad B_k=\frac{2}{L}\int_{-\pi}^\pi f(x)\sin(\frac{2\pi}{L}kx)dx$$

## <div id="green_tittle">Inner Product in Hilbert Space</div>
$\qquad<f,g>=\int_a^bf(x)\bar{g}(x)dx$
![](https://hackmd.io/_uploads/rJPrTe3H3.png =50%x) 
+ Let $f=[f_1,f_2,...f_n]\quad g=[g_1,g_2,...g_n]^T$ ![](https://hackmd.io/_uploads/BJ590x2rh.png =50%x)
+ We discreatize the f and g into k=1~n.
+ <$f,g$>$=\sum^n_{k=1} f_k\bar{g_k}$
We take the $\Delta x \; \text{to} \; 0$, it will be the whole function as f and g.
## Complex Fourier Series
## Fourier Series Codes
:::spoiler MATLAB code
```javascript=
%Define domain
L = pi;
N = 1024;
dx = 2*L/(N-1);
x = -L:dx:L;

%Define Hat Function
f = 0*x;
f(N/4:N/2) = 4*(1:N/4+1)/N;
f(N/2+1:3*N/4) = 1-4*(0:N/4-1)/N;
plot(x,f,"-k","LineWidth",3.5);
hold on ;
```
\begin{align*} \text{Define the hat function} \end{align*}
```javascript=13
%% Compute Fourier series 
CC = jet(20);
A0 = sum(f.*ones(size(x)))*dx/pi;
ffs = A0/2;
for k=1:20
    A(k) = sum(f.*cos(pi*k*x/L))*dx/pi;
    B(k) = sum(f.*sin(pi*k*x/L))*dx/pi;    
    ffs = ffs + A(k)*cos(k*pi*x/L) + B(k)*sin(k*pi*x/L);
    plot(x,ffs,'-','Color',CC(k,:),'LineWidth',1.5)
    pause(.1)
end
```
\begin{align*} \text{Fourier Series} \end{align*}
:::
![](https://hackmd.io/_uploads/HyiymrYBn.png)
:::spoiler MATLAB code
\begin{align*} \text{Appoximation of a hat funciton using Fourier series} \end{align*}
```javascript=24
%% Plot Amplitudes
clear A;
clear ERR;

ffs = A0/2;
A(1) = A0/2;
ERR(1) = norm(f-ffs);
kmax = 100;
for k=1:kmax 
    A(k+1) = sum(f.*cos(pi*k*x/L))*dx/pi;
    B(k+1) = sum(f.*sin(pi*k*x/L))*dx/pi; 
    ffs = ffs + A(k+1)*cos(k*pi*x/L) + B(k+1)*sin(k*pi*x/L);
    ERR(k+1) = norm(f-ffs)/norm(f);
end
f2 = figure;
threshold = median(ERR) *sqrt(kmax)*4/sqrt(3);
r = max(find(ERR>threshold));
r = 7;
```
```javascript=42
subplot(2,1,1)
semilogy(0:1:kmax,A,"k","LineWidth",1.5)
hold on;
semilogy(r,A(r+1),"go","LineWidth",5)
xlim([0 kmax]);
ylim([10^(-7) 1]);
ylabel("Mode Amplitude","FontSize",17)

subplot(2,1,2)
semilogy(0:1:kmax,ERR,"k","LineWidth",1.5)
hold on;
semilogy(r,ERR(r+1),"go","LineWidth",5)
xlim([0 kmax]);
xlabel("Mode Number k","Fontsize",17);
ylabel("Reconstruction Error","FontSize",17);
```
\begin{align*} \text{Ploting the two graph} \end{align*}
:::
![](https://hackmd.io/_uploads/HJwxQHKr3.png)
\begin{align*} \text{Mode Amplitude and Reconstruction Error} \end{align*}

## Gibbs Phenomena Codes
:::spoiler MATLAB code
```javascript=
//Using Fourier Series to approximatin a square hat funcion
L = 10;
N = 1024;
dx = L/(N-1);
x = 0:dx:L;
f = zeros(size(x));
f(256:768) = 1;

//Fourier Series 
A0 = sum(f.*ones(size(x)))*dx*2/L;
ffs = A0/2;
for k=1:100
    A(k) = sum(f.*cos(pi*k*x/L))*dx*2/L;
    B(k) = sum(f.*sin(pi*k*x/L))*dx*2/L;    
    ffs = ffs + A(k)*cos(k*pi*x/L) + B(k)*sin(k*pi*x/L);
end

//Plot
plot(x,f,'k',"LineWidth",2);
hold on;
title("Gibbs Phenomena");
plot(x,ffs,"r-","LineWidth",2.5);
legend("Exact Funcion","Fourier Series");
```
:::
![](https://hackmd.io/_uploads/SJ5Z1IYHn.png)

:::spoiler MATLAB code
```javascript=
L = 2*pi;
N = 1024;
dx = L/(N-1);
x = 0:dx:L;
f = zeros(size(x));
f(256:768) = 1;

//Fourier Series do many times
A0 = (1/pi)*sum(f.*ones(size(x)))*dx;
for m=1:100
    ffs = A0/2;
    for k=1:m
        Ak = (1/pi)*sum(f.*cos(2*pi*k*x/L))*dx;
        Bk = (1/pi)*sum(f.*sin(2*pi*k*x/L))*dx;    
        ffs = ffs + Ak*cos(2*k*pi*x/L) + Bk*sin(2*k*pi*x/L);
    end
    plot(x,f,'b',"LineWidth",4);
    hold on;
    plot(x,ffs,"r-","LineWidth",0.001);
    pause(0.1);
    xlim([0,6.3])
end
title('Gibbs Phenomena Display',"FontSize",25);
```
:::
![](https://hackmd.io/_uploads/ByEgTHtH2.png)
## The Fourier Transform












![](https://hackmd.io/_uploads/BJP908Frn.png)



































































<style>
@-webkit-keyframes A
{
    0%  {  color:#fc4444;
    		padding-left:0px}
    5%	{	color:;
    		padding-left:5px;}
    10% {  color:#fc7844;
    		padding-left:10px}
    15%	{	color:;
    		padding-left:15px;}
    20% {  color:#fc7844;
    		padding-left:20px}
    25%	{	color:;
    		padding-left:25px;}
    30% {  color:#e7fc44;
    		padding-left:30px}
    35%	{	color:;
    		padding-left:35px;}
    40% {  color:#e7fc44;
    		padding-left:40px}
    45%	{	color:;
    		padding-left:45px;}
    50% {  color:#7bfc44;
    		padding-left:50px}
    55%	{	color:;
    		padding-left:45px;}
    60% {  color:#44fc9a;
    		padding-left:40px}
    65%	{	color:;
    		padding-left:35px;}
    70% {  color:#44fc9a;
    		padding-left:30px}
    75%	{	color:;
    		padding-left:25px;}
    80% {  color: #44fc9a;
    		padding-left:20px}
    85%	{	color:;
    		padding-left:15x;}
    90% {  color: #9144fc;
    		padding-left:10px}
    95%	{	color:;
    		padding-left:5px;}
   100% {  color: #fc44d7;
    		padding-left:0px}
}
#animation_title{
-webkit-user-select: none;
animation: A 3s ease 0s infinite alternate;
  -webkit-animation: A 3s ease 0s infinite alternate;
  }
#green_tittle{
    color: #66bf56
}
.NOselect{    
    -webkit-user-select: none;
    }
.bg_w{
    background-color:#FFFFFF;

    }
html, body, .ui-content {
    background-color: #333;
    color: #ccc;
}

.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
    color: #ddd;
}

.markdown-body h1,
.markdown-body h2 {
    border-bottom-color: #ffffff69;
}

.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
    color: #fff;
}

.markdown-body img {
    background-color: transparent;
}

.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
    color: white;
    border-left: 2px solid white;
}

.expand-toggle:hover, 
.expand-toggle:focus, 
.back-to-top:hover, 
.back-to-top:focus, 
.go-to-bottom:hover, 
.go-to-bottom:focus {
    color: white;
}


.ui-toc-dropdown {
    background-color: #333;
}

.ui-toc-label.btn {
    background-color: #191919;
    color: white;
}

.ui-toc-dropdown .nav>li>a:focus, 
.ui-toc-dropdown .nav>li>a:hover {
    color: white;
    border-left: 1px solid white;
}

.markdown-body blockquote {
    color: #bcbcbc;
}

.markdown-body table tr {
    background-color: #5f5f5f;
}

.markdown-body table tr:nth-child(2n) {
    background-color: #4f4f4f;
}

.markdown-body code,
.markdown-body tt {
    color: #eee;
    background-color: rgba(230, 230, 230, 0.36);
}

a,
.open-files-container li.selected a {
    color: #5EB7E0;
}
    .cblue {
        color: #2890eb;
}
    .sblue{
        color: #91e069;
    }
    .kblue{
        color: #c562fc;
    }
    .purple{
        color: #8c03ab;
        font-weight: 650;
}   
    .bgc{
        background-color: #496968;
    }
    .marker{
        background-color:#786060;
        color: #faf26e;
    }
    .smtittle{
        font-size: 20px;
    }
</style>