Oscillator
Here's the square wave graphed as a 3D function. I've normalize the period of the waveform to scale uniformly so that we can see how the creases develop as a function of time and frequency (note number). So x-axis is time, y-axis is amplitude and z-axis is frequency in a log scale.

The same for the sawtooth:

More simple measurements of the oscillator: The upper graph shows the note number (as output by the 303 sequencer, which is converted into an analog pitch CV) vs frequency. As we ca see the tuning of my particular 303 is a bit off (the dashed line). The filled line is the exact theoretical tuning (i.e a regular pow curve).
The lower graph is rather interesting as it shows the duty cycle of the square wave as a function of note number (frequency) . The blue line is as measured on a 303 and the green line is an approximation as simulated in ABL1.

Filter
Regarding the filter, it's tricky getting all the control signals right. I measured the resonant frequency as a function of the cutoff knob position. For this we used a midified 303 which accepts a cutoff value from 0-127. The cutoff knob position is normalized into 0.0-1.0 range. Note that we measure the resonant frequency which is not the same at the cutoff frequency, the reason we do this is because resonant frequency is the highest we can represent in digital which is up to nyquist. The cutoff frequency would actually be higher than nyquist at the top most range.

This helps determine the overall knob response function, however more detailed work is needed to figure out how the envelope modulation and basic cutoff frequency combine to set the filter CV. The 303 schematics tell you whether the knob pots are anti log or linear in behavior, and IIRC the cutoff pot is anti log. Anti log in analog is not a perfect curve however. For reference here is a simple log/anti log graph:

So the lower curve is the inverse of the upper curve. One fed into the other would produce a straight line. Doing the same on the 303 circuit produces however:

(The graphs above are mislabeled, they are not log/antilog. They are antilog(log()) and log(antilog()) so still inverses of eachother). I think the red lines show the max/min variance that the antilog may have but I'm not sure of this.
Regarding the CV input of the filter I did some spice modeling to help figure this out, as well as measuring on a real unit. I have no idea if these are the complete spice schematics but I'll post them here anyway.


Again most of this work is 6-10 years old so I'm shady on the details. While I keep improving the 303 model on a yearly basis I feel we pretty much nailed the CV portion of the 303, and the analog synth portion keeps evolving.
So this is just a microscopic part of the work we did for the oscillator and filter CV sections, much work remains for the accent CV and actual filter modeling. I think someone released a pretty good analysis on how the 303 filter works however simulating it is a completely different ball game, as I'm sure you know.
