对信号(CSV文件)添加不同分贝的高斯白噪声python


前言

添加高斯白噪声。


一、代码

假设你的原始信号是一个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操作方便。

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

粒子白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值