我对音频处理的质疑可能比编程更多。 只是为了好玩,为了了解更多,我制作了自己的插件来测量滤波器的脉冲响应。能让我看到各种均衡器曲线的东西。类似于它在Waves QClone插件中发生 - 但qClone也可以将这些曲线实现到其他信号,如常规EQ,但我的插件只测量这些曲线 - 我知道VST插件分析器可以做类似的事情。 但是对于我的插件,问题是低频率的准确性,在低于150赫兹的某个地方,它开始显示疯狂的曲线,不适合真实的EQ变化。但是在150 Hz以上一切都还可以(几乎没问题 - 它几乎完美地显示了EQ曲线,但是显示非常窄Q参数的曲线有问题)。 而我几乎整整一周都在想,我做错了什么,我试图改变测量频率范围的分辨率,也试图改变一个脉冲的缓冲区。不知道该做什么,这很烦人:tiny_smile:请帮助我。 我的测量脉冲响应代码主要是这样的:
float freqResolution = 1000.0f; // it’s for set range of measured freq: float minFreqIndex = log10(20.0f)*freqResolution / log10(wSampleRate); float maxFreqIndex = log10(20000.0f)*freqResolution / log10(wSampleRate); for(int sample=(int)minFreqIndex; sample < maxFreqIndex; sample++) {
logScaleFreq = pow(10.0f, log10(wSampleRate) * (float)sample / (freqResolution-1.0f));
_Re = processor.filteredImpulse[0];
_Im = 0.0f;
for (int i=1; i<buffersize; ++i) {
_Re += processor.filteredImpulse[i] * cosf(-(float)i * 2 * double_Pi * logScaleFreq / wSampleRate);
_Im += processor.filteredImpulse[i] * sinf(-(float)i * 2 * double_Pi * logScaleFreq / wSampleRate);
}
float _Re_2 = pow(_Re, 2.0f);
float _Im_2 = pow(_Im, 2.0f);
float _Hf = pow(_Re_2 + _Im_2, 0.5f);
logScale_dB = 20*log10(_Hf);
主要是这样的,然后我在logScaleFreq的函数中将其打印为logScale_dB。 如有任何帮助,请提前致谢。
当然
processor.filteredImpulse[i]
它是来自一个脉冲数组的滤波数据,类似于[1,0,0,0,0,0,0,0,0 ......] 长度取决于buffersize。但是总有一个只有一个,而且很多零,就像我认为冲动应该是:slight_smile: