Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/env python3
- # Low-pass:
- # voltage divider: gain = Xc/(Xc+R) = 1/(1+R/Xc) = 1/(1+jωCR)
- # At 3db, freq ωₒ: R = |Xc| = 1/ωₒC thus CR = 1/ωₒ
- # gain = 1/(1+jω/ωₒ) = 1/(1+jf/fₒ)
- import numpy
- import matplotlib.pyplot as plt
- # define input waveform as 010100 trapezoid
- lo = numpy.array( [0] * 200 )
- hi = numpy.array(list(range(10)) + [10] * 200 + list(range(9,-1,-1))) / 10.0
- wave = numpy.concatenate( [lo,hi,lo,hi,lo,lo] )
- # Func for low-pass RC filter of waveform
- def low_pass( waveform, freq, f3db, hue, offset ):
- fftwaveform = numpy.fft.rfft(waveform)
- harmonics = numpy.arange(len(fftwaveform))
- gains = 1.0 / (1.0 + 1j * (harmonics * freq) / f3db)
- fftfiltered = fftwaveform * gains
- filtered = numpy.fft.irfft(fftfiltered)
- plt.plot(filtered * 0.8 + offset, color=hue, lw=2.0)
- # input_waveform, base_freq, RC_filter_freq, screen_colour, screen_offset
- low_pass(wave, 1, 1e10, "black", 4)
- low_pass( wave, 1, 20, "green", 3)
- low_pass( wave, 1, 6, "blue", 2)
- low_pass( wave, 1, 3, "red", 1)
- low_pass( wave, 1, 1.2, "orange", 0)
- plt.savefig("low-pass-filtering.png")
- plt.show()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement