对信号(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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。