Piotr Mitros

Welcome. I recently finished my Ph.D thesis at MIT in the Department of Electronic Engineering and Computer Science. I am now trying to figure out what to do next with my life, and supporting myself doing consulting/contract work. Most of the old content from pmitros.mit.edu isn't on mitros.org yet.

My contact info

I have a strong background in analog circuit design, digital circuit design and computer science. I have a reasonable background in control systems and theoretical mathematics. I have some background in physics (classical mechanics, waves, thermodynamics, and introductory quantum) and signal processing as well. I've played with many areas of applied mathematics as well. In addition, I can do basic machining and wood-working.

Since I am sometimes looking for work, I have added a page of some of the coursework that I have taken at MIT. My background is fairly interdisciplinary, but I try to be mostly a hardware and math guy (a lot of people try to give me software jobs). I occasionally do consulting/contract work. Contact me if you need anything done, although my schedule is typically quite full -- for the past year, demand has exceeded supply by quite a bit.

Projects

Here's a list of some of the projects that I've worked on. These are in something between random and reverse chronological order. Many of these were done as class projects; in most of those cases, I focused on the technical aspects of the project, and the writeup was more of an afterthought done at the last moment. With the exception of writeups that I explicitly needed for other things (for example, satisfying MIT phase 2), these are unedited, and may contain errors. Also, as a rule of thumb, writeup quality is inversely proportional to technical merit.

I am currently working for a super-secret medical devices startup. Most of my work has been in circuit design, but I did some DSP as well.

I finished my Ph.D at MIT in August/September 2007. My thesis is about a methodology for analog circuit design that used bidirectional flow of information. This methodology allows for the construction of complex, interconnected systems, guaranteeing their stability with what is mostly a local stability criterion. I applied it to three problems. First, I showed how it could be used to solve systems of equations. Second, I showed how it could be used to build models of systems by observation. Finally, I showed how it could be used to linearize a nonlinearity. The linearization is probably the most compelling application. The circuit is fairly simple: A linearizer that can model a nonlinearity as a quadratic Taylor approximation, and predistort to compensate for it, can be built with under a dozen major blocks (Gilbert cells or op-amps). It is independent of feedback linearization, so it can be used inside of a feedback loop without significantly affecting feedback linearization. More complex linearizers are also robust to a class of device failures. I presented a paper on my thesis at IEEE ISCAS 2008, and need to find the time to turn it into journal publications (paper page also has videos of my thesis defense). My thesis was co-advised Gerry Sussman and Tom Knight.

During my last couple of years at MIT, I spent some time trying to solve the problem of lack of instrumentation to equipment in the developing world. This work was supported by the MIT iLabs Project. My work had several pushes.

  1. Making the iLabs remote laboratory infrastructure and software more applicable to the conditions of the developing world
  2. Developing low-cost instrumentation hardware (e.g., a $20 USB data acquisition board capable of acting as a crude oscilloscope, PSU, and function generator)
  3. Improving collaboration between MIT and partner universities (creating a wiki, etc.).
I wrote up a summary of some of my work. In addition, there is a (slightly outdated, slightly buggy) article about iLabs in the Carnegie Reporter that touches on some of my work.

I spent the summer of 2006 teaching computer science at Zhejiang University and Dalian University of Technology in China. The curriculum was an abbreviated version of MIT's 6.001 (a full text of the textbook is on-line). This was done through the CETI program. In addition, we presented MIT teaching technologies, such as iLabs and XTutor, to the staff. I also wrote a little Scheme programming contest (based on one I competed in at MIT a few years before). Only the Zhejiang students were advanced enough to be able to compete.

I spent the summer of 2004 working for Texas Instruments in India on VCO design. I'll post more information about what I did there at some point (I need to sort out what's NDAed).

My master's thesis was a program for optimizing an analog circuit topology. The input was a hierarchical description of the circuit in a Spice-like format (for instance, 3 operational amplifier topologies, each defined in terms of subcomponents like "current mirror," and several topologies for each subcomponent), as well as an optimization function. The program would try different possible topologies (combinatorial/discrete optimization), as well as different component values (continuous variables), using several algorithms, and given insane amounts of time, would generate a near-ideal circuit.

Balkentrol is a 3d racing video game I designed and built. It's implemented entirely in hardware (no microprocessor or computer of any sort; just an FPGA (programmed in VHDL), some DACs, op amps, solder, wire wrap, resistors, etc.). I implemented this while I was in 6.111, and turned it into my final project. Later, I was joined by a partner who built a fancy sound system for the game. This project was nominated by the professors for an award as the top MIT EECS lab project that semester. Sadly, it appears that it did not win.

Instrumentation Photosensor Working for Talking Lights, I designed and built an instrumentation photodetector, where the noise was dominated by the shot noise in the photodetector diode (caused by discretization from individual photons striking the sensor). It had several MHz bandwidth. It was designed to measure very small signals on top of a large constant light source.

Interesting 6.331 projects:

Minor 6.331 projects. All of these met specs (sans trivial bugs in the design projects), and were in my opinion reasonably competently designed and analyzed, and were written up adequately (better than the interesting ones), but were fairly uninteresting in architecture:

Teaching I've been involved in the MIT electonic engineering curriculum. I've TAed the undergraduate analog laboratory (6.101) and an introductory circuits class (6.071). In addition, while RAing, I've been involved with a radical revamp of the electronic engineering curriculum, based on bringing in industry experts to run small tutorials (6.002ex).

RAW Project I spent about a month working on the RAW processor project. My work consisted mostly of assembly coding. In that time, I found a bug in the processor, wrote some number of test suites, implemented a neural network simulator, and began working with the IKOS emulator.

Optical encoder A few semesters later, I redesigned the reflective optical encoders for MASLab. They were fully differential (they pattern had two stips for each phase instead of one -- when one was black, the other was white, and the circuit compared the two). As a result, they did not rely on any absolute threshold, and could be used in a variety of lighting conditions, and with the reflective surface anywhere from several millimeters to several inches from the sensor. Some students still had problems.

MASLab I was on a four-person team for the Mobile Autonomous System Laboratory. It is a month-long contest to develop an autonomous robot capable of completing a task that varies from year to year. Our year, the goal was to bring back a series of beacons in an unknown environment. Our robot was the only one to successfully bring back a target beacon. My primary task consisted of writing a PID controller for the motors, as well as some parts of the higher-level AI/control code. The platform was an IPaq running StrongARM Linux.

Carry-lookahead adder In 6.374, for the final project, my team designed an adder based on a scheme I came up with that computed carry for 3 stages at a time, using what was effectively a DAC and comparator (implemented as a sense amplifier, with multiple input transistors, with scaled W/L ratios for the 3 inputs).

MIT Solar Car I was drafted for a fast-paced 2 weeks to rewrite the control code for the microcontroller controlling the lithium ion batteries for the MIT Solar Car team. The folks there wrote the code, having no working hardware, and left, having never tested it. As expected, it didn't work, and had a number of minor and major bugs. I debugged/rewrote it so it worked. I also helped with soldering, debugging analog electronics, etc. a bit.

Web proxy At some point, I wrote a web proxy in Perl that cached standard graphics from several web sites that I visit, automated tedious parts of some on-line games that were popular in my dorm (grepped for possible solutions for a hangman type game, automated obvious moves in MineSweeper, etc.), removed advertising based on JunkBuster regexes, etc. It was based on code from an article about writing proxies in Perl.

Audio Visualization Hardware When my sister came up to visit, we hacked together an analog audio visualization circuit. We built a beat detector, and drove the deflection coils of an old CRT from a Mac Plus to draw a circle that got bigger and smaller in response to the beat.

Silent computing My computer is completely passively cooled. No fans, no noise. The only moving parts are drives, and the hard drive is in an acoustically shielded enclosure. I once had one of the top web sites on the topic of silent computing. Right now, it moved much closer to the mainstream, and there are several major sites devoted to it, as well as plenty of companies making standard silent components. At the time I did this, it involved some thermal hacking.

Consulting Work I've done a substantial amount of consulting work, mostly with low-level Internet Explorer programming under Windows (monitoring what sites it goes to, modifying the GUI, etc). ATL / COM / MFC / Visual C++. Some Apache programming as well (Apache loadable modules in the low level C API). My clients were generally quite happy with my work (references available). My biggest client was BCG, but I also did some work for a couple of assorted startups.

Bathroom Server Advance Some folks in my dorm hacked together a server that shows which bathrooms are in use. I made a fancy interface to it that shows the shortest path from the user to the closest free bathroom (based on IP address, and MIT moira database giving room number), displayed different icons based on how long the bathroom was in use (brushing teeth, shower, etc.) It's down until I have my own web server again (but the source is available if someone else can host it).

Microcurrent sources In 6.973 (subthreshold VLSI), I designed a series of microcurrent sources. They worked by generating a single precision current with a bandgap reference and an off-chip resistor. This current was converted into an oscillation frequency (based on a voltage reference and a capacitor value). The frequency was digitally clocked down, and converted back to current values (dependent on the new oscillation frequency, as well as a matched capacitor, and the same reference voltage). At the time, I had a fairly weak background in control systems, and as a result, this isn't one of the projects I am more proud of (this solution, in retrospect, was substantially underanalyzed, and so likely quite poorly optimized). On the bright side, the paper was fairly well written.

Amorphous Computing I spent a bit of time working on several projects in amorphous computing, under Gerry Sussman. Most of my time was spent playing with sensor networks consisting of microphones, and localizing sound sources, imaging with aperture synthesis, etc. I implemented a couple of existing algorithms, but didn't create any worthwhile new ones. Looking back, my background in signal processing was substantially lacking for a problem of this caliber (this was mostly my sophomore year of college). In the process of doing this, I also wrote some embedded StrongARM code, and ported several drivers from the Linux kernel into my (operating system-less) framework.

Vinil is a programming language I designed when I was in high school, and implemented together with Dennis Quan. It was a hybrid between functional and object oriented, and very strongly mixed data with code. We used it to implement an on-line collaborative environment, in which users could contribute articles, comment on articles, and generate webs of links between articles. A third partner was supposed to populate it with content, but he backed out at the last moment. The interpreter was written in Java, and was integrated into the Jigsaw web server (and later, when it was released, the servlet API).

Silver Stringers I wrote the initial version of the Silver Stringers software for the MIT Media Lab. This consisted of a C++ server that stored data about articles in a flow for an on-line newspaper, several Apache CGI scripts that rendered the newspaper, as well as a Java applet with which writers could write articles and submit them to editors, editors edit them, and either return them to the writer or add them to the web page. I did this while in high school.

Norman was a program I wrote together with Dennis Quan, when we were working as software engineers for Landmark Graphics Corp. while in high school. It was used to numerically/visually renormalize data collected from sensors in oil wells. Visual C++/MFC/Windows NT.

Electronic Engineering, Physics and Mathematical Software I've written a moderate number of programs for numerical circuit optimization, symbolic circuit analysis. I've written a reasonable number of simulators and symbolic analyzers for mechanical systems (based on Lagrangian mechanics, to analyze chaotic and other systems), etc. I've also written computation aides for theoretical math courses (abstract algebra, etc.) Almost all of these were specific to some particular task; they are usually not very general.

Minor hacks I've written large numbers of minor hacks to automate my life. I had a long list, but noticed many were obsolete, so I'm trying to sort through these a bit more. These are known useful:

Status unknown (as of Jan 2011). These worked at one point, but may or may not be bitrotted into oblivion: Probably obsolete:

Should find and post:

Minor electronics projects Audio power amplifier. Bitstream DAC. AM receivers. Misc. DC-DC power converters, linear power supplies, regulators, etc. Several operational amplifiers. Temperature probe. Digital FIR filter. FPGA programmer. Simple switch-cap filter. Speakers (8.5"x10"x20" enclosure, with woofer, tweater and a port; external crossover; fairly standard design; started shortly after I finished taking Acoustics from Bose, finished much later).

Assorted things


Copyright (c) 2003-2011. Piotr Mitros. All Rights Reserved