在学习信号处理的时候,线性预测是一个比较难理解的知识点,为了加快很多朋友的理解,这里给出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. 【转载】Linux下各文件夹的含义和用途

    原文地址:https://www.cnblogs.com/lanqingzhou/p/8037269.html Linux下各文件夹的含义和用途 Linux根目录”/“下各个系统文件夹的含义和用途 1 ...

  2. PAT-day1

    1001 害死人不偿命的(3n+1)猜想 (15 分)   卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 ( 3n+1)砍掉一半.这样一直 ...

  3. JS数组reduce()方法

    1.语法 arr.reduce(callback,[initialValue]) reduce 为数组中的每一个元素依次执行回调函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:初始值(或者上 ...

  4. [备忘]git常用命令

    网站有点儿久没有维护(因为去做其他事情了呗),现在空下来,回来改了网站的一些东西,却忘记了git的一些常用的命令,于是便写下这篇文,方便查阅,免得每次都去看手册(毕竟我懒啊!!) 检查当前文件状态:g ...

  5. python文件头的含义

    一.指定解释器及其路径 在Linux\Mac上,可以用./文件路径直接运行.py文件 这时,需要在python文件开头指定解释器及其路径 #!/usr/bin/python 这样系统就直接按pytho ...

  6. C写的AES(ECB/PKCS5Padding)

    摘自POLARSSL #pragma once #define AES_ENCRYPT 1 #define AES_DECRYPT 0 struct aes_context { int nr; /*! ...

  7. 【DIP Learining MFC &OpenCV】 Experience by 20171026

    This day saw the progress I achieved in creating a fusion of MFC frame and OpenCV code as well as so ...

  8. 如何应对SHA-1加密算法升级为SHA-256

    经过权威机构证实,sha1加密算法的不安全性越来越高,sha指纹造假成本越来越低,随即微软.谷歌等IT巨头相继发布弃用sha1加密算法声明,第三方认证机构自2016年1月1日起,将全面停止签发SHA1 ...

  9. Tensorflow人工智能入门(一)

    前言: 作为一个程序员,已经离开开发岗好多年,最近突然迷茫了,不知道自己何去何从.互联网技术发展的速度已快得难以想象,许久不码代码的手也越来越僵直,需求沟通中的套话和空话却越发的熟练,这和当年入行时的 ...

  10. Spring MVC-表单(Form)标签-文件上传(File Upload)示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_upload.htm 说明:示例基于Spring MVC 4.1.6. 以下示例显 ...