一、连续对数扫频信号
主要用于扬声器扫频测试,作为激励信号。测量扬声器的频响,失真、信噪比。
1、公式
U ( t ) = A cos ( ψ ( t ) ) = A c o s [ ω 1 T l n ω 2 ω 1 ( e t T l n ( ω 2 ω 1 ) − 1 ) ] U(t)=A\cos(\psi(t))=Acos\begin{bmatrix} {\cfrac{\omega_1T}{ln{\cfrac{\omega_2}{\omega_1}}}}{(e^{\cfrac{t}{T}ln(\cfrac{\omega_2}{\omega_1})} - 1)} \end{bmatrix} U(t)=Acos(ψ(t))=Acos lnω1ω2ω1T(eTtln(ω1ω2)−1)
其中
A
A
A表示激励信号的幅度,
ψ
(
t
)
\psi(t)
ψ(t)表示激励信号的瞬时相位,
T
T
T表示激励信号的时间 。
ω
1
\omega_1
ω1表示激励信号的起始频率,
ω
1
\omega_1
ω1表示激励信号的终止频率 。
该信号的特点是频率随时间连续变化, 并且符合对数增长规律 。使用该测量信号作为激励信号, 不仅可以不遗漏地测试所有频率点, 还可以在总的测量时间中给每个倍频程的频段分配均匀的测量时间。

2、python实现
- 对数频率
W1 = start
W2 = end
T = 2 # 信号持续时间s
rate = 44100
L = T / np.log(W2 / W1)
t = np.linspace(0, T, int(rate * T))
ts = np.linspace(0, T, int(rate * T - 1))
fx = W1 * np.e ** (ts / L)
- 信号函数
当频率恒定时,相位 ψ \psi ψ随时间线性增加:
ψ = 2 π f t \psi=2\pi{ft} ψ=2πft
而当频率时时间的函数时,在一个短暂的时间间隔 Δ t \Delta{}t Δt之内的相位变化为:
Δ ψ = 2 π f ( t ) Δ t \Delta\psi=2\pi{f(t)}\Delta{t} Δψ=2πf(t)Δt
dts = np.diff(t)
np.diff计算时间序列相邻元素之间的差值。
fx包含了 f ( t ) f(t) f(t),而dts包含了时间间隔,所以各个时间的相位变化为:
dphis = 2 * np.pi * fx * dts
dphis包含了相位的变化,我们可以通过加和变换量获得各时间的总相位:
phases = np.cumsum(dphis)
它不是从0开始的,所以还要在初始位置加一个0
phases = np.insert(phases, 0, 0)
然后根据公式 U ( t ) = A cos ( ψ ( t ) ) U(t)=A\cos(\psi(t)) U(t)=Acos(ψ(t))有:
Ut = 2 ** 15 * np.cos(phases)
- 完整代码
def Sweep_frequency_signal(start=200.0, end=15000.0, Time=2.0):
W1 = start
W2 = end
T = Time
rate = 44100
t = np.linspace(0, T, int(rate * T))
L = T / np.log(W2 / W1)
ts = np.linspace(0, T, int(rate * T - 1))
fx = W1 * np.e ** (ts / L)
dts = np.diff(t)
dphis = 2 * np.pi * fx * dts
phases = np.cumsum(dphis)
phases = np.insert(phases, 0, 0)
Ut = 2 ** 15 * np.cos(phases)
return Ut
二、锯齿波信号
主要用于测量扬声器极性。它具有以下特征:
(1) 信号包含的频谱部分 n ⋅ f 0 n·f_0 n⋅f0 ( n = 1,2,3,…; f 0 f_0 f0 = 20 Hz);
(2) 频谱成分中的相对幅度以 1 /n 降低;
(3) 所有的信号成分都从在时间 t = 0 时相位为0开始。
y ( t ) = α ∙ ∑ n 1 n ∙ sin ( 2 π ∙ f 0 ∙ t ∙ n ) y(t) = \alpha\bull\displaystyle\sum_n{\cfrac{1}{n}\bull\sin(2\pi\bull f_0\bull t\bull n)} y(t)=α∙n∑n1∙sin(2π∙f0∙t∙n)
def PolaritySignal(frequency, Time):
f0 = frequency
rate = 44100
T = Time
t = np.linspace(0, T, int(rate * T))
signal = 0
for n in range(1, 11):
signal = signal + np.sin(2 * np.pi * f0 * t * n) / n
signal = signal / np.max(signal)
return signal
本文介绍了连续对数扫频信号用于扬声器测试的方法,包括其数学公式、特点以及Python代码实现。同时,文中提到了锯齿波信号在测量扬声器极性时的独特特性。

1448

被折叠的 条评论
为什么被折叠?



