【B站首发】2025年最新草履虫都能看懂的【傅里叶变换】讲解,清华大学李永乐老师教你如何理解傅里叶变换,辨清美颜和变声原理!!!傅里叶|人工智能|数学|机器学习_哔哩哔哩_bilibili

傅里叶级数:周期性函数分解为一系列正弦函数 时域 =》频率、振幅、相位

傅里叶变换 傅里叶变换是一种数学工具,用于将信号(如声音、图像、电磁波等)从时域(时间/空间维度)转换到频域(频率维度),揭示信号中不同频率成分的强度。

核心思想:任何复杂信号都可以分解为多个简单正弦波的叠加。

核心公式与分类**

1. 连续傅里叶变换(CFT)

  • 适用对象:连续时间信号
  • 公式:
    $$ F(\omega) = \int_{-\infty}^{\infty} f(t) e^{-j\omega t} dt $$
  • 逆变换:
    $$ f(t) = \frac{1}{2\pi} \int_{-\infty}^{\infty} F(\omega) e^{j\omega t} d\omega $$

2. 离散傅里叶变换(DFT)

  • 适用对象:离散时间信号(如数字信号)
  • 公式:
    $$ X[k] = \sum_{n=0}^{N-1} x[n] e^{-j\frac{2\pi}{N}kn} \quad (k=0,1,…,N-1) $$

3. 快速傅里叶变换(FFT)

  • 本质:DFT的高效算法(计算复杂度从 (O(N^2)) 降低到 (O(N\log N))),现代数字信号处理的核心工具。
  • 应用场景:音频处理、图像压缩(如JPEG)、通信系统等。

短时傅里叶变换(STFT)

对信号加窗分段,分析局部频域特性(用于时频分析,如语谱图)。

图像:低频轮廓,高频细节

# 傅立叶变换 相应操作  
# 得到频域上的图像,其幅值、相位  
# 变换再逆变换得到原图  
  
import cv2  
import numpy as np  
import matplotlib.pyplot as plt  
  
img = cv2.imread('flag4_flag10.png', 0)  # 直接读为灰度图像  
f = np.fft.fft2(img)# 二维FFT  
fshift = np.fft.fftshift(f)# 将低频移到中心  
# 取绝对值.:将复数变化成实数  
# 取对数的目的为了将数据变化到较小的范围(比如0-255)  
c1 = np.log(np.abs(f))  # 频域后图像的振幅信息  
c2 = np.log(np.abs(fshift))  # 中心化操作  
  
ph_f = np.angle(f)  # 图像上每个像素点对应的相位图  
ph_fshift = np.angle(fshift)  # 中心化操作  
  
# 逆变换  
f0shift = np.fft.ifftshift(fshift)  
img_back = np.fft.ifft2(f0shift)  
img_back = np.abs(img_back)  # 出来的是复数,无法显示  
  
# 逆变换--取绝对值就是振幅  
f1shift = np.fft.ifftshift(np.abs(fshift))  
img_back1 = np.fft.ifft2(f1shift)  
img_back1 = np.abs(img_back1)  
img_back1 = (img_back1-np.amin(img_back1))/(np.amax(img_back1)-np.amin(img_back1))  
  
# 逆变换--取相位  
f2shift = np.fft.ifftshift(np.angle(fshift))  
img_back2 = np.fft.ifft2(f2shift)  
# 出来的是复数,无法显示  
img_back2 = np.abs(img_back2)  
# 调整大小范围便于显示  
img_back2 = (img_back2-np.amin(img_back2))/(np.amax(img_back2)-np.amin(img_back2))  
  
# 逆变换--两者合成  
s1 = np.abs(fshift)  # 取振幅  
s1_angle = np.angle(fshift)  # 取相位  
s1_real = s1*np.cos(s1_angle)  # 取实部  
s1_imag = s1*np.sin(s1_angle)  # 取虚部  
s2 = np.zeros(img.shape, dtype=complex)  
s2.real = np.array(s1_real)  # 重新赋值s1给s2  
s2.imag = np.array(s1_imag)  
f3shift = np.fft.ifftshift(s2)  # 对新的进行逆变换  
img_back3 = np.fft.ifft2(f3shift)  
# 出来的是复数,无法显示  
img_back3 = np.abs(img_back3)  
# 调整大小范围便于显示  
img_back3 = (img_back3-np.amin(img_back3))/(np.amax(img_back3)-np.amin(img_back3))  
  
plt.subplot(421), plt.imshow(img, 'gray'), plt.title('original')  
plt.subplot(422), plt.imshow(c1, 'gray'), plt.title('Amplitude')  
plt.subplot(423), plt.imshow(c2, 'gray'), plt.title('center')  
plt.subplot(424), plt.imshow(ph_f, 'gray'), plt.title('phases')  
plt.subplot(425), plt.imshow(img_back, 'gray'), plt.title('img_back')  
plt.show()

Numpy系列(八):函数库之5傅里叶变换函数_numpy傅里叶变换-CSDN博客