如何产生具有平坦频谱的带限随机噪声?

时间:2016-12-31 15:44:34

标签: matlab random noise

如何在1280 Hz下产生500 ms的噪声,频率分布平坦在0.1 - 640 Hz之间,并且正态分布的振幅值?

请参阅下面的屏幕截图,了解所需输出的说明。

Timeplot of waveform, frequency distribution, and histogram of amplitudes

1 个答案:

答案 0 :(得分:0)

你问题的参数使答案变得微不足道:

  • 640 Hz恰好是1280 Hz的一半,因此这是傅里叶分解中的最高频率(奈奎斯特);
  • 0.1 Hz低于1 / 500ms = 2Hz,这是傅里叶分解的频率分辨率,因此是您可以控制的最低正频率。

所以在你的情况下,"带限制"约束是微不足道的,您可以使用以下方法生成所需的噪声:

duration  = 500e-3;
rate      = 1280;
amplitude = 500;

npoints   = duration * rate;
noise     = amplitude * randn( 1, npoints ); % normally distributed white noise
time      = (0:npoints-1) / rate;
然而,更一般地,在特定频带中产生具有对频谱形状(例如平坦)和值统计(例如,正态分布)的约束的噪声可能是困难的。我能想到两个简单的近似值:

  • 在时域中工作,首先通过从选择分布中提取来对值统计执行约束,然后使用带通FIR滤波器对结果信号进行滤波。对于此近似值,请注意过滤器也会影响值的分布,因此除非您非常仔细地设计过滤器,否则通常会很难满足对值统计的约束。
  • 从傅立叶域向后工作,首先对幅度系数实施约束,为相位取随机噪声,并使用逆变换返回时域。对于这种近似,请注意相位分布将以非平凡的方式影响值的时间分布,具体取决于幅度约束,如果您的采样率远大于频率截止,则可能需要对谐波实施约束振幅也是为了避免人工制品。