如何生成具有平坦频谱的带限随机噪声?
How to generate band-limited random noise with flat spectrum?
如何生成以 1280 Hz 采样的 500 毫秒的噪声,具有 0.1 - 640 Hz 之间的平坦频率分布和正态分布的振幅值?
有关所需输出的说明,请参见下面的屏幕截图。
Timeplot of waveform, frequency distribution, and histogram of amplitudes
您问题的参数使答案变得微不足道:
- 640Hz恰好是1280Hz的一半,所以这是傅立叶分解中的最高频率(Nyquist);
- 0.1 Hz 远低于 1 / 500ms = 2Hz,这是傅里叶分解的频率分辨率,因此是您可以控制的最低正频率。
所以在你的情况下,"band-limited" 约束是微不足道的,你可以简单地生成所需的噪音:
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 滤波器等对生成的信号进行滤波。对于这个近似值,请注意过滤器也会影响值的分布,因此通常您对值统计的约束将很难得到满足,除非您非常仔细地设计过滤器。
- 从傅里叶域向后工作,首先对振幅系数施加约束,对相位取随机噪声,然后使用逆变换回到时域。对于这种近似,请注意相位分布将以非平凡的方式影响值的时间分布,具体取决于幅度约束,并且如果您的采样率远大于您的频率截止,您可能需要对谐波施加约束振幅也是为了避免伪影。
如何生成以 1280 Hz 采样的 500 毫秒的噪声,具有 0.1 - 640 Hz 之间的平坦频率分布和正态分布的振幅值?
有关所需输出的说明,请参见下面的屏幕截图。
Timeplot of waveform, frequency distribution, and histogram of amplitudes
您问题的参数使答案变得微不足道:
- 640Hz恰好是1280Hz的一半,所以这是傅立叶分解中的最高频率(Nyquist);
- 0.1 Hz 远低于 1 / 500ms = 2Hz,这是傅里叶分解的频率分辨率,因此是您可以控制的最低正频率。
所以在你的情况下,"band-limited" 约束是微不足道的,你可以简单地生成所需的噪音:
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 滤波器等对生成的信号进行滤波。对于这个近似值,请注意过滤器也会影响值的分布,因此通常您对值统计的约束将很难得到满足,除非您非常仔细地设计过滤器。
- 从傅里叶域向后工作,首先对振幅系数施加约束,对相位取随机噪声,然后使用逆变换回到时域。对于这种近似,请注意相位分布将以非平凡的方式影响值的时间分布,具体取决于幅度约束,并且如果您的采样率远大于您的频率截止,您可能需要对谐波施加约束振幅也是为了避免伪影。