用python生成由白噪声滤波生成,在250~1kHz间为等能量,而在1~6kHz间每倍频程递减12dB的噪声音频
时间: 2023-06-25 14:08:02 浏览: 102
您可以使用Python中的NumPy和SciPy库来生成此类噪声信号。下面是一个示例代码,生成您所需的噪声信号:
```python
import numpy as np
from scipy import signal
# 设置采样率和信号时长
fs = 44100
duration = 5
# 生成白噪声信号
white_noise = np.random.randn(duration * fs)
# 设计1~6kHz带通滤波器
bp_filter = signal.iirfilter(4, [1000, 6000], rs=12, btype='bandpass', fs=fs)
# 过滤白噪声信号
bp_noise = signal.filtfilt(bp_filter[0], bp_filter[1], white_noise)
# 设计250~1kHz带通滤波器
lp_filter = signal.iirfilter(4, 1000, btype='lowpass', fs=fs)
hp_filter = signal.iirfilter(4, 250, btype='highpass', fs=fs)
# 过滤白噪声信号
lp_noise = signal.filtfilt(lp_filter[0], lp_filter[1], white_noise)
hp_noise = signal.filtfilt(hp_filter[0], hp_filter[1], lp_noise)
# 将1~6kHz的信号逐步降低每倍频程12dB
freqs = np.linspace(1000, 6000, 41)
for i in range(1, len(freqs)):
lp_filter = signal.iirfilter(4, [freqs[i-1], freqs[i]], rs=12, btype='bandpass', fs=fs)
bp_noise = signal.filtfilt(lp_filter[0], lp_filter[1], bp_noise)
bp_noise *= 10**(-12/20)
# 将两个信号合并
noise = np.concatenate((hp_noise, bp_noise))
# 将信号归一化到[-1, 1]范围内
noise /= np.max(np.abs(noise))
# 将信号保存为.wav格式
from scipy.io import wavfile
wavfile.write('noise.wav', fs, (noise * 32767).astype(np.int16))
```
这个代码将生成一个长度为5秒、采样率为44100Hz的噪声信号,其中250~1kHz部分为等能量,1~6kHz部分每倍频程递减12dB。您可以根据需要更改信号时长和采样率,并将噪声信号保存为.wav文件。
阅读全文