在学习信号处理的时候,线性预测是一个比较难理解的知识点,为了加快很多朋友的理解,这里给出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. HDU_1698_Just a Hook_线段树区间更新

    Just a Hook Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  2. Shell脚本备份数据库

    使用crontab 定时备份数据库 1. 编辑crontab 规则,定时执行脚本 2. 在my.cnf 文件中加 [mysqldump] user=root password=密码 3.编写shell ...

  3. Vue.js:使用vue-cli快速构建项目

    vue-cli是什么? vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. vue-cli怎么使用? 安装vue-cli之前,需要先安装了vue和webpack,不知道怎么安 ...

  4. 1.4.1 安装Python扩展库

    Python之所以得到各行业领域工程师.策划师以及管理人员的青睐,与涉及各行业各领域开发的扩展库也有很大关系,不仅数量众多.功能强大,关键是用起来很方便.虽然Python标准库已经拥有了非常强大的功能 ...

  5. JavaScript单元测试工具-Jest

    标注: 首先这并不是一篇完整的关于Jest的教程,只是个人在接触jest学习的一点随手笔记,大部分内容都是对官方文档的一些翻译. ----------------------------------- ...

  6. mysql 数据的某个范围数据

    select * from table_name where limit num1, num2; num1 : 开始条目 num2 :选择数目

  7. centos7.0_redhat7.0安装vncserver和Desktop桌面

    http://blog.51cto.com/gushiren/1681616 https://blog.csdn.net/techsupporter/article/details/50628399

  8. Spell checker POJ 1035 字符串

    Spell checker Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 25426   Accepted: 9300 De ...

  9. [bzoj1468][poj1741]Tree_点分治

    Tree bzoj-1468 poj-1741 题目大意:给你一颗n个点的树,求树上所有路径边权和不大于m的路径条数. 注释:$1\le n\le 4\cdot 10^4$,$1\le m \le 1 ...

  10. poj 1635

    有根树同构.参考论文<hash在....> #include <iostream> #include <fstream> #include <algorith ...