Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 音频均衡_C++_Signal Processing_Audio Processing_Equalizer - Fatal编程技术网

C++ 音频均衡

C++ 音频均衡,c++,signal-processing,audio-processing,equalizer,C++,Signal Processing,Audio Processing,Equalizer,我正在使用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); dou

我正在使用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;
}
double Q=1.0;
双ω=2.0*PI*1000.0/44100.0;
双正弦=正弦(ω);
双α=正弦/(2.0*Q);
双余弦=余弦(ω);
双b0=(1+余弦)/2;
双b1=(-1)*(1+余弦);
双b2=(1+余弦)/2;
双a0=1+α;
双a1=(-2)*余弦;
双a2=1-α;
对于(int n=2;n

有人能告诉我这段代码有什么问题吗?

这个过滤器在Excel或Matlab中运行正确吗?乍一看,我在这里没有看到语法或语义错误。顺便说一下,这个滤波器(差分方程)在时域中计算频率响应。信号的虚部呢?如果它不是零,你必须用同样的方法对它进行过滤。

我真的不明白你想用这段代码做什么。你想让某个频率范围更安静还是更响亮?@Andrey,根据Audio EQ Cookbook的说法,这是一个1kHz截止频率的低通滤波器。我遗漏了一些代码。也许我遗漏了一些东西,但是
sine
cosine
不应该是函数,而不是一次性的定义吗?事实上,它是一个高通滤波器(这也是在Matlab中用
freqz
绘制滤波器频率响应时得到的结果)。@Andrey,所以我必须直接对音频样本应用过滤器?你确定时域吗?我正在过滤快速傅里叶变换的结果,这是在频域中。我试着用同样的方法过滤信号的虚部,但并没有改变。你们应该把这个滤波器直接应用到时域。双四阶滤波器是一种递归滤波器,在频域中廉价地逼近昂贵的滤波。