Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.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++ 如何获得粉红噪声的每倍频程功率(使用Aquila DSP库)?_C++_Signal Processing_Fft_Spectrum - Fatal编程技术网

C++ 如何获得粉红噪声的每倍频程功率(使用Aquila DSP库)?

C++ 如何获得粉红噪声的每倍频程功率(使用Aquila DSP库)?,c++,signal-processing,fft,spectrum,C++,Signal Processing,Fft,Spectrum,我的目标是制作一个声音均衡器软件;经过一点研究,我发现我需要产生一个粉红色的噪音,用麦克风记录下来,然后比较两个光谱 到目前为止,我只生成了一个使用Voss算法的粉红色噪声,它听起来很好,尽管比维基百科上的样本“标准化为-1dbfs峰值”的声音要小一些 我想获得每一个人的力量⅓ 倍频带,这是我所做工作的伪代码,使用它帮助了我很多: Aquila::PinkNoiseGenerator pinkNoise(44100); // sampleFrequency = 44.1 kHz Pink

我的目标是制作一个声音均衡器软件;经过一点研究,我发现我需要产生一个粉红色的噪音,用麦克风记录下来,然后比较两个光谱

到目前为止,我只生成了一个使用Voss算法的粉红色噪声,它听起来很好,尽管比维基百科上的样本“标准化为-1dbfs峰值”的声音要小一些

我想获得每一个人的力量⅓ 倍频带,这是我所做工作的伪代码,使用它帮助了我很多:

Aquila::PinkNoiseGenerator pinkNoise(44100);    // sampleFrequency = 44.1 kHz

PinkNoise.setAmplitude(65536 / 2);          // sampleAmplitude = 65536
PinkNoise.generate(32768);                  // http://goo.gl/85R4wm

Aquila::SpectrumType spectrum = Aquila::fft(PinkNoise); // contain ComplexeType(real, imaginary)
double  frequency, db;

for (i = 0; i <= (32768 / 2); i++)
{
      frequency = (i * 44100) / 32768;  
      foreach (thirdOctave : o)
      {
            if (frequency >= o.min && frequency < o.max)
            {
                   db = Aquila::db(spectrum[i]);    // How it’s done : http://goo.gl/tkRicN 
                   o.result += db;
            }
      }
}

foreach(thirdOctave : o)
    print(“From “ + o.min + “ Hz to “ + o.max + “ Hz - Result = “ + o.result);
以下是显示的内容:

从14.1 Hz到17.8 Hz-结果=393.421

从17.8 Hz到22.4 Hz-结果=375.055

从22.4 Hz到28.2 Hz-结果=520.531

[……]

从891 Hz到1122 Hz-结果=19048.2

从1122 Hz到1413 Hz-结果=23770.9

从1413 Hz到1778 Hz-结果=29700.3

[……]

从11220 Hz到14130 Hz-结果=214689

从14130 Hz到17780 Hz-结果=268036

这就引出了我的问题:

1-从我的理解来看,每个结果应该大致相同,这显然不是这里的情况。有没有什么简单的事情我做错了

2-我得到的db值在100到130之间,但在我看到的每个图形上,值都是负值。与上面的问题相同,除了Aquila::db方法之外,还有什么我应该做的吗

谢谢你抽出时间


PS:我想指出,信号处理对我来说是一件新鲜事,我做了一些研究,但我可能用错了一些术语。

你想先把频谱大小相加,然后取db,你的代码似乎做的正好相反。总和的日志与日志值的总和非常不同


dB通常报告为低于某一参考水平的震级。由于该比率将小于100%,因此该比率的对数将为负。

谢谢,现在我的值更符合逻辑,但它们仍然不相等:它从低频时的145 dB开始,到高频时的140 dB。这是好的还是应该严格等同于良好的粉红色噪声?另外,我如何确定我需要有一个类似图形的参考值?我有点迷糊了,因为这是一个数字信号,我试着用我得到的最大幅度作为参考,但它似乎不起作用。