【问题标题】:calculating fft with complex number in c#在c#中用复数计算fft
【发布时间】:2013-02-19 21:51:24
【问题描述】:

我使用这个公式来获取信号的频率,但我不明白如何用复数实现代码?与 Math.Sqrt(-1) 相关的公式中有“i”。如何使用 NAduio 库编写此公式以在 C# 中发出信号?

【问题讨论】:

  • 你想用什么语言写这个?
  • 你是说编程语言吗?
  • 是的,我就是这个意思:)
  • c# 编程语言:)
  • 那么我的答案就是你的答案:)

标签: c# speech-recognition naudio speech-to-text audio-processing


【解决方案1】:

许多语言实际上为此提供了内置库。在 C#.NET 中的一个示例位于 this link。这为您提供了如何设置语音识别程序的分步指南。它还将您从解析某些现象等的音频的低级细节中抽象出来(坦率地说,除非您希望编写高度优化的版本,否则这对于现有的库数量来说毫无意义)。

【讨论】:

  • 是的,但它不支持我的母语土耳其语。
  • 好吧,如果您在问题中提到这一点,我会提出不同的建议。有没有办法可以输入土耳其语单词的音标?
  • 我想应该是这样,我不明白你的意思
  • 所以呃..“你好”的语音发音是.. HEH-LOW。明白我的意思了吗?
  • 好的,我明白了。但是我必须对特定单词使用语音发音吗?我的话很具体。我不会认出其他人。
【解决方案2】:

如果你想回到基础水平,那么:

您需要使用某种形式的概率模型,例如隐马尔可夫模型 (HMM)。这将允许您测试用户对一组模型所说的内容,每个模型对应一个允许他们说的单词。

此外,您还想将音频波形转换为您的程序可以更轻松地解释的东西。类似于快速傅里叶变换 (FFT) 或小波变换 (CWT)。

步骤如下:

  1. 获取音频
  2. 去除背景噪音
  3. 通过 FFT 或 CWT 转换
  4. 检测音频的峰值和其他特征
  5. 将这些功能与您的 HMM 进行比较
  6. 选择具有最佳阈值结果的 HMM。

当然,这需要您事先使用正确的单词训练 HMM。

【讨论】:

  • 能否给出第 2、3、4 步的算法或代码(c#)?
  • 恐怕我几乎完全用 c++ 编写代码。第 2 步可以非常简单,您可以只设置阈值或进行滚动平均,然后使用它来设置阈值。第 3 步您可以在此处找到代码:stackoverflow.com/questions/170394/… 第 4 步您可以再次进行阈值处理,但使用更高的值,或者只查找最高值。其他特征可能是词的长度和词的频率。
  • 第二步,如何确定阈值?
  • 我首先尝试将音频分割成用户说话和不说话的时间。然后从他们不说话时获取音频的平均值和标准偏差。最后,我将阈值设置为平均值加上标准偏差的一倍或两倍。作为一个额外的步骤,您可以删除高于阈值的音频的小部分,基本上如果它高于阈值但不足以成为一个单词然后丢弃它。
【解决方案3】:

这仍然是一个难题,您必须使用 ASR 框架来完成。我使用 Sphinx4 做了一些稍微复杂的事情(约 100 个字)。您也可以使用 HTK。

一般来说你要做的是:

  • 写下你想识别的所有单词
  • 确定命令的语法,例如(方向)(数量)

然后选择一个框架,获取一个声学模型,生成一个字典和一个与该框架兼容的语言模型。然后将框架集成到您的应用程序中。

我希望我已经提到了你需要做的所有重要事情。您可以单独搜索它们或转到您选择的框架的教程。

你的任务在语音识别方面比较简单,如果你完成了应该会得到不错的结果。

【讨论】:

    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 2014-04-23
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多