数据分析-傅里叶变换

本文介绍了傅里叶变换在数据分析中的作用,包括如何通过傅里叶变换进行信号降噪,具体展示了从读取音频文件、进行傅里叶变换、滤波处理到生成新音频信号的过程。
摘要由CSDN通过智能技术生成

数据分析

矩阵的特征值与特征向量

对于n阶方阵,如果存在数a和非零n维列向量x, 使得Ax=ax, 则称a是矩阵A的一个特征值, x是矩阵A属于特征值a的特征向量.

# 已知n阶方阵A, 求特征值与特征向量
# eigvals: 找到的所有特征值数组
# eigvecs: 找到的与特征值对应的特征向量数组
eigvals, eigvecs = np.linalg.eig(A)
# 已知特征值与特征向量,逆向求原方阵
A = np.mat(eigvecs) * np.mat(np.diag(eigvals)) * 
	np.mat(eigvecs).I

案例: 读取图片的亮度矩阵, 提取特征值与特征向量, 保留部分特征值, 重新生成新的亮度矩阵所描述的图片, 并绘制在窗体中.

import numpy as np
import matplotlib.pyplot as mp
import scipy.misc as sm

# 使用sm的方法读取一张图片 得到图片像素矩阵
# True  黑白亮度矩阵
# False 完整图像
img = sm.imread('../data/lily.jpg', True)
# 提取图片的特征值与特征向量
eigvals, eigvecs = np.linalg.eig(img)
#print(eigvals.shape, eigvecs.shape)
eigvals[512:] = 0
nimg = np.mat(eigvecs) *  \
    np.mat(np.diag(eigvals)) * \
    np.mat(eigvecs).I
nimg = nimg.real

mp.figure('Lily', facecolor='lightgray')
mp.subplot(1, 2, 1)
mp.xticks([])
mp.yticks([])
mp.imshow(img, cmap='gray')
mp.tight_layout()

mp.subplot(1, 2, 2)
mp.xticks([])
mp.yticks([])
mp.imshow(nimg, cmap='gray')
mp.tight_layout()

mp.show()

奇异值分解

有一个矩阵M, 可以分解为3个矩阵U, S, V, 使得U x S x V等于M.

U与V都是正交矩阵(自己乘以自己的转置结果为单位矩阵). 那么S矩阵主对角线上的元素成为矩阵M的奇异值, 其他元素均为0.

# 调用svd方法完成对M矩阵的奇异值分解, 得到U sv V
# 其中sv存储了矩阵M的奇异值
U, sv, V = np.linalg.svd(M)
# 通过U sv V逆向求取原矩阵:
M2 = U * np.diag(sv) * V

案例: 读取图片的亮度矩阵, 提取奇异值, 保留部分奇异值, 重新生成新的亮度矩阵所描述的图片, 并绘制在窗体中.

# 奇异值分解
print(img.dtype)
U, sv, V = np.linalg.svd(img)
sv[50:] = 0
img3 = U * np.mat(np.diag(sv)) * V

mp.subplot(2, 2, 3)
mp.xticks([])
mp.yticks([])
mp.imshow(img3, cmap='gray')
mp.tight_layout()

快速傅里叶变换模块(FFT)

什么是傅里叶变换?

傅里叶定理指出,任何一条周期曲线,无论多么跳跃或不规则,都能表示成一组光滑正弦曲线叠加之和.

傅里叶变换的过程即是把这条周期曲线拆解成多个光滑正弦曲线的过程. 傅里叶变换的目的是将时域(时间域)上的信号转变为频域(频率域信号), 随着域的不同, 对一个事物的了解角度也会随之改变.因此某些在时域中不好处的地方, 在频域中就可以简单的处理.这样可以大量的减少处理信号的存储量.

傅里叶变换相关函数

import numpy.fft as nf

# 通过采样数量/采样周期
# 求得傅里叶变换分解所得曲线的频率序列
freqs = np.fft.fftfreq(采样数量, 采样周期)
# fft.fft()方法 通过原函数做快速傅里叶变换
# 得到拆解出来所有的函数参数
# 目标函数值序列(复数序列[实部,虚部]), 
# 复数的模代表振幅,复数的幅角代表相位角
目标复数序列 = np.fft.fft(原函数值序列)

#逆向傅里叶变换
原函数值序列 = np.fft.ifft(目标复数序列)

案例:基于傅里叶变换的频域滤波

含噪声音信号是高能信号与低能噪声信号叠加的信号. 可以通过傅里叶变换实现简单降噪.

过程:

  1. 通过FFT使含噪信号转换为含噪频谱.
  2. 把能量较小的频率信号去除.
  3. 留下高能频谱后再通过IFFT生成新的声音信
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值