<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<br>
<font face="Courier New">Dear All,<br>
<br>
Is there a script or function somewhere which calculates the
Linear prediction model (LPC) of a signal frame?<br>
<br>
I tried to implement a function (below) without using the
algorithm of Levinson & Durbin but it doesn't seem to work
properly. seemingly the problem is due to inaccuracy of the matrix
equation solution.<br>
<br>
Regards,<br>
<br>
Federico Miyara<br>
<br>
<br>
<br>
<br>
</font><br>
<pre style="font-family:Monospaced;font-style:normal;font-size:16.0;"><span style="color:rgb(176,24,19);">function</span> <span style="color:rgb(131,67,16);font-weight:bold;">a</span><span style="color:rgb(92,92,92);">=</span><span style="color:rgb(0,0,0);text-decoration:underline;">lpc</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(131,67,16);font-weight:bold;">x</span><span style="color:rgb(0,0,0);">, </span><span style="color:rgb(131,67,16);font-weight:bold;">p</span><span style="color:rgb(74,85,219);">)</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Calculation of the LPC coeficients</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Usage:</span>
<span style="color:rgb(100,174,100);font-style:italic;">// a = lpc(x, p)</span>
<span style="color:rgb(100,174,100);font-style:italic;">// where</span>
<span style="color:rgb(100,174,100);font-style:italic;">// x: Signal vector</span>
<span style="color:rgb(100,174,100);font-style:italic;">// p: Order of the linear prediction model</span>
<span style="color:rgb(100,174,100);font-style:italic;">// a: Coefficients of the linear prediction model</span>
<span style="color:rgb(100,174,100);font-style:italic;">//</span>
<span style="color:rgb(100,174,100);font-style:italic;">// The coefficients are computed so to get minimize the </span>
<span style="color:rgb(100,174,100);font-style:italic;">// prediction error by the least-square method</span>
<span style="color:rgb(100,174,100);font-style:italic;">//</span>
<span style="color:rgb(100,174,100);font-style:italic;">// ------------------------------</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Author: Federico Miyara</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Date: 20202-09-27</span>
<span style="color:rgb(160,32,240);">if</span> <span style="color:rgb(188,143,143);">1</span><span style="color:rgb(92,92,92);">==</span><span style="color:rgb(188,143,143);">2</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Test data --delete--</span>
<span style="color:rgb(100,174,100);font-style:italic;">// LPC order</span>
<span style="color:rgb(131,67,16);font-weight:bold;">p</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">10</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Signal length</span>
<span style="color:rgb(0,0,0);">N</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">512</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Create whiter noise</span>
<span style="color:rgb(50,185,185);">exec</span> <span style="color:rgb(188,143,143);">whitenoise.sci</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">y</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">whitenoise</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">2</span><span style="color:rgb(92,92,92);">*</span><span style="color:rgb(0,0,0);">N</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(0,0,0);">,</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Create a filter</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Create some poles within the unit circle for stability</span>
<span style="color:rgb(0,0,0);">pol</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">0.7</span> <span style="color:rgb(92,92,92);">+</span> <span style="color:rgb(218,112,214);">%i</span><span style="color:rgb(92,92,92);">*</span><span style="color:rgb(50,185,185);">linspace</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(188,143,143);">0.3</span><span style="color:rgb(0,0,0);">,</span><span style="color:rgb(188,143,143);">0.3</span><span style="color:rgb(0,0,0);">,</span><span style="color:rgb(188,143,143);">10</span><span style="color:rgb(74,85,219);">)</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Denominator polynomial in z</span>
<span style="color:rgb(0,0,0);">AAA</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(50,185,185);">real</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(50,185,185);">prod</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(218,112,214);">%z</span> <span style="color:rgb(92,92,92);">-</span> <span style="color:rgb(0,0,0);">pol</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Theoretical LPC coefficients</span>
<span style="color:rgb(0,0,0);">aa</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(92,92,92);">-</span><span style="color:rgb(50,185,185);">coeff</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">AAA</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(255,170,0);">$</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(74,85,219);">)</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Autorregressive (AR) transfer function</span>
<span style="color:rgb(0,0,0);">HH</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">1</span><span style="color:rgb(92,92,92);">/</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">1</span> <span style="color:rgb(92,92,92);">-</span> <span style="color:rgb(50,185,185);">sum</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">aa</span><span style="color:rgb(92,92,92);">.*</span><span style="color:rgb(218,112,214);">%z</span><span style="color:rgb(92,92,92);">^</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(131,67,16);font-weight:bold;">p</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Numerator and denominator </span>
<span style="color:rgb(0,0,0);">BB</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">HH</span><span style="color:rgb(92,92,92);">.</span><span style="color:rgb(170,170,170);">num</span>
<span style="color:rgb(0,0,0);">AA</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">HH</span><span style="color:rgb(92,92,92);">.</span><span style="color:rgb(170,170,170);">den</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Filter white noise</span>
<span style="color:rgb(131,67,16);font-weight:bold;">x</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(50,185,185);">filter</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">BB</span><span style="color:rgb(0,0,0);">,</span> <span style="color:rgb(0,0,0);">AA</span><span style="color:rgb(0,0,0);">,</span> <span style="color:rgb(0,0,0);">y</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(131,67,16);font-weight:bold;">x</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(131,67,16);font-weight:bold;">x</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">N</span><span style="color:rgb(92,92,92);">+</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(188,143,143);">2</span><span style="color:rgb(92,92,92);">*</span><span style="color:rgb(0,0,0);">N</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">plot</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(131,67,16);font-weight:bold;">x</span><span style="color:rgb(74,85,219);">)</span>
<span style="color:rgb(160,32,240);">end</span>
<span style="color:rgb(160,32,240);">for</span> <span style="color:rgb(0,0,0);">h</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(131,67,16);font-weight:bold;">p</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Row h</span>
<span style="color:rgb(160,32,240);">for</span> <span style="color:rgb(0,0,0);">i</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(131,67,16);font-weight:bold;">p</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Column i</span>
<span style="color:rgb(0,0,0);">A</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">h</span><span style="color:rgb(0,0,0);">,</span><span style="color:rgb(0,0,0);">i</span><span style="color:rgb(74,85,219);">)</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(50,185,185);">sum</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(131,67,16);font-weight:bold;">x</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(131,67,16);font-weight:bold;">p</span><span style="color:rgb(92,92,92);">+</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(0,0,0);">i</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(255,170,0);">$</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(0,0,0);">i</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(92,92,92);">.*</span><span style="color:rgb(131,67,16);font-weight:bold;">x</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(131,67,16);font-weight:bold;">p</span><span style="color:rgb(92,92,92);">+</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(0,0,0);">h</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(255,170,0);">$</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(0,0,0);">h</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(160,32,240);">end</span>
<span style="color:rgb(0,0,0);">B</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">h</span><span style="color:rgb(74,85,219);">)</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(50,185,185);">sum</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(131,67,16);font-weight:bold;">x</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(131,67,16);font-weight:bold;">p</span><span style="color:rgb(92,92,92);">+</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(255,170,0);">$</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(92,92,92);">.*</span><span style="color:rgb(131,67,16);font-weight:bold;">x</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(131,67,16);font-weight:bold;">p</span><span style="color:rgb(92,92,92);">+</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(0,0,0);">h</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(255,170,0);">$</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(0,0,0);">h</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(160,32,240);">end</span>
<span style="color:rgb(131,67,16);font-weight:bold;">a</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(74,85,219);">(</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(50,185,185);">inv</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">A</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(92,92,92);">*</span><span style="color:rgb(0,0,0);">B</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(92,92,92);">'</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(160,32,240);">if</span> <span style="color:rgb(188,143,143);">1</span><span style="color:rgb(92,92,92);">==</span><span style="color:rgb(188,143,143);">2</span>
<span style="color:rgb(0,0,0);">H</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">1</span><span style="color:rgb(92,92,92);">/</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">1</span> <span style="color:rgb(92,92,92);">-</span> <span style="color:rgb(50,185,185);">sum</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(131,67,16);font-weight:bold;">a</span><span style="color:rgb(92,92,92);">.*</span><span style="color:rgb(218,112,214);">%z</span><span style="color:rgb(92,92,92);">^</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(131,67,16);font-weight:bold;">p</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Numerator and denominator </span>
<span style="color:rgb(0,0,0);">B1</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">H</span><span style="color:rgb(92,92,92);">.</span><span style="color:rgb(170,170,170);">num</span>
<span style="color:rgb(0,0,0);">A1</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">H</span><span style="color:rgb(92,92,92);">.</span><span style="color:rgb(170,170,170);">den</span>
<span style="color:rgb(100,174,100);font-style:italic;">// Filter white noise</span>
<span style="color:rgb(0,0,0);">x1</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(50,185,185);">filter</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">B1</span><span style="color:rgb(0,0,0);">,</span> <span style="color:rgb(0,0,0);">A1</span><span style="color:rgb(0,0,0);">,</span> <span style="color:rgb(0,0,0);">y</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">x1</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">x1</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">N</span><span style="color:rgb(92,92,92);">+</span><span style="color:rgb(188,143,143);">1</span><span style="color:rgb(255,170,0);">:</span><span style="color:rgb(188,143,143);">2</span><span style="color:rgb(92,92,92);">*</span><span style="color:rgb(0,0,0);">N</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">plot</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">x1</span><span style="color:rgb(74,85,219);">)</span>
<span style="color:rgb(160,32,240);">end</span>
<span style="color:rgb(176,24,19);">endfunction</span></pre>
<div id="DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br /> <table style="border-top: 1px solid #D3D4DE;">
<tr>
<td style="width: 55px; padding-top: 18px;"><a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient" target="_blank"><img src="https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif" alt="" width="46" height="29" style="width: 46px; height: 29px;" /></a></td>
<td style="width: 470px; padding-top: 17px; color: #41424e; font-size: 13px; font-family: Arial, Helvetica, sans-serif; line-height: 18px;">Libre de virus. <a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient" target="_blank" style="color: #4453ea;">www.avast.com</a> </td>
</tr>
</table>
<a href="#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"> </a></div></body>
</html>