
正文
窗函数Python格式的简单介绍
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
Python 简单的扩音,音频去噪,静音剪切
数字信号是通过对连续的模拟信号采样得到的离散的函数。它可以简单看作一个以时间为下标的数组。比如,x[n],n为整数。比如下图是一个正弦信号(n=0,1, ..., 9):
对于任何的音频文件,实际上都是用这种存储方式,比如,下面是对应英文单词“skip”的一段信号(只不过由于点太多,笔者把点用直线连接了起来):
衡量数字信号的 能量(强度) ,只要简单的求振幅平方和即可:
我们知道,声音可以看作是不同频率的正弦信号叠加。那么给定一个声音信号(如上图),怎么能够知道这个信号在不同频率区段上的强度呢?答案是使用离散傅里叶变换。对信号x[n], n=0, ..., N-1,通常记它的离散傅里叶变换为X[n],它是一个复值函数。
比如,对上述英文单词“skip”对应的信号做离散傅里叶变换,得到它在频域中的图像是:
可以看到能量主要集中在中低音部分(约16000Hz以下)。
在频域上,也可以计算信号的强度,因为根据Plancherel定理,有:
对于一般的语音信号,长度都至少在1秒以上,有时候我们需要把其中比如25毫秒的一小部分单独拿出来研究。将一个信号依次取小段的操作,就称作分帧。技术上,音频分帧是通过给信号加一系列的 窗 函数 实现的。
我们把一种特殊的函数w[n],称作窗函数,如果对所有的n,有0=w[n]=1,且只有有限个n使得w[n]0。比如去噪要用到的汉宁窗,三角窗。
汉宁窗
三角窗
我们将平移的窗函数与原始信号相乘,便得到信号的“一帧”:
w[n+d]*x[n]
比如用长22.6毫秒的汉宁窗加到“skip”信号大约中间部位上,得到一帧的信号:
可见除一有限区间之外,加窗后的信号其他部分都是0。
对一帧信号可以施加离散傅里叶变换(也叫短时离散傅里叶变换),来获取信号在这一帧内(通常是很短时间内),有关频率-能量的分布信息。
如果我们把信号按照上述方法分成一帧一帧,又将每一帧用离散傅里叶变换转换到频域中去,最后将各帧在频域的图像拼接起来,用横坐标代表时间,纵坐标代表频率,颜色代表能量强度(比如红色代表高能,蓝色代表低能),那么我们就构造出所谓 频谱图 。比如上述“skip”发音对应的信号的频谱图是:
(使用5.8毫秒的汉宁窗)
从若干帧信号中,我们又可以恢复出原始信号。只要我们适当选取窗口大小,以及窗口之间的平移距离L,得到 ..., w[n+2L], w[n+L], w[n], w[n-L], w[n-2L], ...,使得对k求和有:
从而简单的叠加各帧信号便可以恢复出原始信号:
最后,注意窗函数也可以在频域作用到信号上,从而可以起到取出信号的某一频段的作用。
下面简单介绍一下3种音效。
1. 扩音
要扩大信号的强度,只要简单的增大信号的“振幅”。比如给定一个信号x[n],用a1去乘,便得到声音更大的增强信号:
同理,用系数0a1去乘,便得到声音变小的减弱信号。
2. 去噪(降噪)
对于白噪音,我们可以简单的用“移动平均滤波器”来去除,虽然这也会一定程度降低声音的强度,但效果的确不错。但是,对于成分较为复杂,特别是频段能量分布不均匀的噪声,则需要使用下面的 噪声门 技术,它可以看作是一种“多带通滤波器”。
这个特效的基本思路是:对一段噪声样本建模,然后降低待降噪信号中噪声的分贝。
更加细节的说,是在信号的若干频段f[1], ..., f[M]上,分别设置噪声门g[1], ..., g[M],每个门都有一个对应的阈值,分别是t[1], ..., t[M]。这些阈值时根据噪声样本确定的。比如当通过门g[m]的信号强度超过阈值t[m]时,门就会关闭,反之,则会重新打开。最后通过的信号便会只保留下来比噪声强度更大的声音,通常也就是我们想要的声音。
为了避免噪声门的开合造成信号的剧烈变动,笔者使用了sigmoid函数做平滑处理,即噪声门在开-关2个状态之间是连续变化的,信号通过的比率也是在1.0-0.0之间均匀变化的。
实现中,我们用汉宁窗对信号进行分帧。然后对每一帧,又用三角窗将信号分成若干频段。对噪声样本做这样的处理后,可以求出信号每一频段对应的阈值。然后,又对原始信号做这样的处理(分帧+分频),根据每一帧每一频段的信号强度和对应阈值的差(diff = energy-threshold),来计算对应噪声门的开合程度,即通过信号的强度。最后,简单的将各频段,各帧的通过信号叠加起来,便得到了降噪信号。
比如原先的“skip”语音信号频谱图如下:
可以看到有较多杂音(在高频,低频段,蓝色部分)。采集0.25秒之前的声音作为噪声样本,对信号作降噪处理,得到降噪后信号的频谱图如下:
可以明显的看到大部分噪音都被清除了,而语音部分仍完好无损,强度也没有减弱,这是“移动平均滤波器”所做不到的。
3. 静音剪切
在对音频进行上述降噪处理后,我们还可以进一步把多余的静音去除掉。
剪切的原理十分简单。首先用汉宁窗对信号做分帧。如果该帧信号强度过小,则舍去该帧。最后将保留的帧叠加起来,便得到了剪切掉静音部分的信号。
比如,对降噪处理后的“skip”语音信号做静音剪切,得到的新信号的频谱图为:
相关问答
Q1: python的文件格式有两种,"*.py"和"*.pyw",它们有什么不同?
它们之间窗函数Python格式的不同就只有一个窗函数Python格式:视窗运行它们窗函数Python格式的时候调用不同的执行档案。
视窗用 python.exe 运行 .py 窗函数Python格式,用 pythonw.exe 运行 .pyw 。
这纯粹是因为安装视窗版 Python 时窗函数Python格式,扩展名 .py 自动被登记为用 python.exe 运行的文件,而 .pyw 则被登记为用 pythonw.exe 运行。
主要体现在win平台上开发桌面程序,linux木有哦 python.exe 运行 .py ,用 pythonw.exe 运行 .pyw,不出现dos窗口, 住:纯图形界面程序的用户不需要看到dos窗口。
扩展资料
Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
完整的语法格式为:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参考资料来源:
百度百科——Python
Q2: python中怎么生成基于窗函数的fir滤波器
SciPy提供了firwin用窗函数设计低通滤波器,firwin的调用形式如下:
firwin(N, cutoff, width=None, window='hamming')
其中N为滤波器的长度;cutoff为以正规化的频率;window为所使用的窗函数。
Q3: 利用Python进行数据分析(10)-移动窗口函数
Python-for-data-移动窗口函数
本文中介绍的是 ,主要的算子是:
统计和通过其他移动窗口或者指数衰减而运行的函数,称之为 移动窗口函数
style scoped="".dataframe tbody tr th:only-of-type { vertical-align: middle; } precode.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } /code/pre/style
2292 rows × 3 columns
rolling算子,行为和resample和groupby类似
rolling可以在S或者DF上通过一个window进行调用
style scoped="".dataframe tbody tr th:only-of-type { vertical-align: middle; } precode.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } /code/pre/style
2292 rows × 3 columns
指定一个常数衰减因子为观测值提供更多的权重。常用指定衰减因子的方法:使用span(跨度)
一些统计算子,例如相关度和协方差等需要同时操作两个时间序列。
例如,金融分析中的股票和基准指数的关联性问题:计算时间序列的百分比变化pct_change()
style scoped="".dataframe tbody tr th:only-of-type { vertical-align: middle; } precode.dataframe tbody tr th { vertical-align: top; } .dataframe thead th { text-align: right; } /code/pre/style
在rolling及其相关方法上使用apply方法提供了一种在移动窗口中应用自己设计的数组函数的方法。
唯一要求:该函数从每个数组中产生一个单值(缩聚),例如使用rolling()...quantile(q)计算样本的中位数
Q4: python语言format用法
相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串当成一个模板,通过传入的参数进行格式化,并且使用大括号‘{}’作为特殊字符代替‘%’使用方法由两种:b.format(a)和format(a,b)。
python中的f是format函数的缩写,用于格式化输出。format函数常见的用法是str.format(),其基本语法是通过{}和:来代替以前的%。format函数可以接受不限个参数,位置可以不按顺序,也可以设置参数,还可以向str.format()传入对象。
Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
Q5: python中的滑动窗口函数:rolling().var()
滑动窗口函数,之前不知道 ,还自己写了个,,
df.rolling().sum()
df.rolling().var()
关于窗函数Python格式和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







