一、什么是采样频率?
采样频率,也称为采样速度或者采样率,定义了单位时间内从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。采样频率的倒数是采样周期或者叫作采样时间,它是采样之间的时间间隔。通俗的讲采样频率是指计算机单位时间内能够采集多少个信号样本。
二、什么是采样定理?
所谓采样定理 ,又称香农采样定理,奈奎斯特采样定理,是信号处理学科中的一个重要基本结论。
采样定理指出,只有采样频率高于信号带宽的两倍,原来的连续信号才可以从采样样本中完全重建出来。采样频率的一半(即奈奎斯特频率)低于信号带宽,那么此时这些离散的采样点就会导致混叠现象。
如果信号的带宽是100Hz,那么为了避免混叠现象采样频率必须大于200Hz。换句话说就是采样频率必须至少是信号中最大频率分量频率的两倍,否则就不能从信号采样中恢复原始信号。
关于采样定理如何理解,已有不少大神进行了讲解,这里不再细说。可以查看如何理解 Nyquist 采样定理?,当然还是建议有能力的同学,深入理解一下时域卷积公式及其变换到频域后的特点,就一目了然了。如果大家认为有必要讲解,可以留言回复,我可以从理论上给大家推导一下。
三、采样率究竟应该定?
数字测量应用所需的采用率为多少?一些工程师对于 Nyquist 理论深信不疑,并且认为只要采样率是示波器带宽的 2 倍便足矣。而其他工程师则不相信建立于 Nyquist 标准的数字滤波技术,更愿意使用采样率为带宽技术指标 10 至 20 倍的示波器。实际情况介于二者之间。
四、让python来看看采样率问题
下面我们分别用不同倍数采样率,对同一个周期内的信号进行采集,分析采集后数据的功率(即曲线下方的面积)。对于正弦信号
x
=
c
o
s
(
2
π
f
t
)
\mathrm{x}=cos(2\pi ft)
x=cos(2πft),其在一个周期内的面积积分(即能量)为:
4
×
∫
0
1
4
f
cos
(
2
π
f
t
)
d
t
=
1
2
π
f
sin
(
2
π
f
t
)
∣
0
1
4
f
=
2
π
f
(4.1)
4\times\int_{0}^{\frac{1}{4f}}\cos {(2\pi ft)}d_t=\frac{1}{2\pi f}\sin{(2\pi ft)}|_{0}^{\frac{1}{4f}}=\frac{2}{\pi f}\tag{4.1}
4×∫04f1cos(2πft)dt=2πf1sin(2πft)∣04f1=πf2(4.1)
令采样频率
f
s
=
N
f
f_s=Nf
fs=Nf,则各采样时间为
t
=
n
N
f
(
其
中
:
n
=
1
,
2
,
3
…
N
)
t =\frac{n}{Nf}(其中:n=1,2,3\dots N)
t=Nfn(其中:n=1,2,3…N)。带入到式(4.1)中,则需求解的是离散信号
cos
(
2
π
f
n
N
)
(
其
中
:
n
=
1
,
2
,
3
…
N
)
\cos{(2\pi f\frac{n}{N})}(其中:n=1,2,3\dots N)
cos(2πfNn)(其中:n=1,2,3…N)包围的面积。
# 导入模块
import matplotlib.pyplot as plt
import numpy as np
# 设定采样倍数
N = np.arange(2, 50, 1)
# 令待计算信号的频率为10Hz
f = 10
# 计算离散曲线下方面积
aera = []
for _N in N:
n = np.arange(_N) + 1
_aera = []
# 摒除初始相位带来的误差
for i in range(20):
sig = np.abs(np.cos(2*np.pi*n /_N + 2*np.pi*i/20))
_aera.append(np.trapz(sig, dx=1/(_N*f)))
aera.append(np.mean(_aera))
error = (np.array(aera) - 2/(f * np.pi))/(2/(f * np.pi))*100
plt.plot(N, error)
plt.xlabel("f_s/f")
plt.show()
五、结论
由以上分析可知,一般来说,如果只关心信号的频率组成,遵循采样定理即可;如果关心信号的幅值,那么,采样频率应大于10倍的信号频率(只有10%的误差)才不会引起明显的幅值失真。