一图搞懂傅里叶变换
实验
首先用这张图
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('../input/ffttest/fftpic.png',0)
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
magnitude_spectrum = 20*np.log(np.abs(fshift))
plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(magnitude_spectrum, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()
下图是灰度图和fft后的频谱
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
#读取图像
img = cv.imread('../input/ffttest/fftpic.png', 0)
#傅里叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
res = np.log(np.abs(fshift))
#傅里叶逆变换
ishift = np.fft.ifftshift(fshift)
iimg = np.fft.ifft2(ishift)
iimg = np.abs(iimg)
#展示结果
plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')
plt.axis('off')
plt.subplot(132), plt.imshow(res, 'gray'), plt.title('Fourier Image')
plt.axis('off')
plt.subplot(133), plt.imshow(iimg, 'gray'), plt.title('Inverse Fourier Image')
plt.axis('off')
plt.show()
经过逆变换后可以复原图像
滤波
白色是低频部分,可以滤掉低频获得轮廓,滤掉高频得到模糊的图像
rows, cols = img.shape
crow,ccol = int(rows/2) , int(cols/2)
# 首先创建一个掩码,中心正方形为1,其余全为零
mask = np.zeros((rows,cols,2),np.uint8)
mask[crow-30:crow+30, ccol-30:ccol+30] = 1
# 应用掩码和逆DFT
fshift = dft_shift*mask
f_ishift = np.fft.ifftshift(fshift)
img_back = cv.idft(f_ishift)
img_back = cv.magnitude(img_back[:,:,0],img_back[:,:,1])
plt.subplot(121),plt.imshow(img, cmap = 'gray')
plt.title('Input Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(img_back, cmap = 'gray')
plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
plt.show()
这个是滤掉高频部分的
下面是轮廓部分:
将高通滤波和低通滤波结合起来就是带通滤波
比如:
呵呵,很诡异啊
功率谱和小波
关于信号
信号的能量:
能量/时间为功率:
功率信号:
大概意思就是功率有限,能量无限
功率谱psd
定义:
时转频分析,将能量分解到频率上,根据方差贡献诊断周期
功率谱求法:
为什么功率型号不用fft:
进一步从数学的角度看看:
周期变化函数展开傅里叶级数:
既然有无数波叠加那么就有振幅和相位
功率谱:
推导太恶心了大概就是这么个意思:
就是时域上的功率分解到频率上,离散的就是求和,连续就是积分
那么这里从公式上看能量就是方差对吧,这个是吧时域上的能量分解到频域上从最后一个公式可以看出
功率谱计算数学推导:
离散:
连续:
计算步骤,这里参考魏凤英的,黄的太细了看的眼睛疼
两种计算方法:
- 直接傅里叶展开
2.滞后自相关求解
得到粗谱估计后平滑
完整流程
根据r(0)来选择用白噪声还是红噪声检验
例子
这个就很明显,6-7年的震荡
暴雨的功率谱
终于是让我找到了一个
结合功率谱和最大熵谱来确定周期,当然这个比小波要粗糙的多属于全域上的
小波分析
意义:
小波变换:
一般用墨西哥帽小波变换和morlet小波变换
这里结合黄和魏的一块来看公式,一个太详细抽象,一个太简单偏工具性质。
fft提取不到局部的频率特征,就有了加窗fft:
给这个窗加两个伸缩系数就是小波变换
小波方差:
小波分析在暴雨中的应用
小波功率谱分析
小波系数分析
系数和功率谱一块分析
这个是最完整的分析
我又找到一个更完善的分析,不愧是国家气象中心的大佬,我觉得这个分析的很全了。
大概意思就是自相关算的那个功率谱是全局跟之前贴的描述差不多,小波的功率谱可以看时间区间上的显著周期,而功率谱power方差可以更进一步把小波里显著的周期提出来在算一遍,更清晰的看到哪几年的区间是有这个周期的