python 巴特沃滋滤波器,实现0延迟均衡器

本文介绍了音频处理中均衡器的作用,如何使用巴特沃兹滤波器进行信号频率调节,以及通过示例展示了信号过滤、合成和傅立叶变换的过程,以验证滤波效果的正确性。
摘要由CSDN通过智能技术生成

在音频处理中,均衡器(Equalizer,简称EQ)是一种用来调节音频信号中各个频段音量的设备或软件。通过增强或减弱某些频率的成分,均衡器可以改变音乐或声音的总体音质,使音频信号达到理想的听感效果。

例如,如果低音部分感觉过弱,可以利用均衡器提升低频的音量,使之更加饱满;相反,如果高音过于尖锐,可以适当降低高频使音质变得更柔和。音乐制作人、声音工程师和DJ等专业人士在制作和播放音乐时广泛使用均衡器来雕塑声音,满足不同的声音需求和偏好。

import numpy as num
import matplotlib.pyplot as plt
from scipy.signal import chirp, sosfiltfilt, butter, sosfreqz
from librosa.core import load



# 生成Chirp信号
def generate_chirp_signal(duration=1, f_start=20, f_end=20000, fs=44100):
    t = num.linspace(0, duration, fs * duration)
    signal = chirp(t, f0=f_start, f1=f_end, t1=duration, method='linear')
    return t, signal, fs
def wav(file):
    fs = load(file,sr=None)[1]
    data = load(file)[0]
    a = len(data)
    t = num.arange(a) / fs
    return fs, data,t

# 设计基于Q值和Gain值的带通滤波器
def design_filter_based_on_q(fs, f_center, Q, gain=1, order=2):
    bandwidth = f_center / Q
    lowcut = f_center - bandwidth / 2.0
    highcut = f_center + bandwidth / 2.0

    nyq = 0.5 * fs
    low = lowcut / nyq
    high = highcut / nyq

    sos = butter(order, [low, high], analog=False, btype='bandpass', output='sos')
    return sos, gain


# 应用零相位滤波并调整增益
def filter_signal(signal, sos, gain=1):
    filtered_signal = sosfiltfilt(sos, signal)
    filtered_signal *= gain
    return filtered_signal

# 绘制信号
def plot_signals(t, signals, titles, xlabel='time (s)', ylabel='v'):
    plt.figure(figsize=(10, 8))
    for i, signal in enumerate(signals):
        plt.subplot(len(signals), 1, i + 1)
        plt.plot(t, signal)
        plt.title(titles[i])
        plt.xlabel(xlabel)
        plt.ylabel(ylabel)
    plt.tight_layout()
    plt.show()


# 绘制滤波器的幅度响应
def plot_filter_response(fs, sos):
    w, h = sosfreqz(sos, fs=fs)
    plt.plot(w, 20 * num.log10(num.abs(h)))
    plt.title('filter_response')
    plt.xlabel('frequency (Hz)')
    plt.ylabel('gain (dB)')
    plt.grid(True)
    plt.show()


# 程序主函数
def main():
    # 参数设置
    f_center = 10000  # 中心频率
    Q = 5.0  # Q值
    gain = 1.0  # 增益值
    order = 5

    # 生成Chirp信号
    # t, signal, fs = generate_chirp_signal()
    # wav
    file = '/Users/Desktop/谐波分析/谐波分析/数据/Sti-Woofer-FR.wav'
    fs,data,t = wav(file)

    signal = data[0:530]


    # 设计滤波器
    sos, gain = design_filter_based_on_q(fs, f_center, Q, gain,order)

    # 滤波处理
    filtered_signal = filter_signal(signal, sos, gain)
    equalized_signal = signal[0:530] + filtered_signal

    # 绘制信号
    plot_signals(t[0:530], [signal[0:530], filtered_signal, equalized_signal], ['signal', 'filtered_signal', 'equalized_signal'])

    # 绘制滤波器幅度响应
    plot_filter_response(fs, sos)
if __name__ == "__main__":
    main()

小结:

以上内容生成信号后,对其进行均衡,绘制均衡后信号,滤波器响应图,滤波后信号,信号的frequency验证正确性

通过听音对EQ与音频特性做音质鉴定,并通过python进行算法实现,参与听音软件开发并提供音质与算法支持

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值