Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确模拟录音中的对讲机/无线电噪音,并在Python中添加干净的音频_Python_Python 3.x_Signal Processing_Waveform_Pydub - Fatal编程技术网

如何正确模拟录音中的对讲机/无线电噪音,并在Python中添加干净的音频

如何正确模拟录音中的对讲机/无线电噪音,并在Python中添加干净的音频,python,python-3.x,signal-processing,waveform,pydub,Python,Python 3.x,Signal Processing,Waveform,Pydub,我有一大堆音频文件,它们都是来自美国的无线电通讯。我的目的是模拟来自这些类型音频(比如飞机、调幅收音机等)的通信背景噪声,并将其应用于干净的数据 我最初的想法是分析这些嘈杂的音频文件,找到它们的标准偏差,然后应用高斯白噪声,所有文件的平均标准偏差(它们都相对相似,平均值接近0)。然而,可能有更多的事情要考虑,因为我所看到的干净的音频是在不同的音量等。用这个当前尝试在随机文件和应用到一个干净的语音文件,白噪声大量淹没干净的讲话。如何模拟文件中的噪声并将其应用于其他数据 我确保所有文件都是.wav格

我有一大堆音频文件,它们都是来自美国的无线电通讯。我的目的是模拟来自这些类型音频(比如飞机、调幅收音机等)的通信背景噪声,并将其应用于干净的数据

我最初的想法是分析这些嘈杂的音频文件,找到它们的标准偏差,然后应用高斯白噪声,所有文件的平均标准偏差(它们都相对相似,平均值接近0)。然而,可能有更多的事情要考虑,因为我所看到的干净的音频是在不同的音量等。用这个当前尝试在随机文件和应用到一个干净的语音文件,白噪声大量淹没干净的讲话。如何模拟文件中的噪声并将其应用于其他数据

我确保所有文件都是.wav格式,帧速率为16000 khz。我附上了一些伪代码,我试图做这样的事情,但我正在寻找其他的想法/事情要考虑。
import numpy as np
import matplotlib.pyplot as plt
import wave
from pydub import AudioSegment, effects
from Pathlib import Path

# get lists of standard deviations and means for all noisy radio-comms files
std_devs = []

for file in Path(audio_files_dir).iterdir():
    audio = AudioSegment.from_file(file)
    audio = audio.set_frame_rate(16000)
    print(file)
    print(audio.frame_rate)
    samples = audio.get_array_of_samples() # sample's amplitudes
    samples = np.array(samples) # cast to numpy array
    std_dev_samples = np.std(samples) # get std_dev of the samples
    std_devs.append(std_dev_samples)
    means.append(mean_samples)


# mean of all standard deviations, will use this to create white noise
print(sum(std_devs) / len(std_devs))
avg_std_devs = sum(std_devs) / len(std_devs)

# taking a clean audio file and prepping it for adding white noise
audio_signal_pydub = AudioSegment.from_file(audio_file_path)
samples = audio_signal_pydub.get_array_of_samples() # take audio signal and turn it into an array of amplitudes
samples = np.array(samples) # turn it into numpy array
print(samples.shape)


# plotting for pydub
time = np.linspace(0, audio_signal_pydub.duration_seconds, num = len(samples)) # create time for x axis in seconds
plt.figure(1)
plt.title("Plot with pydub")
plt.plot(time, samples)
plt.show()


noise = np.random.normal(0, avg_std_devs, samples.shape) # array of white noise with std dev equal to average of the several ATC files
signal_w_noise = samples + noise
plt.figure(1)
plt.title("Plot signal with gaussian white noise")
plt.plot(time, signal_w_noise)
plt.show()

# turn the signal with noise array back into an audio segment for export
new_audio_segment = audio_signal_pydub._spawn(data = signal_w_noise)
print(new_audio_segment)

new_audio_segment.export(r"new_audio.wav", format = 'wav')