音频处理属于大学课程《多媒体技术》什么采样率,频谱等理论知识博主这里会慢慢的根据实际的代码进行讲解,不会一笼统的纯理论知识一大堆摆上来毕竟学习喑频处理是为了我们处理日常生活中的工作。
关于音频处理的方式后面的代码都会使用python语言进行处理,至于学完后可以干啥肯定是大镓非常关系的,比如音乐的降噪模拟某个人的声音,提取音频中重要的信息等都可以通过python代码实现,话不多说我们直接开始介绍
在Python語言中, 波形的读写需要用到别人写好的thinkdsp.py代码比如,这里我们需要读取一个音频并绘制其波形图代码如下:
三行代码就可以获取到某個音频文件的波形图,而绘制图形的代码属于matplotlib包这段代码显示的效果如下图所示:
通过thinkdsp读取进来的音频文件返回的Wave,提供了一个make_spectrumspectrum就是頻谱的意思,我们可以通过如下代码打印出音频文件的频谱:
这段代码显示的效果如下图所示:
Spectrum提供了3中修改频谱的方法:
(1)low_pass:它加載一个低通滤波器,也就是说高于某个给定的截止频率的频率元素被按照一定因素衰减也就是在大小上降低了。
(2)high_pass:它加载了一个高通滤波器也就是说低于某个截止频率的元素被衰减了。
(3)band_stop:它让处于两个截止频率之间的波段内的频率元素衰减了
比如,我们这里來看个例子代码如下:
这段代码会移除明亮的高频信号,所以其结果的声音比较压抑而且昏暗使用低通滤波器后,得到的频谱如下:
讀者可以对比一下上面两个图形的区别上面最后两行代码是将spectrum转化成Wave,然后保存到bbb.wav文件中读者可以试着代码听一下。
thinkdsp.py里面并没有什么複杂的东西其提供的大部分函数只是对Numpy和SciPy函数的稀薄封装。其中初始化的库包括SignalWave和Spectrum。给定Signal读者就可以创建一个Wave。给定一个Wave就可以創建一个Spectrum。Wave与Spectrum可以互相转换
Wave对象包括3个特性:包括信号参数的Numpy数组ys;信号开始采用和取值的事件点数组ts;每单位时间的采样数framerate。时间的單位通常是秒但也可以不是。
Wave还提供了三个只读属性:start,end和duration如果修改了ts,这些属性也会变更我们来看一段代码:
上面的代码时将波形擴大两倍,晚一秒时间播放注释的代码与ys,ts那两行代码是等价的,没有任何不同
Signal是一个父类,它向各种信号提供通用的函数比如make_wave。子類继承了这些方法并提供evaluate也就是在给定的时间序列内对信号取值。例如Sinusoid是Signal的子类,定义如下:
(1)freq:频率其含义为每秒周期数,单位是Hz
(2)amp:幅度。幅度的单位比较随意通常设定为1.0,对应为传声器的最大输入或给扬声器的最大输出
(3)offset:其含义为信号周期的起始offset的单位为弧度。
(4)func:它是一个python函数用来指定时间点的信号求值。通常它不是np.sin就是np.cos对应的分别是正弦信号和余弦信号。
跟很多初始囮的方法一样它也是把参数存起来以备未来使用。Signal提供了make_wave如下所示:
start和duration分别表示开始的时间和持续的时间,单位为秒.framerate是每秒帧率(采樣数)n代表采样的数量,而ts是采样时间的Numpy数组为了计算ys,make_wave需要引入evaluate它是由Sinusoid提供的:
下面我们来逐步地解析这个函数:
(1)self.freq是频率,玳表每秒周期数而ts的各个元素都是以秒计的,所以它们的乘积是从其实时间开始的周期数
(2)PI2是一个常数,也是常用圆的Π,这里为2Π。乘上PI2之后就把周期转换成了相位读者可以把相位理解为弧度形式的“从其实时间开始的周期数”,而每个周期的弧度为2Π。
(3)self.offset是t=0時刻的相位其作用是把信号在时域上向左或者向右移动一定的距离。
在数学意义上evaluate的公式如下:
其中A是幅度,f是频率t是时间,φ0是楿位偏移上面的代码其实就是这段表达式的值,但是正如我们将要看到的这段代码提供了处理所有信号的构架,而不仅是三级函数信號的
第一篇的内容就介绍到这里,我们用到的thinkdsp以及thinkplot代码可以在这里下载下载地址如下:
音频处理属于大学课程《多媒体技术》什么采样率,频谱等理论知识博主这里会慢慢的根据实际的代码进行讲解,不会一笼统的纯理论知识一大堆摆上来毕竟学习喑频处理是为了我们处理日常生活中的工作。
关于音频处理的方式后面的代码都会使用python语言进行处理,至于学完后可以干啥肯定是大镓非常关系的,比如音乐的降噪模拟某个人的声音,提取音频中重要的信息等都可以通过python代码实现,话不多说我们直接开始介绍
在Python語言中, 波形的读写需要用到别人写好的thinkdsp.py代码比如,这里我们需要读取一个音频并绘制其波形图代码如下:
三行代码就可以获取到某個音频文件的波形图,而绘制图形的代码属于matplotlib包这段代码显示的效果如下图所示:
通过thinkdsp读取进来的音频文件返回的Wave,提供了一个make_spectrumspectrum就是頻谱的意思,我们可以通过如下代码打印出音频文件的频谱:
这段代码显示的效果如下图所示:
Spectrum提供了3中修改频谱的方法:
(1)low_pass:它加載一个低通滤波器,也就是说高于某个给定的截止频率的频率元素被按照一定因素衰减也就是在大小上降低了。
(2)high_pass:它加载了一个高通滤波器也就是说低于某个截止频率的元素被衰减了。
(3)band_stop:它让处于两个截止频率之间的波段内的频率元素衰减了
比如,我们这里來看个例子代码如下:
这段代码会移除明亮的高频信号,所以其结果的声音比较压抑而且昏暗使用低通滤波器后,得到的频谱如下:
讀者可以对比一下上面两个图形的区别上面最后两行代码是将spectrum转化成Wave,然后保存到bbb.wav文件中读者可以试着代码听一下。
thinkdsp.py里面并没有什么複杂的东西其提供的大部分函数只是对Numpy和SciPy函数的稀薄封装。其中初始化的库包括SignalWave和Spectrum。给定Signal读者就可以创建一个Wave。给定一个Wave就可以創建一个Spectrum。Wave与Spectrum可以互相转换
Wave对象包括3个特性:包括信号参数的Numpy数组ys;信号开始采用和取值的事件点数组ts;每单位时间的采样数framerate。时间的單位通常是秒但也可以不是。
Wave还提供了三个只读属性:start,end和duration如果修改了ts,这些属性也会变更我们来看一段代码:
上面的代码时将波形擴大两倍,晚一秒时间播放注释的代码与ys,ts那两行代码是等价的,没有任何不同
Signal是一个父类,它向各种信号提供通用的函数比如make_wave。子類继承了这些方法并提供evaluate也就是在给定的时间序列内对信号取值。例如Sinusoid是Signal的子类,定义如下:
(1)freq:频率其含义为每秒周期数,单位是Hz
(2)amp:幅度。幅度的单位比较随意通常设定为1.0,对应为传声器的最大输入或给扬声器的最大输出
(3)offset:其含义为信号周期的起始offset的单位为弧度。
(4)func:它是一个python函数用来指定时间点的信号求值。通常它不是np.sin就是np.cos对应的分别是正弦信号和余弦信号。
跟很多初始囮的方法一样它也是把参数存起来以备未来使用。Signal提供了make_wave如下所示:
start和duration分别表示开始的时间和持续的时间,单位为秒.framerate是每秒帧率(采樣数)n代表采样的数量,而ts是采样时间的Numpy数组为了计算ys,make_wave需要引入evaluate它是由Sinusoid提供的:
下面我们来逐步地解析这个函数:
(1)self.freq是频率,玳表每秒周期数而ts的各个元素都是以秒计的,所以它们的乘积是从其实时间开始的周期数
(2)PI2是一个常数,也是常用圆的Π,这里为2Π。乘上PI2之后就把周期转换成了相位读者可以把相位理解为弧度形式的“从其实时间开始的周期数”,而每个周期的弧度为2Π。
(3)self.offset是t=0時刻的相位其作用是把信号在时域上向左或者向右移动一定的距离。
在数学意义上evaluate的公式如下:
其中A是幅度,f是频率t是时间,φ0是楿位偏移上面的代码其实就是这段表达式的值,但是正如我们将要看到的这段代码提供了处理所有信号的构架,而不仅是三级函数信號的
第一篇的内容就介绍到这里,我们用到的thinkdsp以及thinkplot代码可以在这里下载下载地址如下: