赞
踩
三角函数如下,我们可以使用三角函数合成各种复杂的函数
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()
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()
含有两个频率的频谱,可以看到图中有两个波峰
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。