问题标签 [signal-processing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
61335 浏览

audio - 实时音高检测

我正在尝试对用户唱歌进行实时音高检测,但遇到了很多问题。我尝试了很多方法,包括 FFT(FFT 问题(返回随机结果))和自相关(自相关音高检测返回带有麦克风输入的随机结果),但我似乎无法获得任何方法来给出好的结果。谁能建议一种实时音高跟踪的方法或如何改进我已有的方法?我似乎找不到任何用于实时音高检测的好的 C/C++ 方法。

谢谢,

尼尔。

编辑:请注意,我检查了麦克风输入数据是否正确,并且当使用正弦波时,结果或多或少是正确的音高。

编辑:对不起,这已经晚了,但目前,我通过从结果数组和每个索引中取出值来可视化自动收集,并在 X 轴上绘制索引和 Y 轴上的值(两者都除以100000 或其他东西,我使用 OpenGL),将数据插入 VST 主机并使用 VST 插件对我来说不是一个选项。目前,它看起来就像一些随机的点。我做得对吗,或者你能不能指点我一些代码来做这件事,或者帮助我理解如何可视化原始音频数据和自相关数据。

0 投票
2 回答
5011 浏览

image-processing - 如何将两个不同尺寸图像的光谱相乘?

这不是一个“编程”问题。但我确信这是在这个社区中广为人知和理解的东西。

我有一个图像 x 和一个小得多的图像 y,我需要通过乘以它们的 FFT 来对两者进行卷积。但由于它们的大小不同,我不知道如何进行频域乘法。

我采用 x 的(二维)FFT(它是一个维度为 4096 x 4096 的整数矩阵),它给出了频域表示 X(它是一个复数矩阵,我认为它的维度是 2048 x 2048 )。

同样,我采用(y 的二维 FFT(它是一个 64 x 64 维的整数矩阵),它给出了频域表示 Y(它也是一个复数矩阵,我认为它的维数是 32 × 32)。

我在 Numerical Recipes 中使用了fourn 函数,所以我的输入矩阵 x 和 y 必须折叠成一维数组,这些数组被它们的离散傅里叶变换 X 和 Y 所取代。关键是即使这是一个图像的二维问题,我正在处理一维数组。

如果我试图对两个尺寸完全相同的图像 x 和 y 进行卷积。这一切都非常简单:

但是如果 X 和 Y 的长度不同,我该如何做乘法呢?

一种可能性是将 y 填充为与 x 具有相同的尺寸。但这似乎非常低效。另一种可能性是填充 Y 使其具有与 X 相同的尺寸。但我不知道这在频率空间中意味着什么。

这是问这个问题的另一种方式:如果我想使用 FFT 对两个尺寸非常不同的图像进行卷积,以便可以对其光谱进行乘法(频域表示),我该如何进行乘法运算?

谢谢,

〜迈克尔。

0 投票
8 回答
19132 浏览

c# - 计算正弦值性能与查找表?

假设您必须计算域在 0.01 和 360.01 之间的正弦(余弦或正切 - 随便)。(使用 C#)

什么会更高效?

  1. 使用 Math.Sin
  2. 使用具有预先计算值的查找数组

我预计给定域,选项 2 会快得多。在域的精度(0.0000n)中,计算的性能在什么时候超过了查找。

0 投票
3 回答
4465 浏览

audio - OpenAL Real Time Audio Processing from Microphone

I would like to write a cross-platform application that can process and play back microphone data in real time. Imagine as a proof of concept a chat room where people can talk to each other and apply filters to their voices. Is OpenAL appropriate for this? If not, can someone provide an alternative? Additionally, if anyone can provide or link me to a simple "hello world" program that reads from the microphone and spits the output back out, that would be awesome.

Thanks!

0 投票
5 回答
5783 浏览

iphone - iPhone:做 DSP/傅立叶变换/频域的 CPU 能力?

我想持续分析 MIC 音频(不仅仅是剪辑或预先录制的样本),并显示频率图并过滤掉音频的某些方面。iPhone 是否足够强大?鉴于谷歌和 iPhone 语音识别、Shazaam 和其他音乐识别应用程序以及吉他调音器应用程序,我怀疑答案是肯定的。但是,我不知道我必须处理哪些限制。

有人玩这个区吗?

0 投票
2 回答
794 浏览

c++ - 用于理解电话线上的音频信号的 C++ api

是否有任何好的 c++ 源代码或 api 用于处理电话线,例如理解音调信号。例如,我想知道这个人是否输入了 3(这很可能是使用它的音调来完成的)。

我是否需要为此目的使用特殊的调制解调器,或者只能使用标准调制解调器来完成。

0 投票
4 回答
2766 浏览

iphone - 避免浮点运算

我为 iPhone 编写了一个小型软件合成器。
为了进一步调整性能,我用 Shark 测量了我的应用程序,发现我在浮点/SInt16 转换中浪费了很多时间。
因此,我重写了一些部分以通过预先计算返回“即用型”SInt16 样本的查找表来绕过转换。到目前为止,这工作正常。
目前我正在尝试重写一些过滤器和我的 ADSR 包络实现以仅使用整数算术,但我可以使用一些技巧来执行没有浮点数的乘法/除法。
我的目标是iPhone 规范格式

  • LPCM
  • 16 位整数样本

在不使用浮点数的情况下将幅度应用于我的最终样本的好方法是什么?

编辑:
到目前为止,我唯一想到的是,我可以通过右移当前样本来除以 2 的幂。

但我想不出任何优雅的方式来创建一个平滑的 ADSR 信封。

Edit2: 感谢您的所有精彩回答!
我目前的做法:

  • 将我所有的 ADSR 包络值带入正 SInt16 范围
  • 与波表中的当前值相乘(将中间体存储为 SInt32)
  • 将结果右移 16

这似乎工作:)

0 投票
8 回答
4699 浏览

assembly - TI DSP 编程 - C 足够快还是我需要汇编程序?

我打算为德州仪器达芬奇平台编写一些图像处理程序。有适合用 C 语言编程的工具,但我想知道是否真的可以在不求助于汇编语言的情况下充分利用 DSP 处理器。你知道在这个 DSP 平台上用 C 和汇编程序编写的程序之间的速度比较吗?

0 投票
5 回答
13532 浏览

audio - 智能手机上音符的音高识别

由于资源有限,例如较慢的 CPU、代码大小和 RAM,如何最好地检测音符的音高,类似于电子或软件调音器所做的事情?

我应该使用:

  • 亲吻 FFT
  • FFTW
  • 离散小波变换
  • 自相关
  • 过零分析
  • 倍频程滤波器

其他?

简而言之,我要做的是识别一个音符,在中音 C 以下两个八度到两个八度以上,在任何(合理的)乐器上演奏。我希望在半音的 20% 以内 - 换句话说,如果用户弹奏太平或太尖锐,我需要区分这一点。但是,我不需要调整所需的精度。

0 投票
3 回答
22917 浏览

c++ - 使用 FFT 进行实时音高检测

我正在尝试使用 C++ 进行实时音高检测。我正在测试一些来自高性能(http://performous.org/)的代码,因为其他一切都对我不起作用。我肯定知道这行得通,但我就是不能让它工作。我已经尝试了几个星期,但我无法让任何音高检测代码正常工作。