在音频处理中,均衡器(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进行算法实现,参与听音软件开发并提供音质与算法支持