对加噪音前后的音频信号进行频谱分析

一、对纯净音频进行频谱分析

1、打开要进行分析的wav文件:

wf = wave.open("F:\\pycharm\\audio.wav", "rb")

2、创建PyAudio对象

p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnumchannels(),
                rate=wf.getframerate(),
                output=True)
numframes = wf.getnumframes()
framerate = wf.getframerate()

3、读取完整的帧数据

str_data = wf.readframes(numframes)
wf.close()

4、修改采样点数和起始位置从而进行不同位置和长度的音频波形分析

N = 44100
start = 0  
df = framerate / (N - 1)  
freq = [df * n for n in range(0, N)]  
wave_data2 = wave_data[0][start:start + N]
c = numpy.fft.fft(wave_data2) * 2 / N

5、将频率在4000以下的频谱显示出来

while freq[d] > 4000:
    d -= 10
pylab.plot(freq[:d - 1], abs(c[:d - 1]), 'r')
pylab.show()

结果如下所示:对加噪音前后的音频信号进行频谱分析_第1张图片

二、对混入噪声后的音频进行频谱分析

与前面的方法一样,但是出现了错误,具体如下:

对加噪音前后的音频信号进行频谱分析_第2张图片
出错原因:是wav格式的问题;Wav格式有很多种,但是wave.open()中支持的是pcm的格式,因此需要进行格式的转变。

三、解决方法

1、在window系统下下载sox;用它做格式转换。
sox的安装教程
按照如上教程安装成功并配置环境变量后,cmd 输入sox 查看是否成功安装。
如下说明sox已成功安装:
对加噪音前后的音频信号进行频谱分析_第3张图片
2、在python中安装sox包
Python包sox,提取码:3ii4。
在cmd下按如下方式安装:
在这里插入图片描述
3、在对音频进行转换时,需要在音频文件所在路径下进行,有如下两种方式
(1)利用cd到音频文件所在路径
对加噪音前后的音频信号进行频谱分析_第4张图片
(2)直接在音频文件所在路径打开cmd命令窗口
对加噪音前后的音频信号进行频谱分析_第5张图片
输入sox noiseaudio.wav -b 16 -e signed-integer 00.wav进行转换
在这里插入图片描述
成功后再用上述方法绘制频谱,结果如下:
对加噪音前后的音频信号进行频谱分析_第6张图片

你可能感兴趣的:(对加噪音前后的音频信号进行频谱分析)