【问题标题】:Impedance of a blowing instrument吹奏乐器的阻抗
【发布时间】:2021-03-21 02:53:05
【问题描述】:

我正在尝试重现本文中描述的模型https://hal.archives-ouvertes.fr/file/index/docid/683477/filename/clarinette-logique-8.pdf

这是一个返回半径为 a、长度为 L 的圆柱体的传递矩阵的方法。

# density of air
rho = 1.2250

# viscosity of air
eta = 18.5

# transfer matrix for a cylinder
def Tcyl(a, L):
    rv = a * math.sqrt(rho*omega/eta)
    Z0 = (rho * constants.c) / (constants.pi * a**2)
    Zc = Z0 * complex(1 + 0.369/rv, -(0.369/rv + 1.149/rv**2))
    gamma = k * complex(1.045/rv + 1.080/rv**2, 1 + 1.045/rv)
    return
       np.matrix([[cmath.cosh(gamma*L),Zc*cmath.sinh(gamma*L)],
       [(1.0/Zc)*cmath.sinh(gamma*L),cmath.cosh(gamma*L)]], dtype=complex)

不同频率下的输入阻抗计算如下。

for f in range(1,4000):
    
    # angular frequency
    omega = 2*constants.pi*f

    # wave number
    k = omega/constants.c

    # transfer matrix for a cylinder of radius 7.5mm and length 100mm
    T = Tcyl(7.5, 100.0)

    # radiation impedance
    Zr = complex(0,0)

    # [P,U] vector (pression and velocity)
    T = np.dot(T,np.matrix([[Zr],[complex(1,0)]], dtype=complex))

    # input impedance (Z = P/U)
    Z = T.item(0)/T.item(1)

播放频率满足等式Im[Z]=0。绘制 Z 的虚部时,我得到下图:wrong impedance

这显然是错误的,因为预期的输出应该是这样的:correct impedance

我做错了什么? 谢谢。

【问题讨论】:

  • (1) 在问题中显示您如何绘制此代码的代码。 (2) 如果在“Tcyl”中使用了变量“omega”和“k”,它们也应该是函数的参数。
  • 你是对的omega,k应该是函数的参数

标签: python acoustics


【解决方案1】:

你有

    Z0 = (rho * constants.c) / (constants.pi * a**2)

单簧管的阻抗取决于声音的速度,而不是光的速度。将constants.c 替换为343,您的结果会更接近。我仍然不确定它是否完全正确,但更接近。

作为一名单簧管演奏家,我试图让人们认为我的手指移动得像光速一样快,但事实并非如此。

【讨论】:

  • 哈哈这太尴尬了。它现在完美运行!谢谢!!!
  • 其他一些修正:空气粘度必须为0.0000181,半径和长度必须以米表示。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多