gpt4 book ai didi

c++ - 复数..啊

转载 作者:行者123 更新时间:2023-11-28 03:31:20 25 4
gpt4 key购买 nike

我正在从事一个项目,该项目要求我获取输入、执行 DFT(离散傅立叶变换),然后从这些值中获取过零次数。

我编写了一个算法,但它使用复数,我不知道如何操作/执行计算。这是代码:

#include <iostream>
#include <complex>
#include <vector>

using namespace std;

const double PI = 3.14159265358979323846;

vector< complex<double> > DFT(vector< complex<double> >& theData)
{
// Define the Size of the read in vector
const int S = theData.size();

// Initalise new vector with size of S
vector< complex<double> > out(S, 0);
for(unsigned i=0; (i < S); i++)
{
out[i] = complex<double>(0.0, 0.0);
for(unsigned j=0; (j < S); j++)
{
out[i] += theData[j] * polar<double>(2, (-2 * PI * i * j / S));
}
}

return out;
}

int main(int argc, char *argv[]) {
vector< complex<double> > numbers;

numbers.push_back(128);
numbers.push_back(127);

vector< complex<double> > testing = DFT(numbers);

for(unsigned i=0; (i < testing.size()); i++)
{
cout << testing[i] << endl;
}
}

现在如果我想执行例如:

if(testing[i] >= 0)
{
// blah blah
}

然后它会返回一个错误。有什么想法或建议吗?是否可以在不使用复数的情况下创建 DFT?

最佳答案

给您指示的人并没有告诉您计算 DFT/FFT 结果的过零数。那将毫无意义。 (如果他们告诉你这样做,他们是毫 headless 绪的。我允许你 mock 他们给你如此荒谬的指示)。相反,他们是在告诉您计算原始数据的过零次数,并查看数据的 FFT。

但是,

  • 过零率是语音识别的一个非常糟糕的起点。也许你可以用它到达某个地方。稍微夸张一点,我可以说过零是您可以进行的最不可靠的 DSP 分析。然而,它也很简单,而且语音识别研究已经进行了很长时间,所以也许会有一些研究。更新/更正:这有点夸张。实际上我相信很多语音识别技术确实使用过零,但你应该首先知道你在做什么,因为它不是很稳健并且对诸如 Octave 错误之类的多种错误不敏感。当您使用过零时,最好先低通(可能是积极地)。一定要考虑其他因素。

  • 了解 FFT 的输出是这里经常被问到的问题,因此我写了一篇博客文章。通常人们会尝试跟踪音高,实际上你也应该这样做,但是你可以从 FFT 中获得其他信息,比如频率质心,以及在语音中很重要的不同频率的相对强度。从这里开始:http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

  • 您可能还想考虑简单地过滤重要的语音频率(要找出这些是什么,请从 "manner of articulation" 上的维基百科条目开始。例如,通过指向 Sibilant 的链接,您将了解到“[s] 在 8,000 Hz 左右具有最大的声学强度。Neeto!)您可以从 FFT 或通过过滤获得该信息。每个都有优点和缺点。您可能想查看语音识别文献以了解它们的用途。

关于c++ - 复数..啊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12520046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com