傅里叶变换音频可视化_声音的可视化处理

本文介绍如何使用Python的pywave和matplotlib库实现声音的波形和频谱可视化,包括时域信号显示和频域信号显示。通过傅里叶变换,我们可以观察到声音信号的频率分布详情,这对于音频分析和识别很有帮助。
摘要由CSDN通过智能技术生成

声音的可视化处理

下一步需要做声音信号的处理,今天就把声音的可视化的程序代码做一下.

主要完成声音的波形显示(时域信号)和声音的频谱显示(频域信号)

虽然涉及傅里叶变换等复杂的处理,采用matplot工具可以轻而易举的实现这些以前需要大神才能完成的代码.

Screen Shot 2018-01-06 at 5.56.57 PM.png

# 声音可视化代码, 使用pywave模块,读取声音文件,一组将声音文件一波形显示,另一组显示为声音频谱

%matplotlib inline

import wave

import struct

import numpy as np

import matplotlib.pyplot as plt

# 读取wav文件

filename = 'data/1.wav'

wavefile = wave.open(filename, 'r') # open for writing

# 读取wav文件的四种信息的函数。期中numframes表示一共读取了几个frames。

nchannels = wavefile.getnchannels()

sample_width = wavefile.getsampwidth()

framerate = wavefile.getframerate()

numframes = wavefile.getnframes()

print("channel", nchannels)

print("sample_width", sample_width)

print("framerate", framerate)

print("numframes", numframes)

channel 1

sample_width 2

framerate 16000

numframes 22720

# 建一个y的数列,用来保存后面读的每个frame的amplitude。

y = np.zeros(numframes)

# for循环,readframe(1)每次读一个frame,取其前两位,是左声道的信息。右声道就是后两位啦。

# unpack是struct里的一个函数,用法详见http://docs.python.org/library/struct.html。简单说来就是把#packed的string转换成原来的数据,无论是什么样的数据都返回一个tuple。这里返回的是长度为一的一个

# tuple,所以我们取它的第零位。

for i in range(numframes):

val = wavefile.readframes(1)

left = val[0:2]

# right = val[2:4]

v = struct.unpack('h', left)[0]

y[i] = v

# framerate就是声音的采用率,文件初读取的值。

Fs = framerate

time = np.arange(0, numframes) * (1.0 / framerate)

# 显示时域图(波形图)

plt.subplot(211)

plt.plot(time, y)

# 显示频域图(频谱图)

plt.subplot(212)

plt.specgram(y, NFFT=1024, Fs=Fs, noverlap=900)

plt.show()

output_4_0.png

小结

针对具体的频域和时域的理论我们先不谈,这个过分复杂,我们只看一下结果,对比频域我们能够看到更多的分布的细节和特征,便于以后做声音的分析和识别.

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值