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 signal
    RMS_s=math.sqrt(np.mean(signal**2))
    #RMS values of noise
    RMS_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=RMS
    STD_n=RMS_n
    noise=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 noise
    RMS_n=math.sqrt(RMS_s**2/(pow(10,SNR/10)))
    
    #current RMS of noise
    RMS_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+noise


print("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 subprocess
	
	command = (
	    "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、实际完成的任务

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[递归回溯枚举] 装载问题

装载问题 题目描述 有一批共 n 个集装箱要装上 2 艘载重量分别为 c1和 c2的轮船,其中集装箱 i 的重量为 wi,且 装载问题要求确定,是否有一个合理的装在方案可将这 n 个集装箱装上这 2 艘轮船。如果有,找出最优装载方案。 关于输…

14 Arbitration in sequencer(仲裁)

uvm_sequencer 有一个内置机制,可以在sequencer上同时运行的sequence中进行仲裁。基于仲裁算法,sequencer将得到仲裁权的sequence的sequence_item发送到driver。 每个sequence发送的sequence_items也有自己的id来区别于其他sequence。 要设置特定的仲裁…

Apipost-Helper使用流程

Apipost-Helper是由Apipost推出的IDEA插件,写完接口可以进行快速调试,且支持搜索接口、根据method跳转接口,还支持生成标准的API文档,注意:这些操作都可以在代码编辑器内独立完成,非常好用!这里…

JavaWeb——监听器Listener 过滤器Filter——韩顺平学习笔记

文章目录 JavaWeb 三大组件之监听器 ListenerListenerJavaWeb 的监听器ServletContextListener 监听器ServletContextAttributeListener 监听器其它监听器-使用较少HttpSessionListener 监听器HttpSessionAttributeListener 监听器ServletRequestListener 监听器ServletRequest…

泰迪智能科技分享:AI大模型发展趋势分析

大规模预训练语言模型,也被称为“大模型”或“基座模型”,其特点在于拥有巨大的参数量,构成了复杂的人工神经网络模型。大模型具有规模性(参数量大)、涌现性(产生预料之外的新能力)以及通用性&a…

uni-app condition启动模式配置

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

Java EE 网络原理之HTTP 响应详解

文章目录 1. 认识"状态码"(status code)2. 通过 form 表单构造 HTTP 请求3. 通过 ajax 构造 HTTP 请求 1. 认识"状态码"(status code) 表示了这次请求对应的响应,是什么样的状态 (成功,失败,其他的情况&…

Graph Transformer2023最新研究成果汇总,附15篇必看论文

图Transformer是一种结合了Transformer模型和图神经网络(GNN)的框架,用于在图形结构数据上执行预测任务。在图Transformer中,Transformer的自注意力机制被用来学习节点之间的关系,而GNN则被用来生成节点的嵌入表示。通…

数据结构与算法(C语言版)P10——图

1、图的基本概念和术语 前面学过: 线性是一对一树形是一对多 而今天要学习的图形结构是多对多。 图的定义: G(V,E) V:顶点(数据元素)的__有穷非空__集合。E:边的有穷集合。 __有向图:__每条边都是有方向的 __无…

【linux】touch的基本使用

碎碎念 刚接触linux时候的几个最基础的命令之一,用来创建文件。如果使用touch --help的时候会发现作者对于touch的简介:Update the access and modification times of each FILE to the current time.用于修改文件的访问和时间戳 带我的leader属于那种…

rsync的介绍与使用

rsync的介绍与使用 一、简介 rsync(remote synchronize)是Liunx/Unix下的一个远程数据同步工具。它能够以非常高效的方式传输和同步文件,它可以将一个目录的文件快速地同步到另一个目录,还可以通过网络快速同步多台主机间的文件…

使用Python Flask搭建一个简单的Web站点并发布到公网上访问

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架,让我们可以使用Python语言快速实现一个网站或Web服务,本期教程…

springBoot整合redis做缓存

一、Redis介绍 Redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于MySQL的二维表格的形式存储。)。和Memcache类似,但很大程度补偿了Memcache的不足。和Memcache一样,R…

TDengine 公布 2023 年发展“成绩”,六大亮点引人瞩目

今天,我们进行了 2023 年重大成就和发展成绩盘点,主要归纳为产品创新、市场发展、开源社区、生态建设、活动布道与奖项荣誉六大维度。在元旦前夕,我们也想把这份“2023 年成绩单”分享给所有关注 TDengine 的朋友们。 在今年,最值…

你好!Apache Seata

北京时间 2023 年 10 月 29 日,分布式事务开源项目 Seata 正式通过 Apache 基金会的投票决议,以全票通过的优秀表现正式成为 Apache 孵化器项目! 根据 Apache 基金会邮件列表显示,在包含 13 个约束性投票 (binding votes) 和 6 个…

百分点科技成为中国“数据要素×”生态合作伙伴

12月24日,由中国经济体制改革研究会、中国电子、郑州市人民政府、中国经济改革研究基金会联合主办的中国“数据要素”生态大会在郑州召开,百分点科技受邀出席,并获颁中国“数据要素x”2024年度生态伙伴合作证书。 大会邀请了国家数据局党组成…

华天动力OA TemplateService 任意文件读取漏洞复现

0x01 产品简介 华天动力OA是一款将先进的管理思想、 管理模式和软件技术、网络技术相结合,为用户提供了低成本、 高效能的协同办公和管理平台。 0x02 漏洞概述 华天动力OA TemplateService接口处存在任意文件读取漏洞,未经身份认证的攻击者可利用此漏洞…

边缘计算网关:在智慧储能系统中做好储能通信管家

背景 目前储能系统主要由储能单元和监控与调度管理单元组成,储能单元包含储能电池组(BA)、电池管理系统(BMS)、储能变流器(PCS)等;监控与调度管理单元包括中央控制系统(MGCC)、能量管理系统(EMS)等。 2021年8月,国家发改委发布《电化学储能…

axios配置请求头content-type 和 get/post请求方式

axios配置请求头content-type https://blog.csdn.net/wojiushiwo945you/article/details/107653962 axios 是Ajax的一个插件,axios虽然是一个插件,但是我们不需要通过Vue.use(axios)来使用,下载完成后,只需在项目中引入即可。(一…

Frappe Charts:数据可视化的强大工具

一、产品简介: 一个简单、零依赖、响应式的 开源SVG 图表库。这个图表库无论是数据更新还是屏幕大小变化,都能快速响应并更新图表。数据生成和悬停查看都有舒服的交互动效,体验感很好。不仅支持配置颜色,外观定制也很方便。还支持…