对信号(CSV文件)添加不同分贝的高斯白噪声python
2024-01-09 16:38:46
前言
添加高斯白噪声。
一、代码
假设你的原始信号是一个csv文件,只有一列信号数据。现在要对这个信号添加不同分贝的高斯白噪声。代码如下:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 读取CSV文件
df = pd.read_csv('./hello/hello.csv', header=None)
# 获取第一列的值作为信号
signal = df.iloc[:, 0].values
# 计算原始信号的统计信息
original_max = np.max(signal)
original_min = np.min(signal)
original_mean = np.mean(signal)
print(f"Original Signal - Max: {original_max}, Min: {original_min}, Mean: {original_mean}")
# 计算信号的平均功率
signal_power = np.mean(signal**2)
# 目标噪声水平列表(分贝)
target_dBs = [20,16,14,12,10,8,4,2,0,-2,-4]
# 准备一个DataFrame来存储所有噪声信号
noisy_signals_df = pd.DataFrame()
# 显示原始信号的前4096个数据点的波形图
plt.figure(figsize=(10, 2))
plt.plot(signal[:4096], label='Original Signal')
plt.title('Original Signal Waveform (First 4096 points)')
plt.xlabel('Sample Index')
plt.ylabel('Amplitude')
plt.legend()
plt.show()
# 生成不同分贝水平的噪声并输出统计信息
for target_dB in target_dBs:
# 计算噪声功率
noise_power = signal_power * 10**(target_dB / 10)
# 噪声的标准差是噪声功率的平方根
noise_std = np.sqrt(noise_power)
# 生成高斯白噪声
noise = np.random.normal(0, noise_std, signal.shape[0])
# 添加噪声到信号
noisy_signal = signal + noise
# 计算添加噪声后的信号的统计信息
noisy_max = np.max(noisy_signal)
noisy_min = np.min(noisy_signal)
noisy_mean = np.mean(noisy_signal)
print(f"Noisy Signal ({target_dB} dB) - Max: {noisy_max}, Min: {noisy_min}, Mean: {noisy_mean}")
# 将噪声信号添加到DataFrame
noisy_signals_df[f'signal_{target_dB}dB'] = noisy_signal
# 显示添加噪声后的信号的前4096个数据点的波形图
plt.figure(figsize=(10, 2))
plt.plot(noisy_signal[:4096], label=f'Noisy Signal {target_dB}dB')
plt.title(f'Noisy Signal Waveform at {target_dB}dB (First 4096 points)')
plt.xlabel('Sample Index')
plt.ylabel('Amplitude')
plt.legend()
plt.show()
# 将包含所有噪声信号的DataFrame保存到新的CSV文件
noisy_signals_df.to_csv('./OK/OK+noisy.csv', index=False)
二、代码
总结
用matlab操作方便。
文章来源:https://blog.csdn.net/linmuquan1989/article/details/135409137
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!