DSP
半截木头渡海洋
高出着眼,低处着手
展开
-
几个定/浮点数相互转换的例子
32位系统中,浮点数包括单精度浮点数float(一般情况下双字节,64位系统中4字节)和双精度浮点数double(一般情况下四个字节,64位系统中8字节);浮点数的最高位是s位(符号位),1表示负号,0表示正号;符号位后面紧跟着一定长度的(单精度情况下半个字节或一个字节)指数位,指数位的大小指定了小数点的位置;剩余的位置是尾数位,尾数位中存放小数点移动后的结果。如浮点数:-11.0 写成二进制之后是1(符号)1011,这样为了将这个结果11011存放到float中,需要先对11011进行预处原创 2020-05-25 15:15:41 · 2336 阅读 · 0 评论 -
卷积与圆周卷积
关于卷积的两种手算方法见链接matlab中fft函数是对序列做DFT,第二个参数是采样点的数量,当缺省时,默认为输入信号序列的长度;当大于信号序列的长度时候,对输入序列后面补零计算,频域信号的分辨率因此而变细,但是这时候的分辨率是伪分辨率。设定信号序列s1,length(s1) = 9s1 = [1,7,8,9,5,4,6,3,2]调用fft函数,对s1进行傅里叶变换plo...原创 2018-07-25 10:57:30 · 8763 阅读 · 0 评论 -
matlab自带的VAD检测程序
在matlab的DSP工具箱中,自带了VAD程序,本文主要记录如何使用这个程序。clear allclose allclc%% 设置音频源,读入一个speaker.wav文件,并对读入的文件进行分帧,每帧80个采样点audioSource = dsp.AudioFileReader('SamplesPerFrame',80,... ...原创 2018-07-31 14:50:39 · 6770 阅读 · 6 评论 -
采样率转换理论基础
离散信号重采样(采样率转换)通常有两种实现办法1】一种是通过DA转换成模拟信号然后再通过AD重新对模拟信号进行采样2】一种是通过插值的办法在对输入信号进行插值或者抽取的方式,完成纯数字域的采样率转换本文主要记录第二种方法1.通过插值公式实现对原始信号的重构观察以上公式,gt函数中sin(pi*t/T)的周期为1/2*Fx=1/(2T),即gt频率是原信号采样频率的1/2...原创 2018-08-10 17:23:39 · 10032 阅读 · 3 评论 -
将一个序列分解成奇偶序列的组合
clcclear allclose all%% original sequencet = -10:1:10;hn1 = cos(2*pi*0.1*t);hnf1 = fliplr(hn1);hn2 = sin(2*pi*0.1*t);hnf2 = fliplr(hn2);hn3 = (hn1 + hn2)/2;hnf3 = fliplr(hn3);%%...原创 2018-08-27 10:48:35 · 5251 阅读 · 0 评论 -
卷积的两种手算方法
会了第二种卷积手算方法,可以递推圆周卷积方法,原理是一样的的,只是延时变成了循环。同理的根据相关性的定义,将其中一个序列反向,然后按照本文这种方法进行求解,就是手算序列相关性了。对如下x、y两个序列进行卷积计算,根据定义可以知道卷积结果长度为 5首先,看第一种计算方法,根据定义式先将y序列翻转,然后逐位相乘第二种方法相对来说比较简单,转到z域后,卷积变为多项式相乘...原创 2018-08-27 11:00:25 · 47512 阅读 · 2 评论 -
高斯分布估计子的性能与克拉默劳下界的讨论
本文演示估计子的定义以及评估方法% 假设一个N长度的高斯随机过程x,按照平均数u、方差a分布,然后根据随机过程估计他的均% 值u1,并对评估的有效性进行检验clcclear close all%% 生成一个随机变量,并将统计结果与概率密度函数做对比N = 10;u = 2.5;a = 0.8;xrandom = random('norm',u,a,1,N);xaxi...原创 2018-09-12 11:27:49 · 1530 阅读 · 0 评论 -
通过放置零极点设计滤波器
用取Z变换在单位圆上界面就是傅里叶变换的思想,通过放置零极点位置设计滤波器。传输函数0Hz位置的放大倍数通过zp2tf的第三个参数k设置,对应增益20*log10(k)。我在验证的过程中发现bode指令绘制波特图时候是针对的H(jw)频率特性方程的,通常用来计算由微分方程变换而来的的传输函数的幅频特性,如电路传输方程的写法Ls、 1/Cs 、R等,其中s = δ + jw,δ = 0时即傅里叶...原创 2018-10-26 15:37:53 · 8110 阅读 · 3 评论 -
数字滤波器的设计问题
IIR滤波器还是FIR滤波器?1】当需要线性相位(h(n)关于M/2对称或反对称,M是滤波器长度)时候,考虑FIR滤波器2】不需要线性相位时候,优先选择IIR滤波器;IIR滤波器有更短低的旁瓣非因果滤波器系统不具有物理可实现性1】∫ln(|H(w)|)dw<∞,那么系统就是因果的(帕雷-维纳定理)2】在时域内,如果h(n) = 0,当n<0时候,系统就是因果的以...原创 2018-11-05 18:23:51 · 903 阅读 · 0 评论 -
webRTC AEC 添加舒适噪声算法
webRTC的舒适噪声实际上就是,一个随机噪声经过同一帧消回声输出NLP参数的加权处理产生的噪声。如果是32K信号,则对产生的高频段随机噪声统一加权,加权值是同一帧消回声输出NLP参数的平均值。static void ComfortNoise(AecCore* aec, float efw[2][PART_LEN1], ...原创 2018-07-17 15:48:12 · 2934 阅读 · 1 评论 -
webRTC AEC 非线性滤波处理算法
先把代码贴上,有空时候回来注释static void NonLinearProcessing(AecCore* aec, short* output, short* outputH) { float efw[2][PART_LEN1], dfw[2][PART_LEN1], xfw[2][PART_LEN1]; complex_t comfortNoiseHband[PART_LEN...原创 2018-07-17 15:06:27 · 4619 阅读 · 4 评论 -
自适应滤波收敛特性求解
clcclear allclose alln=500;Sspk=zeros(1,n)';e=zeros(1,n); % 用于存放误差e1=zeros(1,n); % 用于存放实际回声与合成回声之间的误差ep=zeros(1,n); % 用于存放五十次运算累积的误差w=randn(1,n)'; % 产生一个随机信号用作参考,然后用x来拟合这个信号,并用前两个点初始化滤波器第...原创 2018-06-03 21:12:15 · 2014 阅读 · 0 评论 -
webRTC降噪(NS)、自动增益控制(AGC)模块的编译与测试
本博客记录webRTC中降噪(NS)模块的编译与测试过程获取NS功能、测试代码以及测试语音文件,点击链接使用VS2015打开方案文件并生成在VS右侧资源管理器中,右键选择生成在debug文件夹中生成结果文件将“byby_8K_1C_16bit.pcm”、“lhydd_1C_16bit_32K.pcm”复制到和WebRtcAudioTest.exe文件统一个路径下执行WebRtcAudioTest....原创 2018-06-07 15:57:32 · 6570 阅读 · 3 评论 -
在linux系统上实现实时AEC功能
我们从今天起,开始做一个实时的回声消除应用。这个应用的工作环境描述如下:1】linux系统中2】系统通过电脑的喇叭播放音乐3】在播放音乐过程中打开录音功能进行录音我们的应用的目标:1】录音要求输出两个基本的音频文件:录音过程中喇叭的音频、MIC拾到的声音(说话声+喇叭回声)2】对MIC的拾到的声音进行回声消除处理,输出回声消除后的音频文件...原创 2018-06-14 16:21:57 · 2209 阅读 · 2 评论 -
webRTC AEC 滤波器的自适应
权值更新就是使用SSE指令集加速完成NLMS算法的频域计算,具体实现细节见代码注释。static void FilterAdaptationSSE2(AecCore* aec, float* fft, float ef[2][PART_LEN1]) { in...原创 2018-07-17 13:56:44 · 1495 阅读 · 0 评论 -
webRTC AEC 归一化误差信号
因为误差信号的大小变化差异较大,不便于设置门限阈值,因此将误差信号e对远端信号x进行归一化,便于对与阈值比较。static void ScaleErrorSignalSSE2(AecCore* aec, float ef[2][PART_LEN1]) { // extern __m128 _mm_set_ps1(float _W); //返回一个__m128的寄存器,Sets the f...原创 2018-07-17 14:01:38 · 1056 阅读 · 0 评论 -
webRTC AEC 远场滤波器
最后几句代码将远场经过滤波之后加到了传入的yf(合成回声信号)中,但是在调用本滤波器之前已经将yf全部设置为0了,因此输出的合成回声信号就是滤波器的输出。static void FilterFarSSE2(AecCore* aec, float yf[2][PART_LEN1]) { int i; // 设置分块数 const int num_partitions = aec-&...原创 2018-07-17 14:04:37 · 853 阅读 · 0 评论 -
webRTC AEC 发散处理与抑制算法
所谓发散问题就是在自适应滤波的过程中出现了权值不收敛的问题,一般是由于参考信号与近场数据时间点没有对齐引起的。当滤波器的权值不收敛的时候,自适应滤波器就不能正常的跟踪参考信号产生正确的的合成回声,以至于无法完成回声消除的功能,甚至自适应滤波器会产生一些乱七八糟的信号,淹没近端信号或产生音爆。综上,回声消除过程中要对回声消除的残差进行监控,如果残差信号的能量超过了近场信号的数据,就说明出现了发散...原创 2018-07-17 14:08:25 · 2193 阅读 · 4 评论 -
脉冲响应不变法将模拟滤波器转换成为数字滤波器的套路
已知一个模拟滤波器系统,要将此模拟滤波器系统转换成为数字滤波器,方法会有很多种,在Matlab中也有专门的函数(impinvar 脉冲响应不变)来实现此功能,如果我们要自己编写算法来做这个过程的话可以考虑使用脉冲响应不变法来实现跟impinvar函数相同的效果。脉冲响应不变的原理1】对模拟滤波器进行拉普拉斯逆变换理论依据是:对传输系统的单位冲击响应求拉普拉斯变换得到的结果就是传输系统的...原创 2018-01-11 11:20:48 · 11497 阅读 · 0 评论