<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<div class="moz-cite-prefix">Hello Federico,</div>
<div class="moz-cite-prefix">Le 20/07/2022 à 22:47, Federico Miyara
a écrit :<br>
</div>
<blockquote type="cite"
cite="mid:42eb40da-529c-3101-77aa-8237ce959bc5@fceia.unr.edu.ar">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<br>
<font face="Courier New">Dear All,<br>
<br>
I have problems with this script:</font><br>
<pre style="font-family:Monospaced;font-style:normal;font-size:18.0;"><span style="color:rgb(0,0,0);">Fs</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">44100</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">fo</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">500</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(0,0,0);">B</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(188,143,143);">2</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(188,143,143);">6</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(92,92,92);">-</span><span style="color:rgb(188,143,143);">2</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(188,143,143);">1</span><span style="color:rgb(92,92,92);">/</span><span style="color:rgb(188,143,143);">6</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">;</span>
<span style="color:rgb(51,153,6);font-style:italic;">// Low-pass Butterworth </span>
<span style="color:rgb(0,0,0);">hLPs</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">analpf</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">3</span><span style="color:rgb(0,0,0);">,</span><span style="color:rgb(188,143,143);">"</span><span style="color:rgb(188,143,143);">butt</span><span style="color:rgb(188,143,143);">"</span><span style="color:rgb(0,0,0);">,</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(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(51,153,6);font-style:italic;">// Band-pass Butterworth centered at fo</span>
<span style="color:rgb(0,0,0);">hBPs</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">horner</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">hLPs</span><span style="color:rgb(0,0,0);">,</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(218,112,214);">%pi</span><span style="color:rgb(92,92,92);">*</span><span style="color:rgb(0,0,0);">fo</span><span style="color:rgb(92,92,92);">/</span><span style="color:rgb(218,112,214);">%s</span> <span style="color:rgb(92,92,92);">+</span> <span style="color:rgb(218,112,214);">%s</span><span style="color:rgb(92,92,92);">/</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(218,112,214);">%pi</span><span style="color:rgb(92,92,92);">*</span><span style="color:rgb(0,0,0);">fo</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);">B</span><span style="color:rgb(74,85,219);">)</span>
<span style="color:rgb(51,153,6);font-style:italic;">// Apply bilinear transform</span>
<span style="color:rgb(0,0,0);">hBPz</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">horner</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(0,0,0);">hBPs</span><span style="color:rgb(0,0,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);">Fs</span><span style="color:rgb(92,92,92);">*</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(188,143,143);">1</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(218,112,214);">%z</span> <span style="color:rgb(92,92,92);">+</span> <span style="color:rgb(188,143,143);">1</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(74,85,219);">)</span>
<span style="color:rgb(51,153,6);font-style:italic;">// Attempt to get the same using iir</span>
<span style="color:rgb(0,0,0);">hBPz1</span> <span style="color:rgb(92,92,92);">=</span> <span style="color:rgb(0,0,0);">iir</span><span style="color:rgb(74,85,219);">(</span><span style="color:rgb(188,143,143);">3</span><span style="color:rgb(0,0,0);">,</span> <span style="color:rgb(188,143,143);">"</span><span style="color:rgb(188,143,143);">bp</span><span style="color:rgb(188,143,143);">"</span><span style="color:rgb(0,0,0);">,</span> <span style="color:rgb(188,143,143);">"</span><span style="color:rgb(188,143,143);">butt</span><span style="color:rgb(188,143,143);">"</span><span style="color:rgb(0,0,0);">,</span> <span style="color:rgb(0,0,0);">fo</span><span style="color:rgb(92,92,92);">/</span><span style="color:rgb(0,0,0);">Fs</span><span style="color:rgb(92,92,92);">*</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(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(188,143,143);">6</span><span style="color:rgb(74,85,219);">)</span><span style="color:rgb(0,0,0);">,</span><span style="color:rgb(188,143,143);">2</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(188,143,143);">1</span><span style="color:rgb(92,92,92);">/</span><span style="color:rgb(188,143,143);">6</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(74,85,219);">[</span><span style="color:rgb(188,143,143);">0</span> <span style="color:rgb(188,143,143);">0</span><span style="color:rgb(74,85,219);">]</span><span style="color:rgb(74,85,219);">)</span></pre>
<font face="Courier New">I attempt to design a discrete
Butterworth band-pass filter using two equivalent methods:<br>
<br>
1) Manually applying a bilinear transform to the analog filter
designed with analpf()<br>
2) Applying the function iir()<br>
<br>
For some resaon I couldn't figure out, the first method yields
an unexpected result:<br>
<br>
--> hBPz<br>
hBPz = <br>
0.0000005 +0.0000016z +0.0000016z² +0.0000005z³ <br>
----------------------------------------------- <br>
-0.9671578 +2.9195957z -2.9518237z² +z³ <br>
<br>
--> hBPz1<br>
hBPz1 = <br>
0.0000006 -0.0000017z² +0.0000017z⁴
-0.0000006z⁶ <br>
-----------------------------------------------------------------------------
<br>
1.0335428 -6.1515162z +15.271063z² -20.239437z³ +15.104038z⁴
-6.0176897z⁵ +z⁶ <br>
<br>
The official function iir() is correct. The manual procedure
unexpectedly reduces the order of the denominator.<br>
<br>
Maybe someone can find out what's going on...<br>
</font></blockquote>
<p><br>
</p>
<p>Sorry, but nothing is clear to me about your statements:</p>
<p>1) what shows you that iir() is correct while the analpf + horner
way is not?<br>
<br>
2) With the analpf + horner method, assuming that it is not
correct, what shows you that horner is not correct, while analpf
is correct, instead of the opposite or both incorrect?<br>
<br>
3) do you have a reference about the equivalence?<br>
<br>
4) have you tried after simp_mode(%f)?<br>
</p>
Samuel<br>
<br>
</body>
</html>