Python 基于FFT的音频信号背景噪声去除

Python 基于FFT的音频信号背景噪声去除,python,signal-processing,fft,frequency-analysis,noise-reduction,Python,Signal Processing,Fft,Frequency Analysis,Noise Reduction,我目前在大学里做一个项目,在那里我用python区分不同乐器演奏相同音高的音符 我用电脑上的麦克风在不同的乐器上录制了不同的音符 我还记录了房间的背景 到目前为止,我在不同仪器上绘制了不同音符的曲线图,其中y轴上的振幅单位为dB:20*log10(| FFT(信号)|) 在x轴上,我有DFT采样频率 一些谐波峰值足够小(或背景足够大),噪声是一个因素-(我是个傻瓜,不能发布图像!)我的问题是在考虑背景噪声时,计算峰值高度的不确定性水平 我的问题是: 那么,当考虑背景噪声时,如何计算峰值高度(它们

我目前在大学里做一个项目,在那里我用python区分不同乐器演奏相同音高的音符

我用电脑上的麦克风在不同的乐器上录制了不同的音符

我还记录了房间的背景

到目前为止,我在不同仪器上绘制了不同音符的曲线图,其中y轴上的振幅单位为dB:20*log10(| FFT(信号)|)

在x轴上,我有DFT采样频率

一些谐波峰值足够小(或背景足够大),噪声是一个因素-(我是个傻瓜,不能发布图像!)我的问题是在考虑背景噪声时,计算峰值高度的不确定性水平

我的问题是:

那么,当考虑背景噪声时,如何计算峰值高度(它们的相对谐波振幅)的不确定性水平

一些想法:

在对谐波峰值和噪声进行分类时,我应该使用什么样的dB阈值(我应该对低于最大背景值(~28000dB)或平均值(~15000)或可能是这些值的两倍的峰值进行折扣)

另外,考虑到背景引入的噪声,从FFT bin n中减去背景的FFT bin n中的值是否合法,以用于我的仪器记录

我也看过这篇文章,似乎有非常不同的意见

如果相关的话,我可以发布我的代码片段——但要小心在同学瘟疫的情况下放太多

链接到文学,将有助于该项目将非常感谢。(仍处于绘制数据的阶段,我可以想方设法寻找每个仪器的不同属性)


提前谢谢

你好像问了很多问题。让我首先回答你的第一个问题:

那么,如何计算高度的不确定性水平呢 峰值(其相对谐波振幅) 背景噪音

你会期望声音线性叠加(达到一阶近似值)。自然的做法是只记录背景,然后测量背景中谐波的平均振幅和标准偏差

例如,假设您正在查看3个谐波-20KHz、11KHz和33KHz。只对背景进行一些记录,你会发现平均振幅为1.3dB 2.2dB和2.3dB,标准偏差为+/-0.1、+/-0.2和+/-0.4dB。现在你有了一个不确定度估计值和一个平均背景谐波要从中减去

有更聪明的方法可以做到这一点,但这只是一个开始

现在,让我们进入第二个问题

在对谐波进行分类时,我应该使用什么样的dB阈值 峰值和噪音的原因(我是否应该将峰值降低 比最大背景噪声(~28000dB)或平均值(~15000)或更高 两倍(其中一个值)

如果一个峰值在平均值+不确定度(一个或两个标准偏差,这实际上是任意的,取决于惯例),你可以说它是显著的。例如,如果您发现3KHz时的噪声级为1.2dB,不确定度为+/-0.3dB,并且您将谐波测量为1.3dB,不确定度为0.1dB(以相同方式测量),则其不显著

第三部分:

另外,考虑到背景引入的噪声,是吗 从中减去背景FFT bin n中的值是合法的 FFT bin用于我的仪器记录

是的(一般来说)。如果你真的想让自己相信这一点,你可以A)用求和波做一些模拟,并对它们进行FFT,B)做一个实验,与A或C)进行傅里叶变换的数学运算

关于文学,我认为这取决于你具体在做什么,如果你是一名物理系学生,Mary Boas的《物理科学中的数学方法》对傅立叶变换很好,如果你是一名计算机科学家/工程师,你可能想要一些不同的东西


如果您需要更多帮助,请告诉我。

(如果您链接到图像,我可以为您将其内联)