一文理清信噪比及其应用,包含:公式与相关链接
定义
信噪比的计量单位是dB,其计算方法是10lg(Ps/Pn),其中Ps和Pn分别代表信号和噪声的有效功率,也可以换算成电压幅值的比率关系:20Lg(Vs/Vn),Vs和Vn分别代表信号和噪声电压的“有效值”。在音频放大器中,我们希望的是该放大器除了放大信号外,不应该添加任何其它额外的东西。因此,信噪比应该越高越好。
狭义来讲是指放大器的输出信号的功率与同时输出的噪声功率的比,常常用分贝数表示,设备的信噪比越高表明它产生的噪声越少。一般来说,信噪比越大,说明混在其中的有价值的信号含量越高,声音回放的音质量越高,否则相反。信噪比一般不应该低于70dB,高保真音箱的信噪比应达到110dB以上。
节选自:信噪比定义–百度百科
公式
这里的公式显示了,如何制作指定信噪比的噪声。
这里的公式显示了,电压比率与功率比例之间的关系。图片来源: 信噪比定义的详细描述
python 写matlab中的加性高斯白噪声AWGN
#####################################
# 制作含有指定SNR的高斯白噪声信号
#####################################
SNR = 10
def wgn(x, snr):
snr = 10**(snr/10.0)
xpower = np.sum(x**2)/len(x)
npower = xpower / snr
return np.random.randn(len(x)) * np.sqrt(npower)
#定义10db信噪比的噪声
noise = wgn(signal, SNR) #噪声长度跟信号长度一致
思考为什么大家都在研究高斯白噪声?
为何深度学习去噪研究采用高斯白噪声?——>知乎大佬回答
其实可以直接总结为:高斯噪音可能算是最好的对真实噪音的模拟。
心电研究常用噪声数据库
做心电研究常用的噪声数据库——>MIT-BIH Noise Stress Test Database
这个数据库的噪声包含三种:
这个数据库的噪声是怎样加入的呢?(其实不用管,但是如果你好奇,那就研究这篇官方文档——>Namenst - noise stress test for ECG analysis programs )
经常见到wfdb中,通过nst添加噪声,怎样添加的呢?这里有源码指路——>>nst: Noise stress test
Copyright © 1983-2009 George B. Moody
python合成指定信噪比 (NSTDB)
#####################################
# 制作含有指定SNR的NSTDB信号
#####################################
def gen_noise(signal,SNR):
"""
:param signal: 原始信号
:param SNR: 添加噪声的信噪比
:return: 生成的噪声
"""
noise = Noise_signals[20000:22000, 0] #取第一通道,前2000点。
noise=noise-np.mean(noise) #减去噪声均值
signal_power=(1/signal.shape[0])*np.sum(np.power(signal,2))
noise_variance=signal_power/np.power(10,(SNR/10))
print('噪声系数是:' + str(np.sqrt(noise_variance)/np.std(noise)))
noise=(np.sqrt(noise_variance)/np.std(noise))*noise
return noise
效果如上图所示
去噪
一般自定义一些去噪方法,再将两种去噪前后的信号对比,以评估去噪方法的有效性。
这里推荐python-scipy 生成巴特沃斯带通滤波器
以及小波变换 python MITBIH数据库 基线漂移去噪
评估方法
一般选用的参数有
COS_SIM,MSE,PRD,MAD…
公开资料很多,这里不再赘述
心电信号去噪的论文推荐
有数据了之后做点什么研究?
推荐参考这篇文章:——>DeepFilter: An ECG baseline wander removal filter using deep learning techniques
加入高斯白噪声之后的图例:
借鉴以下博文:
https://blog.csdn.net/yyhaohaoxuexi/article/details/88350343