你能以编程方式检测白噪声吗?

时间:2010-10-07 11:42:16

标签: java android

戴尔Streak被发现有一个调频收音机,它有非常粗略的控制。默认情况下“扫描”不可用,所以我的问题是有没有人知道如何使用Android上的Java,当我们在检测白噪声(或良好信号)的频率范围内迭代时,可能会“收听”FM收音机,以便像普通无线电的寻找功能一样行动吗?

9 个答案:

答案 0 :(得分:16)

我已经在这个特定区域做了一些实际的工作,我建议(如果你有一点时间的话)在尝试fft'ing之前尝试一些实验。 pcm流可以非常复杂和巧妙地解释(根据高质量的过滤和重新采样),但实际上也可以作为摆动线的路径用于许多目的。

白噪声是不可预测的线条震动,它在强度上永远不会相当连续(rms,绝对平均值......)声学内容是反复出现的扭曲和偶尔的惊喜(跳跃,跳跃):]

可以通过在pcm流的运行窗口上执行快速计算来估计信号内容之类的非噪声。

例如,与非噪声相比,噪声对其导数的绝对积分的强烈倾向性更大。我认为这是说这个的学术方式:

loop(n+1 to n.length)
{ sumd0+= abs(pcm[n]); 
  sumd1+= abs(pcm[n]-pcm[n-1]); 
}

wNoiseRatio = ?0.8; //quite easily discovered, bit tricky to calculate.

if((sumd1/sumd0)<wNoiseRatio)
{ /*not like noise*/ }

此外,超过~16到30个白噪声样本的运行绝对平均值往往比白噪声变化小于声学信号:

loop(n+24 to n.length-16)
{ runAbsAve1 += abs(pcm[n]) - abs(pcm[n-24]); }

loop(n+24+16 to n.length)
{ runAbsAve2 += abs(pcm[n]) - abs(pcm[n-24]); }

unusualDif= 5; //a factor. tighter values for longer measures.

if(abs(runAbsAve1-runAbsAve2)>(runAbsAve1+runAbsAve2)/(2*unusualDif))
{ /*not like noise*/ }

这涉及白噪声如何在足够大的跨度上非零散地平均其熵。声学内容是零星的(局部功率)和重复的(重复功率)。 简单测试对较低频率的声学内容作出反应,并可能被高频内容淹没。有一些简单的应用低通滤波器可以提供帮助(毫无疑问是其他适应)。

此外,均方根可以除以平均绝对和,提供另一个应该特别适用于白噪声的比率,尽管我现在无法计算它是什么。信号导数的比率也会有所不同。

我认为这些是噪音的简单公式签名。我相信还有更多...... 对不起,不是更具体,它是模糊和不精确的建议,但对fft的输出执行简单测试也是如此。为了更好地解释和更多的想法,也许可以查看维基百科等上的熵和随机性的统计和随机(?)测量。

答案 1 :(得分:15)

使用快速傅立叶变换。

这是你可以使用快速傅立叶变换的方法。它分析信号并确定各种频率的信号强度。如果FFT曲线完全出现尖峰,则表明该信号不仅仅是白噪声。

Here是一个支持FFT的库。此外,here是一个包含源代码的博客,以防您想了解FFT的用途。

答案 2 :(得分:7)

如果你没有可用的FFT工具,那就是一个疯狂的建议:
尝试压缩几毫秒的音频。

噪声的一个典型特征是压缩比信号清晰得多。

答案 3 :(得分:5)

据我所知,Android SDK中的FM收音机没有API甚至驱动程序,除非戴尔发布一个,否则你将不得不推出自己的。实际上甚至比这更糟糕。所有(?)新chipsets都有FM广播,但not all phonesFM Radio application

旧的Windows Mobile具有相同的problem

答案 4 :(得分:3)

对于白噪声检测,您需要进行FFT并发现它具有或多或少连续的频谱。但是从FM录制可能是个问题。

答案 5 :(得分:2)

只需高通滤波就可以提供一个好主意,并且有时会用于静音fm无线电。

请注意,这与衍生建议的结果相当 - 采用衍生工具是一种简单形式的高通滤波器,并采用粗略的测量功率方法的绝对值。

答案 6 :(得分:1)

您是否订阅了IEEE Xplore库?在这个主题上有无数的论文(one随机挑选)。

一种非常简单的方法是观察力量spectral density的“平坦度”。人们可以通过在时域中使用Fast Fourier Transform信号来找到频谱密度的standard deviation。如果低于某个阈值,则会产生白噪声。

答案 7 :(得分:0)

这里的主要问题是:您可以访问哪种类型的信号?

我敢打赌,你无法直接访问模拟EM信号。因此,不可能在此信号上使用FFT。您也不能尝试构建phased-lock loop,这是您的标准旧收音机调谐器的工作方式(在您的情况下为“扫描”)。

你唯一的选择确实是选择一个频率并听它(并尝试用声音上的FFT检测它的噪音)。您甚至可能只能访问FFTed信号。

此处出现问题:如果您想使用白噪声检测潜在频率,您将很容易接收信号。


无论如何,我将尝试使用此策略:

双倍整合autocorrelationspectral density超过一秒的音频。这适用于每个频率。

然后查找此频率最大的FM频率。

这里的解释很少:

  • 光谱密度为您提供最常用频率的信号。
  • 如果稍后一段时间如果相同的频率被最大化,那么你有一些所谓的清晰音频。你可以通过将一个音频的频谱密度与自相关进行积分来得到这一点(使用一些长度大于线性的函数也可以工作)
  • 然后你必须将其整合到所有音频

同样要小心归一化积分:大声的白噪声信号不应该得到比清晰但低音频信号更高的分数。

答案 8 :(得分:0)

有些人提到了你想要做的FFT,但是要检测白噪声,你需要确保音频在音频范围内相对恒定。你只想看看震级,你可以扔掉各个阶段。您可以计算O(N)时间内的幅度的平均值和标准差。对于白噪声,您应该发现标准偏差是平均值的一小部分。如果我记得我的统计数据是正确的,它应该是平均值的1 / sqrt(N)。