高中生就能看懂的傅里叶变换数学原理
相信有不少人去了解过傅里叶变换和傅里叶卷积的概念,从一个视频的启发,傅里叶变换可以将波从时域转到频域,其实做的事情就是检测已有的一个波的成分(该波由哪些频率的波组成,并且求出其振幅和初相位),怎么做到的呢?一句话概括就是拿所有频率的波去检测,就像做探测一样,探测到了就有,没探测到就没有,所有频率去检测这是理想的方式,因为任意小的区间都有无穷个实数,现实中无法一一检测,实际上的处理方式都是做DFT(离散傅里叶变换),检测一些正整数频率的波是否存在。
下面步入正题,先说结论:假设积分区间长度为T,是待检测波(频率为
f
1
f_1
f1)的正整数个周期,也是检测波(频率为
f
2
f_2
f2)的正整数周期。如果两个波的频率不一样,那么这两个波在积分区间T内的卷积为0,用数学表达式如下所示。
∫
a
b
c
o
s
(
2
π
f
1
x
)
c
o
s
(
2
π
f
2
x
+
c
)
d
x
=
0.
\int_a^b cos(2\pi f_1x)cos(2\pi f_2x+c)dx = 0.
∫abcos(2πf1x)cos(2πf2x+c)dx=0. ①
其中
b
−
a
=
m
f
1
=
n
f
2
=
T
.
b-a =\frac{m}{f_1} = \frac{n}{f_2} = T.
b−a=f1m=f2n=T. ②,且m、n为正整数,
f
1
≠
f
2
f_1≠f_2
f1=f2
用a表示积分下限,b表示积分上限,意思就是只要周期长度是T,且为两个波的周期正整数倍即可,和积分起点无关。证明过程如下:
根据两角和差公式:
c
o
s
(
α
+
β
)
=
c
o
s
(
α
)
c
o
s
(
β
)
−
s
i
n
(
α
)
s
i
n
(
β
)
,
cos(\alpha+\beta) = cos(\alpha)cos(\beta) - sin(\alpha)sin(\beta),
cos(α+β)=cos(α)cos(β)−sin(α)sin(β),
c
o
s
(
α
−
β
)
=
c
o
s
(
α
)
c
o
s
(
β
)
+
s
i
n
(
α
)
s
i
n
(
β
)
cos(\alpha-\beta) = cos(\alpha)cos(\beta) + sin(\alpha)sin(\beta)
cos(α−β)=cos(α)cos(β)+sin(α)sin(β)
如果
c
o
s
(
α
+
β
)
=
0
cos(\alpha+\beta)=0
cos(α+β)=0,且
c
o
s
(
α
−
β
)
=
0
cos(\alpha-\beta)=0
cos(α−β)=0,那么就可以得出
c
o
s
(
α
)
c
o
s
(
β
)
cos(\alpha)cos(\beta)
cos(α)cos(β)和
s
i
n
(
α
)
s
i
n
(
β
)
sin(\alpha)sin(\beta)
sin(α)sin(β)都等于0,于是公式①得证。
∫
a
b
c
o
s
(
2
π
f
1
x
+
2
π
f
2
x
+
c
)
d
x
=
∫
a
b
c
o
s
[
2
π
(
f
1
+
f
2
)
x
+
c
]
d
x
.
\int_a^b cos(2\pi f_1x + 2\pi f_2x+c)dx = \int_a^b cos[2\pi (f_1+f_2)x +c]dx.
∫abcos(2πf1x+2πf2x+c)dx=∫abcos[2π(f1+f2)x+c]dx. ③
其中
c
o
s
[
2
π
(
f
1
+
f
2
)
x
+
c
]
cos[2\pi (f_1+f_2)x +c]
cos[2π(f1+f2)x+c]的周期是
1
f
1
+
f
2
\frac{1}{f_1+f_2}
f1+f21,算T是不是该周期的整数倍,
T
/
(
1
f
1
+
f
2
)
=
T
∗
(
f
1
+
f
2
)
=
m
+
n
T/(\frac{1}{f_1+f_2}) =T*(f_1+f_2) = m+n
T/(f1+f21)=T∗(f1+f2)=m+n,
于是可以得出公式③
∫
a
b
c
o
s
(
2
π
f
1
x
+
2
π
f
2
x
+
c
)
d
x
=
0
\int_a^b cos(2\pi f_1x + 2\pi f_2x+c)dx=0
∫abcos(2πf1x+2πf2x+c)dx=0,同理可以得出
∫
a
b
c
o
s
(
2
π
f
1
x
−
2
π
f
2
x
+
c
)
d
x
=
0
\int_a^b cos(2\pi f_1x - 2\pi f_2x+c)dx=0
∫abcos(2πf1x−2πf2x+c)dx=0.
因此可以得出公式①成立,证毕。
以上已经证明了检测波与待检测波频率不一致的情况下,该积分恒等于0,如果两波的频率相等呢?稍微化简一下就行了,
∫
a
b
c
o
s
(
2
π
f
1
x
)
c
o
s
(
2
π
f
1
x
+
c
)
d
x
=
∫
a
b
c
o
s
(
2
π
f
1
x
)
c
o
s
(
2
π
f
1
x
)
c
o
s
(
c
)
d
x
−
∫
a
b
c
o
s
(
2
π
f
1
x
)
s
i
n
(
2
π
f
1
x
)
s
i
n
(
c
)
d
x
=
∫
a
b
c
o
s
(
4
π
f
1
x
)
+
1
2
c
o
s
(
c
)
d
x
−
∫
a
b
s
i
n
(
4
π
f
1
x
)
2
s
i
n
(
c
)
d
x
=
1
2
∫
a
b
c
o
s
(
c
)
d
x
=
T
2
c
o
s
(
c
)
\int_a^b cos(2\pi f_1x)cos(2\pi f_1x+c)dx=\int_a^b cos(2\pi f_1x)cos(2\pi f_1x)cos(c)dx-\int_a^b cos(2\pi f_1x)sin(2\pi f_1x)sin(c)dx=\int_a^b \frac{cos(4\pi f_1x)+1}{2}cos(c)dx-\int_a^b \frac{sin(4\pi f_1x)}{2}sin(c)dx=\frac{1}{2}\int_a^b cos(c)dx=\frac{T}{2}cos(c)
∫abcos(2πf1x)cos(2πf1x+c)dx=∫abcos(2πf1x)cos(2πf1x)cos(c)dx−∫abcos(2πf1x)sin(2πf1x)sin(c)dx=∫ab2cos(4πf1x)+1cos(c)dx−∫ab2sin(4πf1x)sin(c)dx=21∫abcos(c)dx=2Tcos(c) ④
这个结果说明,频率相同的时候,这个积分是一个变化的值,随着检测波的左右平移变化,变化图像也是一个余弦函数,当c=0时,这个积分达到最大值,c=0意味着检测波与待检测波完全重合,最后想知道待检测波的振幅,直接将最大的积分值除以T/2即可。
至此可以总结一下,傅里叶变换其实就是拿很多不同频率的余弦波去做探测:
1)如果频率不同,①式的积分一定为0,如果频率相同的时候①式积分值会随着检测波的左右平移而变化,在两波重合的时候达到最大值
2)使得该积分达到最大值的c值就是待检测波的初相位
3)该积分的最大值除以T/2就是待检测波的振幅
至此,待检测波的频率、初相位和振幅都能算出来了。这个算法中,有一个步骤其实是很麻烦的,就是需要将检测波不断的平移来求出最大值,如果真这么做将极大的提升算法计算量,其实傅里叶大神已经解决了这个问题了,每个检测波不需要平移,只需在用检测波的正弦函数再求一次积分即可,推导过程如下。
∫
a
b
c
o
s
(
2
π
f
1
x
)
s
i
n
(
2
π
f
1
x
+
c
)
d
x
=
∫
a
b
c
o
s
(
2
π
f
1
x
)
s
i
n
(
2
π
f
1
x
)
c
o
s
(
c
)
d
x
+
∫
a
b
c
o
s
(
2
π
f
1
x
)
c
o
s
(
2
π
f
1
x
)
s
i
n
(
c
)
d
x
=
∫
a
b
s
i
n
(
4
π
f
1
x
)
2
c
o
s
(
c
)
d
x
+
∫
a
b
c
o
s
(
4
π
f
1
x
)
+
1
2
s
i
n
(
c
)
d
x
=
1
2
∫
a
b
s
i
n
(
c
)
d
x
=
T
2
s
i
n
(
c
)
\int_a^b cos(2\pi f_1x)sin(2\pi f_1x+c)dx=\int_a^b cos(2\pi f_1x)sin(2\pi f_1x)cos(c)dx+\int_a^b cos(2\pi f_1x)cos(2\pi f_1x)sin(c)dx=\int_a^b \frac{sin(4\pi f_1x)}{2}cos(c)dx+\int_a^b \frac{cos(4\pi f_1x)+1}{2}sin(c)dx=\frac{1}{2}\int_a^b sin(c)dx=\frac{T}{2}sin(c)
∫abcos(2πf1x)sin(2πf1x+c)dx=∫abcos(2πf1x)sin(2πf1x)cos(c)dx+∫abcos(2πf1x)cos(2πf1x)sin(c)dx=∫ab2sin(4πf1x)cos(c)dx+∫ab2cos(4πf1x)+1sin(c)dx=21∫absin(c)dx=2Tsin(c) ⑤
④式的最大值是T/2,现在通过④式+⑤式的平方和的根即可求出,
[
T
2
c
o
s
(
c
)
]
2
+
[
T
2
s
i
n
(
c
)
]
2
=
T
2
\sqrt{[\frac{T}{2}cos(c)]^2+[\frac{T}{2}sin(c)]^2}=\frac{T}{2}
[2Tcos(c)]2+[2Tsin(c)]2=2T
看到这你应该就明白了傅里叶变换里面为什么检测波的形式为啥是cos(x)-i*sin(x)了吧,其实就是两个分开计算的,后续还会更新fft算法。