音频均衡
Audio equalization
我正在使用 FFmpeg 开发音频播放器,我想将音频均衡器添加到我的应用程序中。我使用 FFmpeg 获取音频样本并计算 FFT,但是当我尝试应用其中一个 IIR 滤波器时,我得到了非常嘈杂的音频信号。
这是我的代码:
double Q = 1.0;
double omega = 2.0 * PI * 1000.0 / 44100.0;
double sine = sin(omega);
double alpha = sine / ( 2.0 * Q);
double cosine = cos(omega);
double b0 = (1 + cosine)/2;
double b1 = (-1) * (1 + cosine);
double b2 = (1 + cosine)/2;
double a0 = 1 + alpha;
double a1 = (-2) * cosine;
double a2 = 1 - alpha;
for( int n = 2; n < fftSize; n++ )
{
leftChannel2[n].re = ((b0/a0)*leftChannel[n].re + (b1/a0)*leftChannel[n-1].re + (b2/a0)*leftChannel[n-2].re -
(a1/a0)*leftChannel2[n-1].re - (a2/a0)*leftChannel2[n-2].re);
rightChannel2[n].re = ((b0/a0)*rightChannel[n].re + (b1/a0)*rightChannel[n-1].re + (b2/a0)*rightChannel[n-2].re -
(a1/a0)*rightChannel2[n-1].re - (a2/a0)*rightChannel2[n-2].re);
leftChannel2[n].im = leftChannel[n].im;
rightChannel2[n].im = rightChannel[n].im;
}
有人能告诉我这段代码有什么问题吗?
此过滤器在 Excel 或 Matlab 中是否正确执行?乍一看,我在这里没有看到语法或语义错误。顺便说一下,这个滤波器(差分方程)计算时域的频率响应。信号的虚部呢?如果它不为零,则必须以相同的方式对其进行过滤。
我正在使用 FFmpeg 开发音频播放器,我想将音频均衡器添加到我的应用程序中。我使用 FFmpeg 获取音频样本并计算 FFT,但是当我尝试应用其中一个 IIR 滤波器时,我得到了非常嘈杂的音频信号。 这是我的代码:
double Q = 1.0;
double omega = 2.0 * PI * 1000.0 / 44100.0;
double sine = sin(omega);
double alpha = sine / ( 2.0 * Q);
double cosine = cos(omega);
double b0 = (1 + cosine)/2;
double b1 = (-1) * (1 + cosine);
double b2 = (1 + cosine)/2;
double a0 = 1 + alpha;
double a1 = (-2) * cosine;
double a2 = 1 - alpha;
for( int n = 2; n < fftSize; n++ )
{
leftChannel2[n].re = ((b0/a0)*leftChannel[n].re + (b1/a0)*leftChannel[n-1].re + (b2/a0)*leftChannel[n-2].re -
(a1/a0)*leftChannel2[n-1].re - (a2/a0)*leftChannel2[n-2].re);
rightChannel2[n].re = ((b0/a0)*rightChannel[n].re + (b1/a0)*rightChannel[n-1].re + (b2/a0)*rightChannel[n-2].re -
(a1/a0)*rightChannel2[n-1].re - (a2/a0)*rightChannel2[n-2].re);
leftChannel2[n].im = leftChannel[n].im;
rightChannel2[n].im = rightChannel[n].im;
}
有人能告诉我这段代码有什么问题吗?
此过滤器在 Excel 或 Matlab 中是否正确执行?乍一看,我在这里没有看到语法或语义错误。顺便说一下,这个滤波器(差分方程)计算时域的频率响应。信号的虚部呢?如果它不为零,则必须以相同的方式对其进行过滤。