Apply a digital filter (direct form II transposed): Difference between revisions

added ooRexx
m (→‎REXX version 2: increase output's precision)
(added ooRexx)
Line 344:
-0.21172192, -0.17474556, 0.06925841, 0.38544587, 0.65177084
</pre>
 
=={{header|ooRexx}}==
<lang oorexx>/* REXX */
Numeric Digits 24
a=.array~of(1.00000000, -2.77555756e-16, 3.33333333e-01, -1.85037171e-17)
b=.array~of(0.16666667, 0.5, 0.5, 0.16666667)
s=.array~of(-0.917843918645, 0.141984778794, 1.20536903482, 0.190286794412,,
-0.662370894973, -1.00700480494, -0.404707073677 ,0.800482325044,,
0.743500089861, 1.01090520172, 0.741527555207, 0.277841675195,,
0.400833448236, -0.2085993586, -0.172842103641, -0.134316096293,,
0.0259303398477, 0.490105989562, 0.549391221511, 0.9047198589)
ret=.array~of(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
 
Call filter a,b,s,ret
Do i=1 To ret~items
Say format(i,2) format(ret[i],2,12)
End
Exit
::Routine filter
Numeric Digits 24
Use Arg a,b,s,ret
Do i=1 To s~items
temp=0
Do j=1 To b~items
if i-j>=0 Then
temp=temp+b[j]*s[i-j+1]
End
Do j=1 To a~items
if i-j>=0 Then Do
u=i-j+1
temp=temp-a[j]*ret[u]
End
End
ret[i]=temp/a[1]
End
Return</lang>
{{out|output}}
<pre> 1 -0.152973989500
2 -0.435257829050
3 -0.136043396988
4 0.697503326548
5 0.656444692469
6 -0.435482453256
7 -1.089239461153
8 -0.537676549563
9 0.517049992313
10 1.052249747155
11 0.961854300374
12 0.695690094010
13 0.424356295096
14 0.196262231822
15 -0.027835124463
16 -0.211721915450
17 -0.174745562223
18 0.069258408901
19 0.385445874307
20 0.651770838819</pre>
 
=={{header|Perl 6}}==
2,295

edits