使用 MATLAB 生成听不见的声波

信息处理 matlab 声音的 频率 声音
2022-02-21 22:33:45

我想使用 MATLAB 以 48kHz 的采样率生成听不见的声波(18kHz 以上)。

产生 18kHz 频率的声波使其听不见。

无 4.17 沉默期

我在频域中插入了 18kHz 频带中的数据,将其转换为时域信号。然后我复制了信号,将它连接起来并播放了它。
正如所料,播放的声音是听不见的。

问题是,我想以间隔播放听不见的声音。
(重复播放声波 1.75ms 并有 4.17ms 的静音期)

带静默期的信号

由于插入的静默期,连接的信号不再听不见,因为添加了新的频率分量。

带4.17静音期

如何以时间间隔传输听不见的声音?

2个回答

尽管从提供的信息中我不太清楚这些广泛分布的线谱的确切原因,但很可能是由于您在消息信号之间添加的静音期所暗示的开关切换。

开关波形是您乘以信号的隐式操作。在声音间隔期间其值为 ,在静音间隔期间其值为该波形的基本周期约为​​ 200 赫兹。10

从技术上讲,具有给定占空比的开关切换将使消息频谱偏移开-关波形的连续傅里叶级数中存在的每个重要谐波的 k 次谐波频率的量。

实际上这是一种实现模拟调制算法的方法。与矩形波相乘会产生大量以谐波为中心的上混频谱,其中只有一个由合适的带通滤波器选择。

因此,作为解决方案,您可以尝试以下方法:

1- 在时域中生成 18kHz(已带通)消息信号。

2- 相应地插入静音时段。

3- 应用以 18Khz 为中心的BPF (带通滤波器)。

如果仔细实施,我猜这应该会解决您的问题。然而,消息信号中的失真可能会发生。

您可能想尝试使用同样听不见的信号对高频音调进行窗口化,例如频谱大多低于 20 Hz 的非矩形窗口包络,它们之间的距离是随机的(如果需要携带信息,则为伪随机)到去除周期性。