当前课程知识点:计算机音乐 > 第五章 一维振动模型 > 5.4 梳状滤波器 > 梳状滤波器
同学们大家好
这节课我们将会使用梳状滤波器
来模拟上一节课的循环网络
在上一节课中
我们使用一个循环网络来表示
达朗贝尔的行波解
那么在网络当中的一个信号
通过右向的传播之后到达
右边的端点
那么它会成一个衰减的系数
并且进行反向
变成一个向左传播的信号
并且到达左端点之后
又会乘上一个
系数
那么进行反向
如此循环形成一个循环网络
那么如果观察它的行波公式
那么我们可以发现
左右传播的信号
相当于是一个信号经过延迟得到的信号
因此我们可以
直接用两相延迟来模拟
信号在进行左右传播中的过程
从而得到一个循环的网络
那么在信号系统里这个循环延迟网络
可以用一个带反馈项的
P阶差分方程来表示
那么根据前面我们学过的
频域信号处理的知识
一个时域的差分方程
相当于频率的滤波器
那么对于滤波器来说
最重要的就是它的
频率响应函数了
那么频率响应函数将决定滤波器
在频谱上会对声音做什么样的修改
那么通过简单绘图我们会发现
刚才我们的y(n)=x(n)+gy(n-p)这个
带一项P阶的差分方程
它的频率响应函数是这样的一个形状
那么看起来像一个倒转过来的正弦波
而且它会周期性地加强某些频段
除了零点之外的第一个峰值
它所在的位置
也就他所在的频率的位置
也都是P分之R
R是采样率
那么P是这个延迟的采样点的个数
那么这说明它可以把任意的声音的频谱
修剪成跟乐音一样的具有
整数倍频谱的一个结构
那么接下来
我们可以再puredata里面
演示一下它的效果
我们在puredata里面使用了一个
延迟器
Delay
那么这Delay我们可以打开来看一眼他的
这个程序是什么样的
这个Delay主要是由
两个部分组成
一个是delwrite
它是一个延迟的写入
还有这个vd
那么这vd是一个延迟的读取
那么通过这两个组合
我们就可以实现一个延迟器
当然它的这个单位是时间
等于说它的
这个延迟的这个单位
delay的延迟这单位是时间
那么是以毫秒来记的
除此之外
我们对延迟项再乘上了一个系数
那么完成这延迟期之后
我们就可以通过调整他的两个输入来得到
不同参数的延迟滤波器
那么而且它是循环的延迟滤波器
然后我们可以来测试一下它的结果
那么打开这个Audio on之后
我们可以看到
这个延迟器可以把一个标准的白噪声
变成这样的一个形状
那么
在下面我们可以看到它的频率响应函数
可以加强延迟项的系数
比如说加强90吧
那它的峰值就会变得更加的明显
那么
我们可以听一下这个结果
那么我们可以通过调整这个延迟量的
技术
比如说
在零的时候它是一个标准的白噪声
那么在慢慢加强延迟量的时候
我们会听到
它慢慢地具有了这种
音高才有的这种特征
那么
听起来它
从一个白噪声
一个完全的这种噪声的形式
变得慢慢的有音高
加99%之后呢
就能听到大概是一个类似方波一样的
电子声音
在python里面我们可以更容易地实现
这个梳状滤波器
因为scipy.signal里面有一个叫做
lfilter线性滤波器的这样的
模块
那么我们看一下线性滤波器
它的操作非常简单
你只要输入
A跟B作为两个列表进行输入
也就把线性滤波器的系数进行输入之后
它就可以返回
以A跟B作为系数的
这样的一个线性滤波器
其中B的系数控制X的项
A的系数控制Y的项
那么在我们的
梳状滤波器里面
X的项我们只需要B0这一项
所以B我们只需要保留一项
而A的系数除了前面的
A0就是1之外
前面的N减1N减二一直到N减L减一
我们都是不需要的
所以需要有L减一个零
之后
DL项我们是要的
所以我们的程序
可以写成一个线性滤波器的形式
其中B的系数是1
A的系数
有一项1
然后L减一个零
然后最后再加一个0.99
也就是
需要进行反馈的那一项
之后我们
使用一个白噪音作为素材
使用X作为一个输入
它是一个
随机函数
也就是一个白噪音
它是一个两秒的一个
白噪音
因为这个random会生成
0到1之间的随机数
我们需要减0.5变成一个
-0.5到0.5之间的随机数
之后通过这个comb
就是梳状滤波器
最后再进行输出
写入到noise_comb.wav下面
运行一下看看
好运行完之后
我们听一下这个结果
这结果跟我们刚才在
puredata里面听到的是一样的
那在这个基础之上
如果我们
再加入一个adsr的结构
比如说我们加入这样一段adsr的结构
对这个白噪音进行一个包络
比如说我们让这x乘以adsr
他用零秒时间可以达到一个最大值
它总的时间长度是T
那么他用零秒时间达到一个最大值
然后
用零点零一秒时间下降到零
其他我们都可以
设成相应的数值
那么这level因为最大值它是1
你必须设置成1
然后下降下来的IOS是变成零
那么采用率是R
然后我们再去对它进行comb
也就是我们用一个非常短的白噪音
类似一个脉冲信号
这样的一个输入
然后通过一个comb
然后我们听一下他的结果
这个我们设置改成imp_comb.wav
然后运行一下看看
运行完之后
我们听一下这个结果
这个结果非常像一个
弹拨乐的声音
但是它又比较有电子的味道
因为它的输入是一个非常小的扰动
跟我们在弹拨一个乐器的时候非常的像
那么最后我们会得到一个
类似电子的弹拨乐的声音
在刚才实验当中
我们看到只要使用一个类似脉冲信号
的一个极短的白噪声作为输入
我们就能得到这样的声音
这样类似弹拨乐的声音
那么尽管它的音色听起来有点
电子的味道
但是从整体的角度上
它已经具有弦乐的音色轮廓了
那么尽管并不是特别的真实
那么下小节我们将会来分析一下
这种不真实的原因在哪里
并且把这个梳状滤波器
修改成一个更有效的版本
也就是Karplus Strong算法
-欢迎辞
-1.1 计算机音乐导言
--计算机音乐导言
-1.2 计算机音乐课程主要内容
-1.3计算机音乐课程资源
-1.4 音乐的基本表达
--音乐的基本表达
-第一章作业
-2.1时域音频处理概述
--时域音频处理概述
-2.2 分窗处理1:OLA叠放
-2.3 分窗处理2:音量计算
-2.4 端点检测
--端点检测
-2.5 振幅包络
--振幅包络
-2.6 音频信号相乘
--音频信号相乘
-2.7 环形调制
--环形调制
-2.8 频率调制
--频率调制
-2.9 频率调制在音乐上的应用
-第二章作业
-3.1 频谱概述
--频谱概述
-3.2 傅里叶变换
--傅里叶变换
-3.3 短时傅里叶变换
--短时傅里叶变换
-3.4 加法合成
--加法合成
-3.5 线性滤波器
--线性滤波器
-3.6 京剧锣鼓经分析
--京剧锣鼓经分析
-第三章作业
-4.1 音色合成概述
--音色合成概述
-4.2 质点弹簧阻尼模型
--质点弹簧阻尼模型
-4.3 双线性滤波器
--双线性滤波器
-4.4 Modal合成
--Modal合成
-第四章测试
-5.1 一维振动模型概述
--一维振动模型概述
-5.2 弦振动模型
--弦振动模型
-5.3 达朗贝尔的行波解
--达朗贝尔的行波解
-5.4 梳状滤波器
--梳状滤波器
-5.5 Karplus Strong算法
-5.6 管状气鸣乐器模型
--管状气鸣乐器模型
-第五章作业
-6.1 音高跟踪概述
--音高跟踪
-6.2 时域音高跟踪
--时域音高跟踪
-6.3 频域音高跟踪
--频域音高跟踪
-6.4 K歌评分
--K歌评分
-第六章作业
-7.1 音频同步概述
--音频同步概述
-7.2 音乐特征提取 CQT
-7.3 音乐特征提取 Chroma
-7.4 动态时间规划概述
--动态时间规划概述
-7.5 动态时间规划实现
--动态时间规划实现
-第七章作业