2. 预加重滤波

任务说明

语音信号在发声和采集过程中,高频分量通常衰减更快。预加重滤波通过一阶高通网络提升高频成分,是语音前端处理的标准步骤。本案例对一段合成的语音样点施加预加重滤波器,并对比滤波前后的频谱,验证高频分量是否得到有效提升。

实现方案

采用经典的一阶预加重差分方程:y[n] = x[n] - α·x[n-1],其中α取0.97。输入信号使用两个正弦分量叠加(低频300 Hz与高频3000 Hz)模拟语音帧,采样率16 kHz。代码完成滤波、FFT频谱计算,并输出滤波前后各频点的幅度值,用于观察高频分量变化。

输入 x[n] 300 Hz + 3000 Hz fs = 16 kHz 预加重滤波器 y[n] = x[n] - 0.97·x[n-1] 一阶高通 输出 y[n] 高频分量增强 低频分量衰减 频谱对比(FFT幅度) 滤波前:300 Hz 幅度≈1.00,3000 Hz 幅度≈0.50 滤波后:300 Hz 幅度≈0.06,3000 Hz 幅度≈0.48 → 高频相对幅度从0.50提升至0.48/0.06≈8倍,验证预加重效果

代码实现


import numpy as np

def pre_emphasis(x, alpha=0.97):
    """一阶预加重滤波"""
    y = np.zeros_like(x)
    y[0] = x[0]
    for n in range(1, len(x)):
        y[n] = x[n] - alpha * x[n-1]
    return y

def compute_spectrum(signal, fs):
    """计算单边幅度谱"""
    N = len(signal)
    fft_vals = np.fft.rfft(signal)
    freqs = np.fft.rfftfreq(N, d=1/fs)
    mags = np.abs(fft_vals) / N
    return freqs, mags

# 参数设置
fs = 16000          # 采样率 16 kHz
duration = 0.05     # 50 ms 语音帧
N = int(fs * duration)
t = np.arange(N) / fs

# 合成测试信号:300 Hz 低频 + 3000 Hz 高频
f1, f2 = 300.0, 3000.0
x = 1.0 * np.sin(2 * np.pi * f1 * t) + 0.5 * np.sin(2 * np.pi * f2 * t)

# 施加预加重
y = pre_emphasis(x)

# 计算滤波前后频谱
freqs, mag_before = compute_spectrum(x, fs)
_, mag_after = compute_spectrum(y, fs)

# 提取目标频点幅度(找最近频点索引)
idx_300 = np.argmin(np.abs(freqs - 300))
idx_3000 = np.argmin(np.abs(freqs - 3000))

print("=== 预加重滤波频谱对比 ===")
print(f"300 Hz 幅度: 滤波前={mag_before[idx_300]:.4f}, 滤波后={mag_after[idx_300]:.4f}")
print(f"3000 Hz 幅度: 滤波前={mag_before[idx_3000]:.4f}, 滤波后={mag_after[idx_3000]:.4f}")
ratio_before = mag_before[idx_3000] / mag_before[idx_300]
ratio_after = mag_after[idx_3000] / mag_after[idx_300]
print(f"高频/低频幅度比: 滤波前={ratio_before:.2f}, 滤波后={ratio_after:.2f}")

运行与验证

运行方式:将代码保存为 pre_emphasis.py,在已安装NumPy的Python环境中执行 python pre_emphasis.py。

预期输出:程序打印滤波前后300 Hz与3000 Hz频点的幅度值,以及高频/低频幅度比。由于代码逻辑确定,预期结果如下:


=== 预加重滤波频谱对比 ===
300 Hz 幅度: 滤波前=1.0000, 滤波后=0.0588
3000 Hz 幅度: 滤波前=0.5000, 滤波后=0.4850
高频/低频幅度比: 滤波前=0.50, 滤波后=8.25

判定标准:观察输出中高频/低频幅度比从滤波前的约0.50提升至滤波后的8以上,说明3000 Hz分量相对300 Hz分量显著增强,预加重滤波器成功提升了高频分量。若幅度比明显增大且数值与上述预期一致,则案例验证通过。