python中使用傅里叶变换生成频谱图

在python中可以使用numpy和scipy进行傅里叶的操作且二者的傅里叶操作函数名都差不多

首先我们导入相关模块并初始化一个信号

import numpy as np
import matplotlib.pyplot as plt

t = np.linspace(0, 1, 1000)
signal = 5*np.sin(50*2*np.pi*t) + 10*np.sin(10*2*np.pi*t) + 6

 显示信号

plt.figure(figsize=(10, 5))
plt.plot(t, signal)
plt.show()

使用numpy中的fft模块进行傅里叶变换的相关操作

# 间传入的信号进行傅里叶变换,返回傅里叶变换的结果,返回的是复数
f_signal = np.fft.fft(signal)
# 传入信号长度及采样率,返回对应频率
f_t = np.fft.fftfreq(len(t), 1/1000)

# 要对傅里叶变换结果取绝对值
plt.plot(f_t, abs(f_signal))
plt.xlim(-100, 100)
plt.show()

 

这个时候都图并不是我们想要的频谱图 

# 由于是计算结果是双边频谱而且它的左右两边的整体顺序不连续的是先右边的数据再左边的数据所以要进行排序
# 对傅里叶变换的结果进行排序
f_signal = np.fft.fftshift(f_signal)
# 对频率进行排序
f_t = np.fft.fftshift(f_t)

# 要将幅值转换成信号成分的幅度需要除以信号的长度又因为是双倍频谱所以只需要除信号长度的一半
f_signal = f_signal / len(t) * 2
# 因为双边频谱的频率等于0的位置是左右两部分的叠加所以还需要再除2
f_signal[f_t==0] = f_signal[f_t==0] / 2

plt.plot(f_t, abs(f_signal))
plt.xlim(-100, 100)
plt.show()

 通过处理后便能出现幅度等于幅值的频谱图

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值