首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中实现(Butterworth)过滤器并创建wav文件

在Python中实现(Butterworth)过滤器并创建wav文件
EN

Stack Overflow用户
提问于 2016-12-24 01:43:30
回答 1查看 1.9K关注 0票数 3

我正在尝试实现一个巴特沃斯带通滤波器,以便在Python (我是新手)中实现wav文件。我现在得到的代码如下所示

代码语言:javascript
复制
import wave
import numpy
import matplotlib.pyplot as plt
from scipy import signal
from scipy.signal import filtfilt

# open the audio file and extract some information
spf = wave.open('clip.wav','r')
(nChannels, sampWidth, sampleRate, nFrames, compType, compName) = spf.getparams()

# extract audio from wav file
input_signal = spf.readframes(-1)
input_signal = numpy.fromstring(input_signal, 'Int16')
spf.close()

# create the filter
N = 4
nyq = 0.5 * sampleRate
low = 100 / nyq
high = 500 / nyq
b, a = signal.butter(N, [low, high], btype='band')

# apply filter
output_signal = signal.filtfilt(b, a, input_signal)

# ceate output file
wav_out = wave.open("output.wav", "w")
wav_out.setparams((nChannels, sampWidth, sampleRate, nFrames, compType, compName))

# write to output file
wav_out.writeframes(output_signal.tobytes())
wav_out.close()

# plot the signals
t = numpy.linspace(0, nFrames/sampWidth, nFrames, endpoint = False)
plt.plot(t, input_signal, label='Input')
plt.plot(t, output_signal, label='Output')
plt.show()

一切正常(我认为),但是当我向output.wav文件写入过滤数据(output_signal)时出现了一个问题。由于某些原因,当我听到输出的wav文件时,它听起来就像是很大的噪音。而且,它的长度(时间方向)是输入文件的四倍。奇怪的是,当我在时域中绘制输入和输出时,我看到输出信号是输入的滤波版本。但是,当在Audacity中分析输出声音片段的时域时,它只是很大的噪声,看起来一点也不像Python中绘制的时域图形。

我猜我在使用filtfilt函数或.tobytes函数时做错了什么,因为使用.tobytes之后的输出数组在被.fromstring转换时要比输入数组大得多,但是我不知道我做错了什么。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 22:17:49

应该对输入信号进行归一化。图形数据显示了从30000到-30000的y轴。如果你将振幅从1.0归一化到-1.0,那么你将能够在audacity上收听到wave文件。

我使用此代码对1个通道的输入信号进行归一化

代码语言:javascript
复制
amp = 1.0
input_signal = amp * input_signal / max(abs(max(input_signal)),abs(min(input_signal)))

在使用您的代码读取输入信号之后,在写入输出文件之前(在滤波之后),我对振幅进行了归一化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41305720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档