用 Python 实现带能量比:2000 Hz 到底该切在哪一格
BER 的公式只有一个除法,代码却有两个不报错的陷阱:把“时间帧数”当成“频率格数”,以及用近似格距把 2000 Hz 切到错误一侧。本课用三段 30 秒音乐逐帧计算 BER。正确分界是第 186 格;一旦把 1292 个时间帧误当成频率格数,分界会跑到第 234 格,也就是实际约 2519 Hz。德彪西那段的中位 BER 会因此多出 4.37 dB。
完整代码在第 22 课脚本,公共函数在frequency_features.py。运行环境沿用课程总纲里的一次性配置。
这一课要完成什么实验
三段课程音乐各取前 30 秒,参数统一为:
采样率 22050 Hz
帧长 2048 个样本(92.9 毫秒)
帧移 512 个样本(23.2 毫秒)
分界频率 2000 Hz
实验分四步:载入三段音乐、做 STFT、找 2000 Hz 对应的分界格、逐帧累计两侧功率。最后再故意把矩阵轴写错一次,量出这个错误会改变多少。
互动持续版
静态图文到这里,接下来让声音和图形动起来
购买后解锁完整课程,以及只有官网互动版才能提供的声音、动画和可操作实验。
- 完整声音对比、分步动画与 8 个交互实验
- 微信账号登录,手机和电脑同步访问
- 申请加入课程会员群,交流、反馈和接收更新
- 持续获得这门课程的勘误与内容升级