- Install
miniconda
and add/path/to/miniconda/bin
to your$PATH
- If using fish shell also add
source path/to/miniconda/etc/fish/conf.d/conda.fish
to yourinit.fish
- If using fish shell also add
conda env create -f environment.yml
conda activate ee240b-project
jupyter notebook &
- Open this project in PyCharm/IntelliJ
- File → Project Structure → Select a Python SDK from the Conda environment that was just created
- Use PySpice to programmatically construct a SPICE netlist describing the filter.
- Use Akhab to perform AC symbolic analysis on a SPICE netlist.
- Explore using NGSPICE as a local spice engine for iterating on the design away from the server farm.
- Potential flow:
- Use scipy to calculate filter ZPK for a given filter style and input parameter set (look at the extra credit stuff for what to support)
- Use PySpice to construct an abstract netlist with R/C/L (as parameters) and ideal op-amps (just a differential gain VCVS) given a particular filter topology (multiple feedback, sallen-key, etc.) and of a particular order
- Take the generated netlist and feed it into Ahkab and run a symbolic AC analysis which should give us the SS transfer function
- Using sympy, take the symbolic transfer function, find the symbolic expression and poles, zeros and DC gain. Then equate the desired ZPK of the filter to the symbolic expressions, run a solver, and find optimal values of R/C/L
- Plug in these physical values into the netlist and run a SPICE simulation to verify correctness
- Add op-amp non-idealities and potentially re-run symbolic analysis or just begin stochastic tweaking of the R/C/L to compensate out the non-idealities
- Perform noise analysis to analyze the dynamic range of the filter and continue tweaking using the same stochastic search
- Estimate power consumption by again performing symbolic analysis of the bias currents at DC and then doing P = IV.
- Someone is working on a new symbolic spice engine written in C++, already supports linear circuit analysis
- Just review this wiki on Symbolic Circuit Analysis