Advertisement
prog

IIR filter

Jul 23rd, 2011
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.89 KB | None | 0 0
  1. # slider1 = Frequency
  2. # slider2 = RIT
  3. # slider3 = Tone
  4. # slider4 = Volume
  5.  
  6. # set the samplerate to 48000 samples per second
  7. samplerate = 48000
  8.  
  9. # down-convert to 1st IF:
  10. # z is a sawtooch oscillator
  11. # (ai,aq) form the mixer output
  12. # (ini, inq) are the soundcard's inputs
  13. z = mod1(z+slider1+slider2/40);
  14. ai = ini * cos1(z) - inq*sin1(z)
  15. aq = inq * cos1(z) + ini*sin1(z)
  16.  
  17. # filter IF:
  18. # samplerate: 48000
  19. # 8 pole low-pass Butterworth cutoff: 1800 Hz
  20. # http://www-users.cs.york.ac.uk/~fisher/mkfilter
  21. # I branch filter
  22. ixv0 = ixv1
  23. ixv1 = ixv2
  24. ixv2 = ixv3
  25. ixv3 = ixv4
  26. ixv4 = ixv5
  27. ixv5 = ixv6
  28. ixv6 = ixv7
  29. ixv7 = ixv8
  30. ixv8 = ai / 4.758542880e+07
  31. iyv0 = iyv1
  32. iyv1 = iyv2
  33. iyv2 = iyv3
  34. iyv3 = iyv4
  35. iyv4 = iyv5
  36. iyv5 = iyv6
  37. iyv6 = iyv7
  38. iyv7 = iyv8
  39. iyv8 =   (ixv0 + ixv8) + 8 * (ixv1 + ixv7) + 28 * (ixv2 + ixv6) + 56 * (ixv3 + ixv5) + 70 * ixv4 + ( -0.2977843725 * iyv0) + (  2.7418349049 * iyv1) + (-11.0754467360 * iyv2) + ( 25.6394142260 * iyv3) + (-37.2107924000 * iyv4) + ( 34.6753158910 * iyv5) + (-20.2650962730 * iyv6) + (  6.7925493799 * iyv7)
  40. ai = iyv8
  41.  
  42.  
  43. # Q branch filter
  44. qxv0 = qxv1
  45. qxv1 = qxv2
  46. qxv2 = qxv3
  47. qxv3 = qxv4
  48. qxv4 = qxv5
  49. qxv5 = qxv6
  50. qxv6 = qxv7
  51. qxv7 = qxv8
  52. qxv8 = aq / 4.758542880e+07
  53. qyv0 = qyv1
  54. qyv1 = qyv2
  55. qyv2 = qyv3
  56. qyv3 = qyv4
  57. qyv4 = qyv5
  58. qyv5 = qyv6
  59. qyv6 = qyv7
  60. qyv7 = qyv8
  61. qyv8 =   (qxv0 + qxv8) + 8 * (qxv1 + qxv7) + 28 * (qxv2 + qxv6) + 56 * (qxv3 + qxv5) + 70 * qxv4 + ( -0.2977843725 * qyv0) + (  2.7418349049 * qyv1) + (-11.0754467360 * qyv2) + ( 25.6394142260 * qyv3) + (-37.2107924000 * qyv4) + ( 34.6753158910 * qyv5) + (-20.2650962730 * qyv6) + (  6.7925493799 * qyv7)
  62. aq = qyv8
  63.  
  64. # down-convert to audio using a second mixer
  65. y = mod1(y+0.0275)
  66. af = ai*cos1(y) - aq*sin1(y)
  67. audio = audio - slider3*(audio - af)
  68.  
  69. # send audio to output of soundcard
  70. # slider4 controls the volume
  71. uitL = audio * slider4 * 500
  72. uitR = audio * slider4 * 500
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement