自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 如何定时运行anconda下的python程序

anaconda是python的一个集成管理工具,可以很方便的解决多版本python并存和切换的问题,因此,在运行python程序时我选择了安装anconda,创建新的环境(可根据正在进行的项目命名,方便切换选择),下载所需的python版本,使用spyder打开程序运行调试。第二行:找到anaconda prompt(anaconda3),右键点击属性,在打开的内容中,将目标后面的内容替换call 后面的代码。第一行:路径中有中文,需要添加,编码方式的原因。④设置运行的程序,即添加所编写的脚本。

2023-04-28 11:15:23 696 1

原创 git的基本原理

刚刚接触到git和github,整理一部分相关原理帮助自己理解git命令和本地-远程的操作。我们将这部分学习分为三部分:(1)本地仓库相关操作(2)远程仓库相关操作(3)本地-远程交互操作本地仓库相关操作:1、当我们下载git 后,打开git bash,通过git clone将远端创建的仓库复制到本地,此时一个本地仓库创建完成。此时,在本地将有一个.git的文件夹形成,里面包含多个文件,其中查看几个文件中的内容可以帮助我们理解git的一些命令,如objects中为存储的blob对象,里面包含对应每次操

2022-04-20 08:08:16 2006

原创 FIR和IIR数字滤波器比较

滤波器可分为两种,IIR(无限冲激响应)滤波器和FIR(有限冲激响应)滤波器。FIR和IIR滤波器的不同:1、FIR滤波器的冲激响应在有限时间内衰减为0,输出仅取决于当前和过去的输入信号值,在Z域上其极点位置只能是原点,而IIR滤波器的冲激响应会无限持续,输出不仅取决于当前和过去的输入信号,还和过去的输出有关,IIR的极点可以处于单位圆内任何地方。2、设计同样参数的滤波器,FIR要比IIR需要更多的参数,也就是在处理时需要更长的时间去计算,实时性差一些。3、FIR具有线性相位,IIR不具有,非线性相位是

2022-04-16 21:50:48 13069

原创 git相关命令汇总

第一次操作git时使用到的git命令如下:git clone http://~~~:拷贝一个git到本地仓库在本地仓库的文件夹内的空白处,git bash,进入到主分支中。git branch -vv :查看当前的本地分支和远程分支的关联关系。git pull:从远程获取代码并合并本地的版本。git branch branchname :创建分支git checkout branchname:切换分支git checkout -b branchname:创建并切换分支git status:查

2022-04-14 21:55:42 305

原创 数字滤波器之高通滤波器设计

要求:设计一款高通滤波器,用在音频信号处理过程中,滤掉100Hz以下的信号。实现方法:通过在Z平面放置零极点的来设计数字滤波器。设计要点:单位圆上对应于需要加强频率的点附近放置极点,即w=π处附近落极点,需要拉低的频点附近放置零点,即w=0处附近落零点。为了滤波器的稳定,所有极点必须在单位圆内,而零点可以在任何位置。为了使滤波器系数是实数,所有的复数值的极点和零点必须以共轭的形式出现。滤波器在Z域与零极点相关的表达式如下:...

2022-04-14 21:45:23 8181

原创 基于C的音频文件的分帧加窗以及数据恢复

要求:按照行业内常用的分帧设置(帧长320,帧移160)进行分帧后,使用汉明窗,之后将数据通过重叠相加进行数据恢复,对比原文件与恢复后文件语谱图是否一致。此次编写过程中遇到了以下几个问题:1、之前编写代码时,为了容易理清逻辑,尤其是数组的操作,在有多步数据传递时会声明多个数组,这样编写降低了代码的可读性,因此在声明数组的时候除了in_array[]和out_array[]之外,可定义tmp_array[]存放过程数据,尽量减少数组的数量。2、此次使用的是汉明窗,对于320个点的汉明窗是固定的一条曲线,

2022-04-06 10:12:56 771 1

原创 语音识别之语音特征提取一

语音识别的第一步就是语音特征提取,语音信号是在人体中肺、喉、声道等器官构成的语音产生系统中产生的,它是一个高度不平稳的信号,它的幅度谱和功率谱也随着时间不停的变化,但是在足够短的时间内,其频谱特征相当平稳,因此在进行语音分析时,我们多采用分帧的方式进行短时分析,查看多篇文章中,使用帧长为25ms,帧移为10ms的方式进行分帧,并且计算出每帧内的功率谱进行其他的操作。功率谱在一些特征提取技术中得到应用,比如MFCC、Fbank,查询多篇文章,了解了几种被广泛应用个的特征提取技术,他们的特性不同也就决定了他们有

2022-04-03 10:29:35 5733

原创 基于C的VAD实现一

VAD(VoiceActivityDetection)语音活动检测,作用是从一段语音中,识别出语音片段和非语音片段。比如在语音增强中谱减法,我们我们通过将带噪信号频谱减掉噪声信号频谱得到希望的语音信号,那么噪声信号的获得我们就可通过VAD来获取。VAD可通过提取语音信号的多个特性进行判断来设计,一般来说取的特征越多,vad越精细。现在设计一款已被广泛应用方法,仅取语音信号的两个特征。这两个特征是短时能量和过零率。1、短时能量,即每帧语音信号的能量,之前程序中已实现过。2、过零率:即每帧语音信号中,信号

2022-04-01 07:24:25 680

原创 基于C读取PCM音频文件后进行平滑能量计算

要求:在分帧后平均能量计算出来的基础上作平滑计算,分别计算窗口为10、50、100帧的平滑能量。滑动平均又称移动平均,通过顺序逐期增减新旧数据求算移动平均值,借以消除偶然变动因素,找到事物发展趋势,并据此进行预测。相当于一个滤波器。实现方法:设计要点:1、此次程序是在之前求得每帧平均能量的代码上做更改。在读取PCM文件并分帧结束计算各帧能量后开始进行本次的设计。2、将得到的帧能量按照上图实现方法中的循环方法放入到长度为10(或50或100)的数组中,对数组中数据进行加和求平均,即可得到平滑能量。

2022-03-30 17:19:41 3568

原创 基于C读取PCM音频文件后计算分帧平均能量

要求:按照帧长160,帧移80的分帧设置读取pcm音频文件后,计算每帧的平均能量,并保存到txt数据中。通常在处理分帧文件后,并不会将每帧数据中的各数据均罗列出来,因为这将导致数据量太大,因此可以使用平均能量评估分帧后数据。实现公式:sum((array[i])^2)/160。设计要点:1、由于需要求出能量,short型数据平方后溢出,需进行short-float转换,转换后数据存放在float类型的数组中。2、结构体中增加了数组,在VS2008中,对数组不能够使用array[160]={0}来初

2022-03-30 16:38:54 1062

原创 基于C的分帧操作

memcpy:帧长160点,重叠率0.5=帧移80,意味着每一帧的数据中有80个点是新的,80个点是历史数据,这样就可以先声明一个160长度的数组,然后把数组的每一个元素初始化为0,然后每次读取文件的时候读80个点,放在数组的后80个位置,等到读取下一组数据的时候先将后面的80个点memcpy到前面80个存储位置当作历史数据,然后再新读取的80个点放在后80个点的位置作为新数据,这样就完成了每一帧数据的读取与更新。最后将每一帧读取到的数据打印到一个txt文件中验证一下。...

2022-03-28 22:14:58 1010

原创 基于C的PCM文件的能量求解

计算PCM音频的文件的能量,并存储到txt中。本次代码编写首次尝试使用了结构体,运用还不熟练,还有对指针的使用也不熟练,需多加练习。此次练习要点如下:1、对于变量、指针、地址的关系,编写以下代码:int a = 25 ;int *p = &a; printf("%d",a); // 25 printf("%d",&a); //2227592 printf("%d",p); //2227592 printf("%d",*p); //25运行结果显示

2022-03-26 21:21:31 351

原创 oceanaudio基本功能学习

oceanaudio常用于对音频文件的生成、分析。可以直接拖住需分析文件到软件中打开。打开后页面如下:下面将对工具栏中常用操作进行分析:1、文件下拉菜单:(1)新建一个新音频:包含以下信息,如之前练习中使用的是16KHz采样率,16位分辨率的单声道和立体声。(2)克隆:复制一个内容相同的文件,可用于双声道或多声道分析,也可在此文件中做调整后与原文件进行对比。2、编辑下拉菜单()...

2022-03-26 20:40:44 1908

原创 对内存、字节、地址、指针的认识

1、字节与内存的关系:字节byte是cpu处理字长能力的一个单位。内存memory address是cpu在寻址过程中能够访问到的物理或者逻辑内存的位置。在C++中,字节作为单位,可以数量化表示内存地址的值。字节是内存容量单位。计算机只能识别1,0,那么1,0就存储在bit中,而1字节=8bit。我们常用到的不同数据类型所占的字节数,如short-2,int-4,float-4,double-8,char-1,bool-1.那么short就是16bit。那么比如一个short 25,是如何存储的,shor

2022-03-26 20:38:58 3194 1

原创 基于C的PCM音频数据的读取、处理与写入(二)

1、后续使用fopen_s替代fopen,增强安全性,多了溢出检测,成功则返回0,失败返回非0。其调用格式为:errno_t fopen_s( FILE** pFile, const char *filename, const char *mode );其中errno_t就是int,一般使用方法如下:int err = 0;err =fopen_s(&input_file_ptr,"origin_audio.pcm","rb"); if (0 != err) { return -1;

2022-03-23 21:25:07 2014

原创 基于C的双声道PCM文件数据处理

本次练习要求:将单声道origin_audio.pcm音频文件存入到双声道two_channel_audio.pcm的左声道中,将音量调节后的文件存入到右声道中。如何将数据分别存储到左、右声道中,首先要了解16位双声道PCM数据的存储格式,如下:左声道低字节-左声道高字节-右声道低字节-右声道高字节…,因此构成双通道时先以2个字节写入左声道内容以构成左声道的数据,再以2个字节写入右声道内容以构成右声道数据。以下为不同声道PCM的数据存储格式:本次code将fopen替换为fopen_s代码实现

2022-03-23 17:11:30 1310

原创 基于C的PCM音频数据的读取、处理与写入(一)

PCM音频数据,是模拟音频信号经过数模转换后直接形成的二进制序列,是一种罕见的音频文件格式,因此在对pcm文件进行读写的时候,要选用以二进制的形式打开。此次读写的PCM文件,单声道,采样率是16KHz,分辨率是16位,也就是2个字节的长度。在程序编写之前,要考虑一个问题,pcm文件内的数据为short型,我们调整音量倍数可能是float型,因此两者相乘后值为float型,若强行进行取整运算,则会对数据产生较大影响,即引入了较大噪声,因此我们通过以下流程进行实现:short_in→float_in→flo

2022-03-22 20:28:31 4392

原创 本周小结(一)

本周进行了VS C++的学习:VS下如何创建项目,文件printf、fprintf、scanffor循环,if语句指针、数组fopen、fopen_s、fseek、fread功能函数文件之间的调用除了学会上述内容,还有一些知识点需要补充:魔法数,hard Word,数组与指针,变量的作用域,结构体,单步调试。魔法数:魔法数是指在代码中突然出现的数字,只有在分析其出现的那部分代码后才能了解其含义,降低了代码的可读性,应予以优化。如i<100,100的含义不明确,可优化为array

2022-03-20 21:22:43 1038

原创 如何调用其他.C文件中的函数

在后续的功能实现过程中,会进行许多项的功能实现,此时若全部编写在main函数中,整篇代码将会长且乱,不易分析,不易查看,因此可以在源文件中新建文件存放这里功能,根据这些功能的命名就可以在调用时轻而易举的找到所需的文件。在新建这些源文件之前,还需先新建其相对应的头文件.h。在主函数中添加该头文件,即可进行该函数的调用。例如,创建一个test_add文件用来存放实现a+b和a*b功能的程序,其中头文件中按照防止重复定义的模板编写。test_add.h内容如下:#ifndef TEST_ADD_H#de

2022-03-19 22:01:32 8782

原创 在一个C文件里创建一个功能函数

本次学习内容为在一个文件里创建一个功能函数,需要实现该功能的地方就直接调用该函数,当然这个功能函数也可以创建在其他文件中,这是之后的学习内容。在这里将需要用到指针、地址的概念。指针也就是内存地址,指针变量是用来存放内存地址的变量,而不是值。因此当我们定义一个变量的时候,我们其实定义的是该变量指向的对象的首地址。例如:int i=0x12345678;int *p=&i ;printf("%d",i);打印结果为:0x12345678;printf("%d",&i);打印结果为:

2022-03-19 21:35:46 687

原创 C++读取打印txt文件中的数据(三)

要求:输入长度为100,内容0-99的数组到txt中,并每次以5为步进,长度为10打印出来。此次程序再次使用fseek和fread语句,并与for循环结合起来。将0-99输出到txt文件中,使用fopen打开后,先使用fread读取长度为10的数据,再使用循环,更改到fseek的当前位置,此时offset设置为-5.以上这种分帧的方法并不实用,后续继续学习其他方式。代码如下:#include<stdio.h>#include<stdlib.h>int main(){

2022-03-17 21:54:37 1375

原创 C++读取打印txt文件中的数据(二)

要求:将长度为100,内容为0-99的数组输出到txt文件中后,使用fseek和fread逐一读取并打印出里面的内容。这与上一个程序(全部读出后打印)中的不同点在于:起始点位置不同:上一个程序的起始点为开始的位置,使用SEEK_SET,而这个程序的起始点可以为任何一个当前位置,使用SEEK_CUR。fseek有以下三种形式:最后的设置分别的文件开头,当前位置和文件末尾,第一种情况适用于上一次程序,而第二种情况适用于此次程序。fseek(fp,offset,SEEK_SET):fseek(fp,o

2022-03-17 21:39:23 1282

原创 C++读取txt文件中的数据(一)

要求:将0-99存储到txt中,之后全部读取出来,并且打印出来。在此次代码实现过程中,遇到以下问题:将0-99存入到txt后,#include<stdio.h>#include<stdlib.h>int main(){ int i,j,k; char buffer[190]; FILE *fp; fp = fopen("file.txt","w+"); int array1[100]; for(i=0;i&

2022-03-16 21:05:05 3509

原创 将C++运行结果保存到txt中

C++运行完成后,有时需要将结果保存在类似txt等的文档中,以便于后续查看或调用,那如何实现那?可以选用fopen函数,如下:FILE * fp;fp = fopen ("file.txt", "w+");fprintf(fp,"%c\n",Helloworld);fclose(fp);fopen的定义为fopen ( “filename”, “mode” );mode:w+(write/update: 为输入和输出创建一个空文件,如果文件已存在,则将已有文件内容舍弃,按照空文件对待。)按

2022-03-15 22:05:12 9727 2

原创 创建一个长度为100的数组,存储0~99,逐一判断数组内元素是否为5的倍数,打印出来。

代码编写要点:int,char的使用for循环(左闭右开,从0开始计数,和数组的开始地址相对应)数组的定义和赋值printf函数的使用(int ~ %d;char ~ %c;换行 ~ \n)养成规范书写的习惯(1、换下一行后,正确使用Tab进行字节的缩进。2、for、if等语句后花括号不需隔行。)int main() { int i,j; char Y='Y'; char N='N'; int array1[100]; for(i=0;i<100;i++) { ar

2022-03-14 21:53:15 1153

原创 VS 2008(C++)输出Helloworld

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar

2022-03-13 22:07:41 1516

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除