当前位置:   article > 正文

数字信号处理-6-Python计算频谱_python求信号的频谱特征

python求信号的频谱特征

1 波形合成

三角函数如下,我们可以使用三角函数合成各种复杂的函数
y = A c o s ( 2 π f t + φ 0 ) y = Acos(2πft + φ_0) y=Acos(2πft+φ0)
其中 A 是幅度,f 是频率,t 是时间,φ0是相位偏移

另一种视角,ω 为角频率,为频率的 2π 倍,角频率单位为弧度/秒(rad/s),参见数字信号处理-2-三角函数与谱。ωt 则表示旋转角度,等价于 2πft。
ω = 2 π f ω=2πf ω=2πf

对应到代码就是:

# jupyter notebook 中运行
# 导入需要的包
import numpy as np
from matplotlib import pyplot as plt
import math

# 常数值 2π
# jupyter notebook 中运行
# 导入需要的包
import numpy as np
from matplotlib import pyplot as plt
import math

# 常数值 2π
PI2 = math.pi * 2
#采样率
framerate = 11025
# 采样时长:秒
duration = 0.01
# 样本数
n = round(duration * framerate)
# 采样时间点
ts = np.arange(n) / framerate
# 频率
f = 440
# 振幅
A = 1
# 相位偏移
offset = 0
ys1 = A * np.cos(PI2*f*ts + offset)
ys2 = A * np.cos(PI2*1000*ts + offset)
ys = ys1 + ys2
plt.plot(ts,ys,'r',label='1r,3w')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

在这里插入图片描述

2 计算频谱

from numpy.fft import rfft, rfftfreq

def make_spectrum(ys, framerate):
    # 波形采样数
    n = len(ys)
    # 样本采样频率倒数,也即样本间时间差
    d = 1/framerate
    # 返回各个频率元素的倍数振幅和相位差 复数形式,可以理解为振幅和角度的向量
    hs = rfft(ys)
    # 返回包含对应hs各元素的频率数组,采样率的一半 11025/2
    fs = rfftfreq(n, d)
    return hs,fs

hs,fs = make_spectrum(ys, framerate)
hs =np.absolute(hs)
plt.plot(fs, hs,'r',label='1r,3w')
plt.xlabel('Hz')
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

含有两个频率的频谱,可以看到图中有两个波峰
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/106490
推荐阅读
相关标签
  

闽ICP备14008679号