如何向PCM原始数据添加噪声

时间:2013-04-16 18:26:33

标签: java android signal-processing

现在我直接从WAV文件加载了PCM原始字节数组,现在我必须将噪声添加到原始字节数组中。我的要求是,如果不知道增加的噪声就无法解码结果,如果我确切地知道噪声是什么,我也可以消除噪声。 我目前的想法是将原始字节数组转换为短数组,并生成一个噪声短数组,其随机生成的数字介于2 ^ -15和2 ^ 15之间,并逐个插入这两个数组。但看起来这种方法无法保证我可以恢复原来的数组。 有人能给我一些更好的想法吗?提前感谢你。

2 个答案:

答案 0 :(得分:0)

根据定义,噪声是信号中的(准)随机干扰。您无法完全恢复原始信号,只有在您知道噪声频谱时才能抑制它。

答案 1 :(得分:0)

假设你有一个(声音)信号,S(t)。

你想'加密'这个信号,创建E(t)。

您可以通过添加Noise,N(t)来完成此操作。

S(t)+ N(t)= E(t)。

此外,E(t) - N(t)= S(t)。

所以现在问题是产生一种独特的“噪音”。

我会通过伪随机数生成器(http://en.wikipedia.org/wiki/Pseudorandom_number_generator)来完成此操作,您可以将种子信息传递给收件人。

现在,任何拥有相同种子来创建N(t)的人都可以计算出E(t)-N(t)= S(t)


对评论的回应:

@Bjorn:它不是正常意义上的加密。但是,假设你有一些整数C mod [0 - 2 ^ 16-1]。现在,在相同的范围[0-2 ^ 16-1]上添加一些均匀的随机整数。结果也是该范围内的均匀随机整数。因此,根据随机序列发生器的质量,您可以创建不可解码的信号(没有原始叠加信号)。 (我承认,如果没有溢出就不会这样。)

@OP:您的问题是在传递数字后对其进行解码。

假设您有一个二进制字符串10101010.现在,您要为此添加11110000。 结果应该看起来像01011010.溢出到第2 ^ 8位。

现在,01011010 - 11110000返回相同的初始值:10101010。因此,此溢出实际上可用作屏蔽原始信号的辅助

*如果您使用独特的屏蔽信号,您可以在收件人处再次生成。