自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (2)
  • 收藏
  • 关注

转载 贝叶斯公式的直观理解(先验概率/后验概率)

前言  以前在许学习贝叶斯方法的时候一直不得要领,什么先验概率,什么后验概率,完全是跟想象脱节的东西,今天在听喜马拉雅的音频的时候突然领悟到,贝叶斯老人家当时想到这么一种理论前提可能也是基于一种人的直觉.先验概率:是指根据以往经验和分析得到的概率.[1]  意思是说我们人有一个常识,比如骰子,我们都知道概率是1/6,而且无数次重复实验也表明是这个数,这是一种我们人的常识,也是我们在不知道任何情况下...

2018-05-28 10:49:04 474

转载 Matlab中filter和conv函数的区别

在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积。(1)即y=filter(p,d,x)用来实现差分方程,d表示差分方程输出y的系数,p表示输入x的系数,而x表示输入序列。输出结果长度数等于x的长度。实现差分方程,先从简单的说起:filter([1,2],1,[1,2,3,4,5]),实现y[k]=x[k]+2*x[k-1]...

2018-04-22 10:18:05 10398

原创 AEC的周边问题

1.      VAD(VoiceActivity Detection)检测:远端语音判断对于AEC的更新保护是很重要的。(1)      远端没有声音时,近端也就不需要回声抵消。远端和近端的背景噪声不一定相关,这个时候如果迭代更新滤波器,就会使得滤波器偏离系统的传递函数,甚至导致发散。(2)      在做滤波器的更新保护时,首先要判别远端是否有语音。(3)      多数语音检测是根据信号的能...

2018-04-09 20:52:02 856

原创 数字信号处理第二章:Z变换及离散时间系统系统分析

参考书:《数字信号处理-理论、算法与实现》第二版 胡广书 清华大学出版社1. Z变换的定义1)Z变换的定义方法    a)直接定义:X(z) = ∑x(n)(z的-n次幂),求和时n范围为负正无穷    b)抽样信号的拉普拉斯变化过渡到Z变换:r = exp(σTs),w = ΩTs,z = rexp(jw)2)拉普拉斯复变量s与Z变换复变量z之间的映射规律    a)

2017-08-29 22:14:07 4256

原创 数字信号处理第一章:离散时间信号与离散时间系统

参考书:《数字信号处理-理论、算法与实现》第二版 胡广书 清华大学出版社1. 离散时间信号的基本概念1) 离散信号概述    a)连续时间信号x(t) -->离散时间信号 x(nTs) -->离散时间序列x(n)-->离散信号(数字信号)    b)用有限位的数字信号表示无限精度的模拟信号,带来量化误差2)典型离散信号    a)单位抽样信号

2017-08-29 09:59:28 2891

原创 汇编中定义数组与变量

汇编这样可以直接读写内存的程序也需要用到变量。但它不像其它高级语言那样把变量分成许多类型,它是按照变量的长度来区分的,所以定义(define)变量时就用5个不同的关键字:DB,DW,DD,DQ,DT(事实上常用的只有DB,DW)DB(DEFINE BYTE)即定义的变量占一个字节的长度(也可以说把定义的变量值放入一个字节的内存空间)如:a DB 7h ;意思是将7h放入内存的某一个字节

2015-11-30 22:15:59 28799 4

原创 同步函数,静态同步函数,同步代码块

线程安全问题    当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,    另一个线程参与进来执行。导致共享数据的错误。解决办法:    对多条操作共享数据的语句,只能让一个线程都执行完。在执行过程中,其他线程不可以参与执行。Java对于多线程的安全问题提供了专业的解决方式。就是同步代码块。synchronized(

2015-11-28 22:17:48 601

原创 关于int main(int argc,char*argv[])的玩意

intmain(intargc,char*argv[])这个main函数,短短几行代码就让我眼前一亮,看到了它的使用效果。这个函数是直接和终端联系起来的。终端对于玩linux的人来说再熟悉不过了,只要在终端执行命令就可以玩转计算机,可见他的强大,也类似于windows下的dos。     这个函

2015-11-17 21:51:33 444

原创 小议String、StringBuffer与StringBuilder之间区别

最近学习到StringBuffer,心中有好些疑问,搜索了一些关于String,StringBuffer,StringBuilder的东西,现在整理一下。关于这三个类在字符串处理中的位置不言而喻,那么他们到底有什么优缺点,到底什么时候该用谁呢?下面我们从以下几点说明一下  1.三者在执行速度方面的比较:StringBuilder >  StringBuffer  >  String

2015-11-12 22:51:26 333

原创 Java.lang.Character类学习

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。   通过上述的问题来学习下Character类。Character将一个char基本数据类型封装在类中。这个类中只有一char类型的变量。Character是基于unicode码进行的Character所有的方法,都是围绕着这个char基本数据类型的值进行操作的。 [java] view

2015-11-12 22:14:11 3914

原创 sleep()、wait()、yield()、join()方法 解析

一 java多线程机制JAVA多线程机制有两种实现方式:第一种:  继承Thread类, 实现run()方法.第二种: 实现Runnable接口.      实例代码:      第一种:                 public class OntThread extends Thread {       public static

2015-10-30 23:08:23 404

转载 Linux wait函数解析2

进程一旦调用了 wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程,wait 就会收集这个子进程的信息, 并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。wait(等待子进程中断或结束)相关函数 waitpid,fork表头文件#include#i

2015-10-30 23:06:55 327

原创 主线程和子线程的同步控制

一个线程的结束有两种途径,一种是象我们下面的例子一样,函数结束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit来实现。另外需要说明的是,一个线程不能被多个线程等待,也就是说对一个线程只能调用一次pthread_join,否则只有一个能正确返回,其他的将返回ESRCH 错误。在Linux中,默认情况下是在一个线程被创建后,必须使用此函数对创建的线程进行资源回收,但是可以设

2015-10-30 23:04:37 818

翻译 linux中wait系统调用1

系统中的僵尸进程都要由wait系统调用来回收,下面就通过实战看一看wait的具体用法:wait的函数原型是:#include /* 提供类型pid_t的定义 */#include pid_t wait(int *status);进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经 退出,如果让它找到了这样一个已经变成僵尸的

2015-10-30 12:37:06 398

转载 JAVA使用JDBC连接数据库SQL Server2012

要在JAVA中使用JDBC连接SQL Server2012数据库需要如下三个大的步骤:一、设置SQL Server2012的身份验证方式为混合模式如果不知道如何设置,请见博文:http://blog.sina.com.cn/s/blog_6ca0f5eb0102v09z.html二、启动telnet服务如果不知道如何启动该服务,请见博文http://blog

2015-08-14 12:10:59 1644

原创 递归实现字符串全排列

#include     int Swap(char *a,char *b)  {      char c;      c = *a;      *a = *b;      *b = c;  }    /*  * 递归思想实现全排列  * 对abc进行全排列,那么可以看做:ab的全排列+c和ac的全排列+b和bc的全排列+a三个的组合  */  

2015-02-24 13:38:05 365

转载 递归思想

编程里面估计最让人摸不着头脑的基本算法就是递归了。很多时候我们看明白一个复杂的递归都有点费时间,尤其对模型所描述的问题概念不清的时候,想要自己设计一个递归那么就更是有难度了。今天我也花费了半个小时来搞明白二叉树的平衡性的递归模型,首先我不明白什么叫做平衡性,所以花费的时候大部分实在试探理解平衡性的含义。在搞明白的时候,我突然想到假如让我来设计,在我知道平衡性的前提下,我是否可以建立如此简洁的递归模

2015-02-24 13:29:42 325

转载 C语言文件操作函数大全(课时7)

C语言文件操作函数大全clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值   fclose(关闭文件) 相关函数 close,fflush,fopen,setbuf

2015-02-24 13:21:36 338

转载 C++:引用与指针的区别(课时6)

温故而知新,指针和引用的概念,大学时都已熟知,实际用的时候往往又有些疑惑,故深入探究一下。从概念上讲。指针从本质上讲就是存放变量地址的一个变量,在逻辑上是独立的,它可以被改变,包括其所指向的地址的改变和其指向的地址中所存放的数据的改变。而引用是一个别名,它在逻辑上不是独立的,它的存在具有依附性,所以引用必须在一开始就被初始化,而且其引用的对象在其整个生命周期中是不能被改变的

2015-02-24 13:18:56 267

转载 C语言--链表基本操作(课时5)

链表是最简单的一种数据结构,是每个软件开发者必须掌握的,也是企业招聘时最常考的内容,因此,在这里总结一下单链表的一些基本操作。注:这里是单向无环链表,头结点中存放了数据,换句话说就是头结点和其他结点没什么区别,你也可以说成不带头结点的链表。下面就是链表操作的源代码:#include #include typedef struct Node{    int dat

2015-02-24 13:15:25 385

原创 数组应用--查找(课时3)

1.①顺序查找法(在一列数中查找某数x)  基本思想:一列数放在数组a[1]---a[n]中,待查找的数放在x中,把x与a数组中的元素从头到尾一一进行比较查找。用变量p表示a数组元素下标,p初值为1,使x与a[p]比较,如果x不等于a[p],则使 p=p+1,不断重复这个过程;一旦x等于a[p]则退出循环;另外,如果p大于数组长度,循环也应该停止。(这个过程可由下语句实现) voi

2015-02-24 13:12:08 282

原创 数组应用--常用排序(课时2)

1.选择法排序(升序)  基本思想: 1)对有n个数的序列(存放在数组a(n)中),从中选出最小的数,与第1个数交换位置; 2)除第1 个数外,其余n-1个数中选最小的数,与第2个数交换位置; 3)依次类推,选择了n-1次后,这个数列已按升序排列。程序代码如下: void main() { int i,j,imin,s,a[10]; printf("/n inp

2015-02-24 13:08:57 500

转载 C语言:常用算法

一、计数、求和、求阶乘等简单算法  此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。  例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。  本题使用数组来处理,用数组a[100]存放产生的确100个随机整数,数组x[1

2015-02-23 22:07:23 344

转载 C语言:深入理解C语言指针的奥秘

指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。   先声明几个指针放着做例子:   例一:   (1)int*ptr;   (2)char*ptr;   (3)int**ptr;   (4)int(*p

2015-02-23 11:23:01 350

转载 C语言:回车和换行的区别

/r /n区别/n 换行 将光标移动到下一行第一格 相当于平时用的回车 /r 回车 将光标移动到当前行第一格'/r'是回车,'/n'是换行,前者使光标到行首,后者使光标下移一格。通常用的Enter是两个加起来。下面转一篇文章。 回车和换行 今天,我总算搞清楚“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别了。 在计

2015-02-22 21:27:47 2362 2

转载 C语言:运算符优先级口诀

希望对初学C语言语言的同志有所帮助;当然,应用这个口诀的前提是你必须认识所有的C语言的运算符。      优先决括号成员第一;        //括号运算符[]() 成员运算符.  ->全体单目第二;        //所有的单目运算符比如++ -- +(正) -(负) 指针运算*&乘除余三,加减四;   //这个"余"是指取余运算即%移位五,关系六;    //移

2015-02-22 17:06:24 919

转载 C语言:复杂表达式的执行过程(课时1)

近日在CSDN上闲逛的时候,注意到一个帖子:  ((*strDest++=*strSrc++)!='\0'); 哪儿前辈可以解释下里面具体执行的步骤呢?  对于这样的表达式,我们通常会有这样三种看法:  1.这种写法不但没有错误(当然也没有BUG),而且写法紧凑。  2.这种写法虽然没有错误,但是不够直观,理解起来有点麻烦,可能还会导致理解错误。  3.这种

2015-02-22 16:15:29 551

原创 C语言:函数二维数组传递方法

c语言中经常需要通过函数传递二维数组,有三种方法可以实现,如下:方法一, 形参给出第二维的长度。例如:#include void func(int n, char  str[ ][5] ){ int i; for(i = 0; i   printf("/nstr[%d] = %s/n", i, str[i]);}void main(){

2015-02-22 16:10:01 533

原创 C语言重难点分析(一)

这篇文章主要是介绍一些在复习C语言的过程中笔者个人认为比较重点的地方,较好的掌握这些重点会使对C的运用更加得心应手。此外会包括一些细节、易错的地方。涉及的主要内容包括:变量的作用域和存储类别、函数、数组、字符串、指针、文件、链表等。一些最基本的概念在此就不多作解释了,仅希望能有只言片语给同是C语言初学者的学习和上机过程提供一点点的帮助。变量作用域和存储类别:了解了基本的变量类型后,

2015-02-22 12:02:14 551

原创 C语言:float和double类型的内存分布和比较

C/C++的浮点数据类型有float和double两种。 类型float大小为4字节,即32位,内存中的存储方式如下: 符号位(1 bit)指数(8 bit)尾数(23 bit)类型double大小为8字节,即64位,内存布局如下:符号位(1 bit)指数(11 bi

2015-02-15 10:58:58 861

原创 C语言:关于二维数组做形参

二维数组的存储方式是和一维数组没什么区别,但是用二维数组做参数,它的形参该怎样写?要注意的是:函数中的形参其实就相当于一个声明,并不产生内存分配,形参的目的就是要让编译器知道函数参数的数据类型。正确的是:void Func(int array[3][10]); void Func(int array[][10]);可以省略第一维的大小错误的是void Func(int arra

2015-02-15 10:57:04 5132

原创 C语言:关于实型精确度和取值范围的计算方法

实型存储分为三部分:符号部分,小数部分和阶数部分。其中小数部分表示精确程度,阶数部分表示大小。单精度规定用8位二进制表示阶数,即最大表示为2的128次方,把这个数算出来是3.4028236692093846346337460743177e+38双精度规定用11位二进制表示阶数,即最大表示为2的1024次方,结果是1.797693134862315907729305190789e+308

2015-02-12 17:46:33 4985

原创 C语言位运算符:与、或、异或、取反、左移和右移

C语言位运算符:与、或、异或、取反、左移和右移位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。C语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。C语言提供的位运算符列表:运算符 含义 描述& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0| 按位或

2015-02-12 12:10:27 547

原创 C语言:变量的数据类型

1. 基本数据类型:基本数据类型最主要的特点是,其值不可以再分解为其它类型。也就是说,基本数据类型是自我说明的。C语言中的三种基本数据类型是:整型 、实型 、字符型 和枚举型。每种类型又可以分为常量和变量。整型常量: (1) 十进制的整型常量:由数字0~9组成。如:0、10、365、-12等。(2) 八进制的整型常量:以0开头,由数字0~7组成。如:0、010、03

2015-02-09 15:37:02 928

转载 c语言二维数组与指针(课时4)

很多C++/C初学者对于二维数组与指针的关系总是搞不清楚,对它的误解比比皆是。一下是本人的一些总结,部分内容参考相关资料,希望对大家的理解有所帮助。(本文对于C/C++而言)首先,我们先从存储的角度对二维数组作一个全面的了解。二维数组在内存中的存储,是按照先行后列依次存放的。从内存的角度看,可以这样说,二维数组其实就是一个一维数组,在内存中没有二维的概念。如果把二维数组的每一行看成一个整体

2015-02-07 17:37:54 427

原创 C语言--行指针与列指针

行指针和列指针是我们在学习指针处理二维数组时遇到的知识难点。在这里我结合资料为大家做一些分析。首先数组的访问有三种形式:1)下标法;2)首地址法;3)指针变量法。这里我们先分析首地址法。假设有一个二维数组a[3][4],a就是首地址,他是一个指针是一个常量,指向第一个元素的地址,也就是指向第一行的首地址,是指首行一整行,并不是指某个具体元素。那么我们称之为“行指针”。同理:a+0,

2015-02-07 17:36:51 2238

转载 C语言:字符串赋值的方法

main() { char s[30]; strcpy(s, "Good News!"); /*给数组赋字符串*/ . . . } 上面程序在编译时, 遇到char s[30]这条语句时, 编译程序会在内存的某处留 出连续30个字节的区域, 并将第一个字节的地址赋给s。当遇到strcpy( strcpy 为 Turbo C2.0的函数)时, 首先在目标文件的

2015-01-29 10:31:29 62820 3

原创 C语言:字符串的初始化辨析

以下是常用的四种字符串初始化方法: (一)char str[10] = "HELLO";结尾会被编译器自动加上结尾符'/0',编译的时候可以看到它最后是'',ASC码值是0;"HELLO"只有5个字符,加上编译器自动添加的'/0',也就是会初始化数组的前6个元素,剩下有元素会被全部初始化为'/0',这个要注意哦(二)char str[]

2015-01-29 10:30:10 506

原创 rand()和srand()函数

srand 初始化随机种子,rand 产生随机数。rand函数头文件: 定义函数:int rand(void)函数功能:产生随机数函数说明:因为rand的内部实现是用线性同余法做的,他不是真的随机数,只不过是因为其周期特别长,所以,在一定的范围里可看成是随机的。rand()会返回一随机数值,范围在0至RAND_MAX 间。在调用此函数产生随机数前,必须先利用

2015-01-27 13:53:05 373

原创 与产生随机数相关的函数

例一:srand(time(NULL));rand() % 8;分析:(一)这是两个函数!一个是srand函数!这是在调用rand()这个函数之前使用的!rand()是一个产生随机数的函数!而srand是一个设置随机数种子的函数!通常这两个函数是一起使用的!来完成产生随机数的功能!而time(NULL)这个函数的返回值是作为srand函数的参数的!意思是以现在的系统时间作为

2015-01-27 13:43:57 383

AEC的周边问题

描述了AEC过程中的几个关键问题。1.VAD(Voice Activity Detection)检测:远端语音判断对于AEC的更新保护是很重要的。2. DTD(Double Talk Detection):双端讲话检测3. 后处理算法

2018-04-09

关于维纳滤波器的几段设计代码

关于维纳滤波器的几段设计代码,包括时域和频域的不同实现,还包括对真实语音的处理。

2018-03-07

空空如也

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

TA关注的人

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