用于扬声器测量的激励信号的python实现

本文介绍了连续对数扫频信号用于扬声器测试的方法,包括其数学公式、特点以及Python代码实现。同时,文中提到了锯齿波信号在测量扬声器极性时的独特特性。
Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本


一、连续对数扫频信号

  主要用于扬声器扫频测试,作为激励信号。测量扬声器的频响,失真、信噪比。

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 nf0 ( 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)=αnn1sin(2πf0tn)

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

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值