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 …

VR室内设计仿真教学情景实训

在传统的室内设计教学中,学生往往只能通过想象和图纸来理解空间布局和设计理念。然而,VR技术的出现,使得这一切变得可能。学生可以通过VR设备,身临其境地感受空间布局,观察光线、色彩、材质等元素如何相互作用&#xf…

Unity中Shader 齐次坐标

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

确保RPA增效提速,这4大风险需注意

如今,已经有越来越多的企业选择实施RPA,将其看作是业务流程优化的利器。如何顺利实施RPA并获得最佳效果? RPA的应用案例,产品及服务遍布新零售、电商、物流、制造、医疗健康、基层政务、互联网教育、企业服务等行业,以…

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

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

linux调试笔记

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

跨域问题解决方案

何为跨域 跨域(Cross-Origin)指的是在浏览器中,当一个页面(或域)的 JavaScript 代码试图访问另一个域的资源时,浏览器会阻止该跨域请求。这是由于浏览器的同源策略(Same-Origin Policy&#xf…

LeetCode 2660. 保龄球游戏的获胜者:模拟

【LetMeFly】2660.保龄球游戏的获胜者:模拟 力扣题目链接:https://leetcode.cn/problems/determine-the-winner-of-a-bowling-game/ 给你两个下标从 0 开始的整数数组 player1 和 player2 ,分别表示玩家 1 和玩家 2 击中的瓶数。 保龄球比…

c++ - 函数的模板特化

目录 模板特化 全特化 偏特化 模板特化 模板进行特化 即: 在原模板类的基础上 ,针对特殊类型所进行特殊化的实现方式 。模板特化中分为函数模板特化 与 类模板特化 。 注意:以下示例均已日期类为例 class Date { public:Date(int year 1900…

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

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

Unity相机跟随角色移动

相机跟随角色移动 使用LateUpdate();方法,根据角色移动而进行跟随,固定角度,类似2.5D视角。 需要将相机放到一个空对象,将角度调节好,挂载组件,将角色对象放入组件中,调整moveTime设…

C++中pow函数功能是什么,如何使用?

在C中,pow函数的功能是计算一个数的幂。它接受两个参数,第一个参数是底数,第二个参数是指数。pow函数的定义如下: double pow(double base, double exponent);使用pow函数很简单,你只需要将底数和指数作为参数传递给函…

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 系统领域的分享! 本…

独立热编码和向量化

1、什么是 one-hot 编码 one-hot 编码用于将离散的分类标签转换为二进制向量。 注意这里有两个关键词,第一个是离散的分类,第二个是二进制向量。 具体过程: import pandas as pd from sklearn.preprocessing import OneHotEncoder # 创建…

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