【问题标题】:Recognition of a short high frequency sound in low frequency noise (objc/c)低频噪声中短高频声音的识别(objc/c)
【发布时间】:2011-03-04 19:50:18
【问题描述】:

我目前正在创建一个应用程序,该应用程序使用高频声音向其他设备发出准备就绪信号。

(发射器):设备会发出短促的 20khz 左右的声音。

(接收器):另一台设备将在距发射器一小段距离(大约 10 米)处收听此频率的声音。该设备从麦克风接收音频数据

背景噪音会相当响亮,从 0 到 10khz(大约人类语音范围)不等,并且会由一小群人产生。

我需要接收设备能够检测到 20khz 的声音,从噪音中分离出来,

并知道收到它的时间。

任何有关适当算法、库甚至更好的 C 或代码的帮助

非常感谢 Objc 来检测这种高频声音。

【问题讨论】:

    标签: objective-c c audio frequency


    【解决方案1】:

    20 kHz 可能会推动它,因为 (a) 大多数声卡在 18 - 20 kHz 处具有低通(抗混叠)滤波器,并且 (b) 大多数扬声器和麦克风在 20 kHz 处往往响应不佳。您可能想考虑说 15 kHz 吗?

    实际的检测部分应该很简单——只需在音调频率上实现一个窄带通滤波器,整流输出和低通滤波器(例如 10 Hz)。

    【讨论】:

    • 感谢您的宝贵意见。我想我可以使用 15khz。您对我如何实现这一点有任何指示吗?我以前从未做过声音分析。
    • @nonono:DSP 是一个很大的主题,但是您可以很容易地实现一个简单的窄带滤波器。最常见和最简单的实现之一是 Goertzel 过滤器:en.wikipedia.org/wiki/Goertzel_algorithm,它应该足以满足您的需求。
    【解决方案2】:

    您可能需要研究 FFT(快速傅立叶变换)。该算法将允许您分析波形并将其转换为频谱以供进一步分析。

    【讨论】:

    • 老兄,完全矫枉过正。只需为该频率实现一个 FIR 带通滤波器,然后测量结果信号的功率。当它超过一个阈值时,就是那个音调。
    • @datenwolf 所说的 - FFT 对于检测已知频率的单音来说太过分了 - Goertzel 或简单的单极带通滤波器更合适。
    【解决方案3】:

    如果这适用于 Mac OS 或 iOS,我会开始研究 Core Audio 的音频单元。

    1 这是 Apple 的 Core Audio Overview

    2 一些AudioUnits for Mac OS

    3 或iOS AudioUnit Hosting

    【讨论】:

      【解决方案4】:

      iPhone 扬声器根本不会发出那种高频的声音。

      【讨论】:

        猜你喜欢
        • 2021-05-13
        • 2016-12-20
        • 1970-01-01
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多