如何绘制递减波形曲线?或者说递减sin图形

需求示意

如图,我想要的是一个能递减的波形图,有没有对应的数学公式或者算法思路?

实际需求是这样的

希望实现音频可视化为波形图,当有音频输入的时候,根据音量大小,从中间往两边递减

这个不重要啦

重要的是,想求知如何用数学公式计算这样的图形,搜索过很多关键词都没找到答案 (弹性、spring、bounce、频谱、振动 )请知道的朋友给点建议哈,感谢

阅读 5.8k
2 个回答

使用合适的正态和余弦函数就可以。matplotlib代码如下:

import numpy as np
import matplotlib.pyplot as plt


def normfun(x, mu, sigma):
    pdf = np.exp(-((x - mu) ** 2) / (2 * sigma ** 2)) / (sigma * np.sqrt(2 * np.pi))
    return pdf


plt.xlim((-10, 10))
plt.ylim((-2, 2))

x = np.linspace(-10, 10, 200) 
y = 10 * np.cos(x / (0.2 * np.pi)) * normfun(x, 0, 5)
plt.plot(x, y, color='r', linewidth=2, alpha=0.5)

ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['bottom'].set_position(('data', 0))
ax.spines['left'].set_position(('data', 0))

plt.show()

效果如图,不知道是不是你想要的?
图片描述

看起来。。。正态分布 * sin(x) 就是你要的。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏