Python实现圆形鼓面声波动画示例

背景知识视频教程

  • Python离散傅立叶变换简介
  • Python并行编程解决方案
  • Python中的反应式编程

本文将开发产生圆形鼓面声波图形所需的图形和动画机制。

理论

一维波形可以通过傅立叶分析描述为由正弦波之和组成,以整数谐波间隔组成。

在敲击乐器(例如鼓)的作用下,二维膜上的波传播受贝塞尔微分方程

的控制。 x = 0的值被称为第一类贝塞尔函数,可用于模拟圆形或环形薄膜(例如铃鼓或鼓头)的振动模式。 下面绘制了α= 0、1、2时的第一类Jα的贝塞尔函数。

圆形传播的弹性薄圆形膜受贝塞尔微分方程解的控制。 谐波不再是基频的整数倍之和,而是谐音。 相反,鼓面模式是由多个不和谐部分,基本频率的非整数倍组成,也即是谐音。

在二维中,这些鼓面模式看起来像轮廓图:

而在3D上,高度膨胀,它们看起来像下面图像:

这些模式的动画是通过双重缓冲技术实现的。 两个相同的缓冲区

  • 显示缓冲区是当前正在显示的图像的冻结版本
  • 绘图缓冲区是当前正在绘制的下一个图像的动态版本

以及指向每个缓冲区的一对指针。 完成绘图后,将交换两个指针。 这样,当前的显示缓冲区将成为先前的绘图缓冲区,而新的图形缓冲区将成为先前的显示缓冲区。

Python实现

所需库


绘制贝塞尔函数

作为一个简单的图形函数示例


特点说明:

  • 在iPython中输入%matplotlib之后,打开交互式绘图
  • 绘制基本网格
  • 设置线性内插x轴
  • 将y点设置为各种α的贝塞尔函数(第一类)
  • 用实线绘制(x,y)
  • 显示绘图

结果数字应与之前显示的数字进行比较

3D绘图


特点说明:

  • 在mplot3d工具包中使用Axes3D函数
  • 设置轴
  • 线性内插x值
  • 在x和y值上设置网格
  • 使用行和列间距并使用彩虹色图绘制表面

结果图形:

正弦求和的方波动画

该程序作为简单的2D动画,说明了的加法合成器。


特点说明:

  • 奇次谐波列表
  • 通过求和合成奇次谐波
  • 重绘图形

结果图形:

沿轴传播3D波形动画

详情参阅http://viadean.com/py_visual_sound.html

你可能感兴趣的:(交叉知识,Python,声波)