问题标签 [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 投票
1 回答
221 浏览

signal-processing - 重定时如何在脉动阵列中工作?

重定时如何在脉动阵列(用于信号处理器)中工作?我读到有一些使用负延迟的概念,但是延迟怎么可能是负的,如果这只是一个抽象,那么它有什么帮助呢?

0 投票
7 回答
3843 浏览

c++ - 浮点数组的更快 abs-max

我需要实时绘制音频峰值表。每秒最少 44100 个样本乘以最少 40 个流。每个缓冲区介于 64 到 1024 个样本之间。我需要从每个缓冲区中获取最大绝对值。(然后将它们通过一种低通滤波器馈入并以大约 20 毫秒的间隔绘制。)

我现在就是这样做的。我想做得更快。缓冲区的浮点数在 -1 到 1 范围内,因此是 fabs。

问题,是否有一些棘手的 comp-sci quicksort-esque 方法可以更快地做到这一点?

如果做不到这一点,浮点数的无分支 ABS 和 MAX 函数,它们存在吗?

编辑:主要平台是 Linux/gcc,但计划了一个 windows 端口(可能与 mingw)。

编辑,第二个:
我接受了一个人,因为关于实际算法结构的一点是问题的核心。
我将尝试将循环展开到四个,将符号位归零,然后使用 SSE(maxps 指令)获得最大值,看看是否不会剥皮。感谢您的建议,我投票赞成你们中的一些人,作为亚军。:)

0 投票
3 回答
12821 浏览

signal-processing - 如何将低通滤波器转换为带通滤波器

我有一个由以下传递函数描述的低通滤波器:

h[n] = (w_c/Pi) * sinc( n * w_c / Pi ),其中 w_c 是截止频率

我必须将此低通滤波器转换为带通滤波器。

0 投票
4 回答
2484 浏览

math - 对人类听觉的 FFT 数据进行归一化

音频的典型 FFT 看起来与此非常相似,大部分动作发生在最左侧

http://www.flight404.com/blog/images/fft.jpg

他将它乘以一个部分正弦波以使其达到底部,但文章对这部分并不太具体。它也似乎是对数据集的“足够好”修改,而不是基于某些属性的修改。我知道人类的听觉更适合更高的频率,因此,大多数音乐都会放大低音和衰减高音,这样我们听起来两者的强度相对相等。

我的问题是需要对 FFT 进行哪些修改以补偿此标准衰减?

编辑 ::

http://en.wikipedia.org/wiki/Equal-loudness_contour

我偶然发现了这篇文章,我认为这可能是前进的方向,但仍然可能需要抵消 FFT 的某些特性。

0 投票
1 回答
165 浏览

blackberry - 黑莓技术规范

我在查找 BlackBerry 技术规格时遇到问题,而且他们的网站一团糟。他们也没有我可以用来轻松联系他们的号码。

这不完全是一个编码问题,但 BlackBerry 音频 API 是什么样的,我在哪里可以获得有关音频的技术规范?具体来说,我试图通过 3.5 毫米插孔上的麦克风输入来了解有关音频输入的更多信息。

不幸的是,在继续之前,我需要知道诸如采样率、数据宽度等之类的东西。

指向正确资源的方向,或者如果您知道自己的头顶,我们将不胜感激。

0 投票
4 回答
569 浏览

algorithm - 以 10 为底的数字显示算法 - 每次刷新的最小更改

快速总结:

我正在寻找一种算法来显示四位数的速度信号,这样每次显示更新时都会更改(十进制)的最小位数。

例如:


细节:

我正在做一个项目,我需要在四位 LCD 显示器上显示速度信号(0 到 3000 RPM 之间)。理想的显示解决方案是模拟仪表,但我坚持使用数字显示。显示器将由机器操作员阅读,我希望阅读起来尽可能愉快。

操作员并不真正关心信号的确切值。他会想知道这个值是多少(精确到 10 RPM),并且他会想看到它随着机器运行的变化而上下波动。他不想看到它到处乱跳。

这是我到目前为止所做的:

  • 将数字四舍五入到最接近的 10 RPM,以便最后一位始终为 0
  • 过滤信号,使电噪声和正常的传感器波动不会导致读数一次跳跃超过 10 RPM。
  • 为信号添加了一个 +/-10 RPM 滞后,以避免在相同值上摆动的情况(例如:990 - 1000)

当信号稳定时(大约 75% 的时间),这已经很好地清理了事情,但是当信号从一个稳定状态移动到另一个稳定状态时,我仍然看到很多不必要的变化。当信号从 100 RPM 变为 1000 RPM(例如)时,它会一路经过很多数字。由于实际阅读和理解数字需要一点时间,因此达到所有这些中间状态似乎没有什么意义。我尝试简单地降低显示器的更新率,但这并没有产生令人满意的结果。它同时让显示器“感觉”迟缓和跳跃。在数字发生变化之前会有明显的延迟,然后它们会大幅跃升(100、340、620、980、1000)。


提议:

我希望显示器的行为如示例所示:

  1. 显示每秒更新两次
  2. 从一种稳态过渡到另一种稳态的时间不应超过 2 秒。
  3. 如果输入信号高于当前显示值,则显示信号应增加,但绝不应高于输入信号值。
  4. 如果输入信号低于当前显示值,则显示信号应减小,但决不能低于输入信号值。
  5. 每次更新应更改的最小位数(最好只有一位)
  6. 应先改变高位数字,使显示信号与输入信号的差异尽快减小

你能想出,或者你知道根据上述规则输出“正确”的 4 位十进制数的算法吗?

伪代码中的函数原型看起来像这样:

对不起,文字墙。我想记录我迄今为止的进展,以便任何回答这个问题的人都避免覆盖我已经经历过的基础。

0 投票
5 回答
300 浏览

language-agnostic - 我可以通过立体声信号获得更高的频域分辨率吗?

背景

我承认,这个问题源于对数字信号处理所涉及的基础数学缺乏深入的理解。我还在学习。

我想获取一组幅度样本,比如 1024(单通道),并将它们带入频域。显然,这需要 FFT;那里没问题。问题是这只给了我高达奈奎斯特频率或 1024/2 的频率。

问题

如果我有立体声信号,我可以合并信号以产生 2048 个幅度样本,从而返回 1024 个频率值吗?我希望在频域中获得更高的分辨率。

那么,这可以做到返回有意义的频率数据吗?有没有其他方法可以获取立体声信号并最终在频域中获得更高的分辨率?

到目前为止我发现了什么

我遇到了一篇文章,它建议将左信号设为实数值,将右信号设为 FFT 复数值的虚数值。这对我来说没有意义,也许是因为我不懂数学。我确实尝试过,它似乎工作,但我有信号泄漏。所以我应用了一个汉宁窗,但处理后只有 512 个可用值。

0 投票
5 回答
3609 浏览

speech-recognition - “语音触发”检测

我有一个语音应用程序,如果能够使用“触发词”开始录制音频,它将会大大改进。我不需要完整的语音文本引擎,只需要可靠/有效地检测触发词的能力。

我想知道是否有任何专门的语音引擎支持这个特定的用例,或者有任何库/方法来开发这种单一用途的检测引擎。理想情况下,我希望它可以在嘈杂的环境中工作,但可以针对单个用户的声音进行训练。

指向研究论文/主题的指针也将不胜感激,所以我知道要问什么。

0 投票
7 回答
7444 浏览

c - 数组上的就地位反转随机播放

对于 FFT 函数,我需要以位反转的方式排列或打乱数组中的元素。这是 FFT 的一项常见任务,因为两种大小的 FFT 函数的大多数功能要么期望或以位反转的方式返回它们的数据。

例如,假设数组有 256 个元素,我想用它的位反转模式交换每个元素。这里有两个例子(二进制):

等等。

知道如何快速且更重要地做到这一点:就地?

我已经有一个执行此交换的功能。写一篇不难。由于这是 DSP 中如此常见的操作,我觉得有比我非常幼稚的循环更聪明的方法来做到这一点。

有问题的语言是 C,但任何语言都可以。

0 投票
4 回答
4919 浏览

python - 裁剪 FFT 矩阵

音频处理对我来说很新鲜。目前使用 Python Numpy 处理波形文件。计算 FFT 矩阵后,我得到了不存在频率的噪声功率值。我对可视化数据感兴趣,准确性不是一个高优先级。是否有一种安全的方法来计算裁剪值以删除这些值,或者我应该使用每个样本集的所有 FFT 矩阵来得出一个平均数?

问候

编辑:

这是使用 Goldwave 创建的包含 500hz(淡出)+ 200hz 正弦波的合成波文件的非对数刻度图。