在学习信号处理的时候,线性预测是一个比较难理解的知识点,为了加快很多朋友的理解,这里给出Levinson-Durbin算法的线性预测实现和一个测试Demo,Demo中很明确的把输入信号、预测信号、预测误差打印了出来,这样就能以最直观的方式,把线性预测的实现与作用展示出来。话不多说,直接上代码!

  

 typedef float OsFlt32;
typedef int  OsInt32; OsFlt32 lpc(const OsFlt32 *r,OsInt32 p,OsFlt32 *a)
{
OsInt32 i,j;
OsFlt32 err; if( == r[])
{
for(i = ; i < p; i++) a[i] = ;
return ;
}
a[] = 1.0;
err = r[];
for(i = ; i < p; i++)
{
OsFlt32 lambda = 0.0;
for(j = ; j <= i; j++)
lambda -= a[j]*r[i+-j];
lambda /= err;
// Update LPC coefficients and total error
for(j = ; j <= (i+)/; j++)
{
OsFlt32 temp = a[i+-j] + lambda * a[j];
a[j] = a[j] + lambda * a[i+-j];
a[i+-j] = temp;
}
err *= (1.0 - lambda*lambda);
}
return err;
} void autocorr(const OsFlt32 *x,OsInt32 n,OsFlt32 *r,OsInt32 k)
{
OsFlt32 d;
OsInt32 i,p; for(p = ; p <= k; p++)
{
for(i = ,d = 0.0; i < n-p; i++)
d += x[i] * x[i+p];
r[p] = d;
}
}
 #include "lpc.h"

 int main(int argc,char **argv)
{
OsInt32 nLen = ;
OsFlt32 *pOriginal,*pPredicted;
OsInt32 i,j;
const OsInt32 order = ;
OsFlt32 R[order+] = {0.0};
OsFlt32 A[order+] = {0.0};
OsFlt32 error; pOriginal = (OsFlt32*)calloc(nLen,sizeof(OsFlt32));
pPredicted = (OsFlt32*)calloc(nLen,sizeof(OsFlt32)); for(i = ; i < nLen; i++)
pOriginal[i] = sin(i*0.01) + 0.75 * sin(i*0.03) + 0.5 * sin(i*0.05) + 0.25 * sin(i*0.11); autocorr(pOriginal,nLen,R,order);
lpc(R,order,A); for(i = ; i <= order; i++)
A[i-] = A[i]; for(i = order; i < nLen; i++)
{
pPredicted[i] = 0.0;
for(j = ; j < order; j++)
pPredicted[i] -= A[j] * pOriginal[i--j];
} error = ;
for(i = order; i < nLen; i++)
{
double delta = pPredicted[i] - pOriginal[i];
printf( "Index: %.2d / Original: %.6f / Predicted: %.6f\n",i,pOriginal[i],pPredicted[i]);
error += delta * delta;
}
printf("Forward Linear Prediction Approximation Error: %f\n",error); free(pPredicted);
free(pOriginal);
return ;
}

线性预测与Levinson-Durbin算法实现的更多相关文章

  1. 倒谱(Cepstrum)和线性预测倒谱系数(LPCCs)

    倒谱是表示一帧语音数据特征的一个序列.从periodogram estimate of the power spectrum计算得到的倒谱系数,可以用于基音追踪(pitch tracking),然而, ...

  2. 现代数字信号处理——AR模型

    1. AR模型概念观       AR模型是一种线性预测,即已知N个数据,可由模型推出第N点前面或后面的数据(设推出P点),所以其本质类似于插值,其目的都是为了增加有效数据,只是AR模型是由N点递推, ...

  3. 常用数字信号的产生(C实现)-ARMA模型数据生成

    ARMA模型属于信号现代谱估计的范畴,AR模型常用于信号的线性预测.AR模型最后归结为线性方程,MA最后为非线性方程,因此,AR模型使用较多. AR模型最后归结为解Yule-Walker方程,对应矩阵 ...

  4. 目前所有的ANN神经网络算法大全

    http://blog.sina.com.cn/s/blog_98238f850102w7ik.html 目前所有的ANN神经网络算法大全 (2016-01-20 10:34:17) 转载▼ 标签: ...

  5. 【VS开发】【智能语音处理】DTW算法(语音识别)

    DTW主要是应用在孤立词识别的算法,用来识别一些特定的指令比较好用,这个算法是基于DP(动态规划)的算法基础上发展而来的.这里介绍语音识别就先介绍下语音识别的框架,首先我们要有一个比对的模版声音,然后 ...

  6. B树——算法导论(25)

    B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...

  7. 分布式系列文章——Paxos算法原理与推导

    Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...

  8. 【Machine Learning】KNN算法虹膜图片识别

    K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...

  9. 红黑树——算法导论(15)

    1. 什么是红黑树 (1) 简介     上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...

随机推荐

  1. centOS7创建python虚拟环境

    参考: 非常棒的2篇博客 https://www.centos.bz/2018/05/centos-7-4-%E5%AE%89%E8%A3%85python3%E5%8F%8A%E8%99%9A%E6 ...

  2. 阿里P8架构师详解Java性能调优策略

    一.性能测试 Ⅰ.测试方法 微基准性能测试 可以精准定位到某个模块或者某个方法的性能问题,例如对比一个方法使用同步实现和非同步实现的性能差异 宏基准性能测试 宏基准性能测试是一个综合测试,需要考虑到测 ...

  3. Java切换JDK版本的方法及技巧

    由于项目的不同安排,之前项目开发时,使用的jdk版本为1.8,现临时接手一以前项目,需要更换jdk版本. 安装 不再赘述,去Oracle网站(https://www.oracle.com/techne ...

  4. 通过JS唤醒app(安卓+ios)

    有需求说要通过页面按钮唤醒app,或者手机上没有这款app跳转到商店,然后刚开始也是查了资料的,结果发现一头雾水,不过最后还是捣鼓出来了,当然也参考了前人分享的经验,下面我就将方法整理一下: 首先明确 ...

  5. php中fopen不能创建中文文件名文件的问题

    之前网页的chartset用的是utf-8,文件也用utf-8,然后用fopen()创建一个中文文件名的文件时问题就出来了,文件名都是乱 码! 查看了很多文档试了不少方法都解决不了,本来想着用别的方法 ...

  6. 2018.03.04 晚上Atcoder比赛

    C - March Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement There are N  ...

  7. (C/C++学习)11.随机数组的快速查找

    说明:利用随机函数生成一个随机数组,然后对数组进行排列,再利用二分查找快速查找一个数. 一.生成随机数组 time_t ts; //等价于long ts; unsigned int num = tim ...

  8. Java 内存模型与线程

    when ? why ? how ? what ? 计算机的运行速度和它的存储和通信子系统速度的差距太大,大量的时间都花费在磁盘I/O .网络通信或者数据库访问上.如何把处理器的运算能力"压 ...

  9. Ubuntu网卡设置:配置/etc/netplan

    对于Ubuntu1804版本,经过测试如下配置可以设置静态IP地址: Google@ubuntu:~$ cat /etc/netplan/01-netcfg.yaml network: etherne ...

  10. Linux - redis哨兵集群实例

    目录 Linux - redis哨兵集群实例 命令整理 配置流程 Linux - redis哨兵集群实例 命令整理 官网地址:http://redisdoc.com/ redis-cli info # ...