2023年12月27日学习记录_加入噪声

目录

  • 1、今日计划学习内容
  • 2、今日学习内容
      • 1、add noise to audio clips
        • signal to noise ratio(SNR)
        • 加入 additive white gaussian noise(AWGN)
        • 加入 real world noises
      • 2、使用kaggel上的一个小demo:CNN模型
        • 运行时出现的问题
          • 调整采样率时出现bug
      • 3、明确90dB下能否声纹识别
      • 4、流量预测
  • 3、实际完成的任务

1、今日计划学习内容

  • 明确90dB下能否进行声纹识别
  • 流量预测模型对比学习
  • 学习时不玩手机 🤡

开始今日学习😄
在这里插入图片描述

2、今日学习内容

1、add noise to audio clips

学习如何将噪声加入到audio data中,后续可以将不同SNR的噪声加入原始信号样本,评估不同噪声条件下的模型性能
首先读取原始audio.wav(里面是一段话:“leave my dog alone”)

import librosa
signal, sr = librosa.load(“path/to/audio.wav”)

绘制信号图:

import matplotlib.pyplot as plt
plt.plot(signal)

在这里插入图片描述

signal to noise ratio(SNR)

在这里插入图片描述
RMS是均方根
计算信号的RMS:

import numpy as np
RMS=math.sqrt(np.mean(signal**2))

dB = 20 × log ⁡ 10 ( RMS ) \text{dB} = 20 \times \log_{10}(\text{RMS}) dB=20×log10(RMS)

加入 additive white gaussian noise(AWGN)
  1. how to generate AWGN

在这里插入图片描述
噪声是服从高斯分布,均值为0,标准差是 R M S n o i s e RMS_{noise} RMSnoise

noise=np.random.normal(0, STD_n, signal.shape[0])
# np.random.normal() 函数用于生成服从正态分布的随机数
# 生成一个形状与输入信号(signal)相同的数组,其中每个元素都服从均值为 0、方差为 STD_n 的正态分布。

生成的噪声图:
在这里插入图片描述
2. AWGN的频率分析
使用快速傅里叶变化来分析噪声的频率部分

X=np.fft.rfft(noise)
radius,angle=to_polar(X)

在这里插入图片描述
频率分布非常平稳,符合“白”的特征
3. 加入噪声

signal_noise = signal+noise

SNR=10dB
在这里插入图片描述
加入噪声的完整代码

#SNR in dB
#given a signal and desired SNR, this gives the required AWGN what should be added to the signal to get the desired SNR
def get_white_noise(signal,SNR) :#RMS value of signalRMS_s=math.sqrt(np.mean(signal**2))#RMS values of noiseRMS_n=math.sqrt(RMS_s**2/(pow(10,SNR/10)))#Additive white gausian noise. Thereore mean=0#Because sample length is large (typically > 40000)#we can use the population formula for standard daviation.#because mean=0 STD=RMSSTD_n=RMS_nnoise=np.random.normal(0, STD_n, signal.shape[0])return noise
#***convert complex np array to polar arrays (2 apprays; abs and angle)
def to_polar(complex_ar):return np.abs(complex_ar),np.angle(complex_ar)#**********************************
#*************add AWGN noise******
#**********************************
signal_file='/home/sleek_eagle/research/emotion/code/audio_processing/signal.wav'
signal, sr = librosa.load(signal_file)
signal=np.interp(signal, (signal.min(), signal.max()), (-1, 1))
noise=get_white_noise(signal,SNR=10)
#analyze the frequency components in the signal
X=np.fft.rfft(noise)
radius,angle=to_polar(X)
plt.plot(radius)
plt.xlabel("FFT coefficient")
plt.ylabel("Magnitude")
plt.show()
signal_noise=signal+noise
plt.plot(signal_noise)
plt.xlabel("Sample number")
plt.ylabel("Amplitude")
plt.show()
加入 real world noises

将有噪声的音频加入到原始音频中
我们需要计算原始音频的RMS和噪声音频的RMS,为了能得到规定的SNR,我们需要修改噪声的RMS值,办法就是将每个噪声元素都乘上一个常数,这样就能使得噪声的RMS值也乘上一个常数,达到需要的噪声RMS。
在这里插入图片描述
噪声音频(水流的声音):
在这里插入图片描述
加入噪声的音频:
To listen to the signal and noise I used and also to the noise-added audio files that were created by adding noise to the signal, go to

#given a signal, noise (audio) and desired SNR, this gives the noise (scaled version of noise input) that gives the desired SNR
def get_noise_from_sound(signal,noise,SNR):RMS_s=math.sqrt(np.mean(signal**2))#required RMS of noiseRMS_n=math.sqrt(RMS_s**2/(pow(10,SNR/10)))#current RMS of noiseRMS_n_current=math.sqrt(np.mean(noise**2))noise=noise*(RMS_n/RMS_n_current)return noise
#**********************************
#*************add real world noise******
#**********************************signal, sr = librosa.load(signal_file)
signal=np.interp(signal, (signal.min(), signal.max()), (-1, 1))
plt.plot(signal)
plt.xlabel("Sample number")
plt.ylabel("Signal amplitude")
plt.show()noise_file='/home/sleek_eagle/research/emotion/code/audio_processing/noise.wav'
noise, sr = librosa.load(noise_file)
noise=np.interp(noise, (noise.min(), noise.max()), (-1, 1))#crop noise if its longer than signal
#for this code len(noise) shold be greater than len(signal)
#it will not work otherwise!
if(len(noise)>len(signal)):noise=noise[0:len(signal)]noise=get_noise_from_sound(signal,noise,SNR=10)signal_noise=signal+noiseprint("SNR = " + str(20*np.log10(math.sqrt(np.mean(signal**2))/math.sqrt(np.mean(noise**2)))))plt.plot(signal_noise)
plt.xlabel("Sample number")
plt.ylabel("Amplitude")
plt.show()

参考链接:
click here

2、使用kaggel上的一个小demo:CNN模型

link here

运行时出现的问题
调整采样率时出现bug
  • 代码:
	import subprocesscommand = ("for dir in `ls -1 " + noise_path + "`; do ""for file in `ls -1 " + noise_path + "/$dir/*.wav`; do ""sample_rate=`ffprobe -hide_banner -loglevel panic -show_streams ""$file | grep sample_rate | cut -f2 -d=`; ""if [ $sample_rate -ne 16000 ]; then ""ffmpeg -hide_banner -loglevel panic -y ""-i $file -ar 16000 temp.wav; ""mv temp.wav $file; ""fi; done; done")subprocess.run(command, shell=True)
  • bug:

    2023-12-26 10:44:38.782251: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX2
    To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
    

作为一个纯小白,问题非常非常的多

  1. subprocess.run是在干嘛?通过 Python 来调用 Shell 脚本
  2. shell脚本是什么?Shell脚本是一种用于编写、执行和自动化操作系统命令和任务的脚本语言。它是一种解释性语言,常用于Unix、Linux和类Unix系统中。
  3. subprocess.run()函数:
  • 函数介绍:
subprocess.run(args, *, stdin=None, input=None, stdout=None, 
stderr=None, capture_output=False, shell=False, cwd=None, 
timeout=None, check=False, encoding=None, errors=None, text=None, 
env=None, universal_newlines=None)

别怕,这个run()函数很长、很长,但并不是所有都需要的,我们必要设置的只有第一项args,也就是shell命令
-args:args参数传入一个列表或者元组,如[‘ls’,‘-l’],python会自动拼接成shell命令.[第一个参数是执行的程序,其余的是参数];也可以直接就是一个str命令行,如果如果传入的是shell命令,则需要另外添加一个参数shell=True

  • 函数返回:class subprocess.CompletedProcess
    在这里插入图片描述
    实在是不知道怎么改这种代码了,我的选择是:换方法,直接使用别的方法实现重采样

3、明确90dB下能否声纹识别

论文:添加链接描述
在这里插入图片描述
-5dB就相当低了,感觉不大可能

4、流量预测

  • 代码链接:LTE Cell Traffic Grow and Congestion Forecasting
    没有给数据集

  • 后续学习链接:How to Use the TimeDistributed Layer in Keras

  • 后续学习方向:后续要保证每天一篇相关论文,先从有复现的论文读起,同时要对流量预测的模型进行学习,建模的时候学习pytorch库和keras库

3、实际完成的任务

  • 声纹识别增加噪声的学习
    在这里插入图片描述
    明天继续加油吧!
    有没有研究生学习搭子或者大佬呀呜呜呜呜
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/582640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【SD】IP-Adapter 进阶 - 同款人物【2】

测试模型:###最爱的模型\flat2DAnimerge_v30_2.safetensors [b2c93e7a89] 原图: 加入 control1 [IP-Adapter] 加入 control 2 [OpenPose] 通过openpose骨骼图修改人物动作。 加入 control 3 lineart 加入cotrol3 …

Unity中Shader 齐次坐标

文章目录 前言一、什么是齐次坐标二、齐次坐标增加分量 w 的意义1、当 w ≠ \neq  0时:2、当 w 0时:3、用方程组,直观的看一下w的意义 前言 在之前的文章中,我们进行了正交相机视图空间转化到裁剪空间的推导。 Unity中Shade…

三大强势大语言模型怎么选?看这篇文章就够了!

现在的人可以有多懒?啊,不,是多聪明?(毕竟人和动物的根本区别在于能否制造和使用工具。) 遇到任何事情,可以随时大小问。你甚至都不需要手动输入,因为语言输入已经帮你简化了这个步…

linux调试笔记

文章目录 基本启动调试与附加进程断点程序运行控制tui模式查看堆栈与变量监视变量多线程调试 扩展自定义跳转命令解析自定义类型禁用动态库自动加载设置源码路径断点时执行命令gdbserver远程调试 gdb脚本QtCreator调试Linux下处理编译、运行时的一些问题undefined symbol问题-n…

Android ImageView如何使用.svg格式图片

我们知道imageview常用的图片格式是.jpg/.png或者drawable里的部分.xml文件。但有时UI会给过来.svg格式的文件,下面讲解如何使用.svg格式图片文件 step1:AS点击File -> New -> Vector Asset step2:选中要使用的.svg文件,按需要命名和调整&#x…

Mysql For Navicate (老韩)

Navicate创建数据库 先创建一个数据库;然后在数据库中创建一张表;在表格当中填入相应的属性字段;打开表, 然后填入相应的实例字段; – 使用数据库图形化App和使用指令来进行操作各有各的好处和利弊; 数据库的三层结构(破除MySQL神秘) 所谓安装Mysql数据库, 就是在主机安装一…

231227-9步在RHEL8.8配置本地yum源仓库

Seciton 1:参考视频 RHEL8配置本地yum源仓库-安徽迪浮_哔哩哔哩_bilibili Seciton 2:具体操作 🎯 第1步:查看光驱文件/dev/sr0是否已经挂载?此处已挂在 [lgklocalhost ~]$ df -h 🎯 第1步:查看…

在处理金额时用long还是BigDecimal,所引发的讨论

亲爱的小伙伴们,由于微信公众号改版,打乱了发布时间,为了保证大家可以及时收到文章的推送,可以点击上方蓝字关注测试工程师成长之路,并设为星标就可以第一时间收到推送哦! 周末在闲逛的时候 无意间看到一个…

Vue3数据交互axios

我是南城余!阿里云开发者平台专家博士证书获得者! 欢迎关注我的博客!一同成长! 一名从事运维开发的worker,记录分享学习。 专注于AI,运维开发,windows Linux 系统领域的分享! 本…

自定义html5中日期选取器的样式

自定义html5中日期选取器的样式 1. 前言1.1 关于 h5 的新特性1.2 使用浏览器 2. html5中日期选取器默认样式3. 自定义日期样式3.1 简单定义3.2 花式样式定义 4. 改变日期格式5. 参考 1. 前言 1.1 关于 h5 的新特性 可看下面的文章 HTML5 新特性之HTML5 的输入(inpu…

设计模式(4)--对象行为(6)--备忘录

1. 意图 在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 这样以后可以将该对象恢复到原先保存的状态。 2. 三种角色 原发器(Originator)、备忘录(Memento)、负责人(Caretaker) 3. 优点 3.1 保持了封装边界。屏蔽了原发器的…

融汇贯通 —— 2023年技术与心灵的双重成长旅程

当我们站在2023年的岁末,回望这一年赋予我们的经历和挑战,心中涌动的感慨与启示像朝日初升的光芒,照亮脚下的路,亦照见心中的路。在此,我想分享几个方面的感悟和成长,愿它们能有所触动,成为您前…

一招搞定找不到vcruntime140_1.dll无法继续执行此代码

在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“无法加载某某.dll文件”。而其中一个常见的问题就是vcruntime140_1.dll丢失。那么,vcruntime140_1.dll到底是什么?为什么会出现丢失的情…

免费代理IP:如何获取?有什么风险?有什么性价比高的代理IP?

您可能已经知道,生活中没有什么是真正免费的。代理IP虽然用于保护隐私,但也有非常多代理都是免费的,这对于不想使用付费替代方案的用户来说是一个巨大的优势。在这篇博文中,我们将深入研究免费代理的细节,并评估这把双…

【快速全面掌握 WAMPServer】04.人生初体验

网管小贾 / sysadm.cc 我们在前面的教程中为小伙伴们详细地介绍了 WampServer 的安装方法,相信大家对于如何安装应该已经有了一个比较完全的掌握。 在完全掌握安装方法之后,我们还可以更加便捷地使用我为大家提供的一键安装批处理程序来快速搞定安装部署…

java设计模式学习之【迭代器模式】

文章目录 引言迭代器模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用迭代器示例代码地址 引言 想象一下,你在一个书店里浏览各种书籍。你可能会从头到尾查看每一本书,或者可能跳过一些不感兴趣的部分。在这个过程中,你实…

K8S 全局架构图 —— 筑梦之路

kube-apiserver: Kubernetes API 服务器验证并配置 API 对象的数据, 这些对象包括 pods、services、replicationcontrollers 等。API 服务器为 REST 操作提供服务,并为集群的共享状态提供前端, 所有其他组件都通过该前端进行交互。…

3DMAX 中的 VR 渲染器如何设置局部区域渲染?

3DMAX 中的 VR 渲染器如何设置局部渲染? 首先我们要得打开渲染设置,在3damx里按F10,调出渲染设置。选定渲染器为Vary渲染器: 设置VR的局部渲染,需要打开帧缓冲,我们在V-ary项下,打开帧缓冲(点击…

使用 uiautomatorviewer 获取元素的定位信息

1. 使用 adb 连接设备(真机或模拟器) 连接夜神模拟器:adb connect 127.0.0.1:62001 连接MuMu模拟器:adb connect 127.0.0.1:7555 2. 打开 uiautomatorviewer 在 android-sdk --> tools 目录,找到 uiautomatorviewer.bat,双击打开: 3. 连接指定的设备(以连接夜神…

使用cmake配置matplotlibcpp生成VS项目

https://gitee.com/feboreigns/matplotlibcpp 这篇文章需要一些cmake基础,python基础,visualstudio基础 准备环境 注意如果在VS平台使用必须要手动下载python,不能使用conda里面的,比如3.8版本,因为conda里面没有py…