Generating a waveform using timers/interrupts

I have a program that outputs a baseband signal of up to, perhaps, 100 Hz, onto a PWM modulated signal. The structure of the signal is as follows: parameters are High Output, Low Output, Period, and Balance. High and Low Output are PWM output values. Balance is a percent. The signal begins at High Output and remains there for Balance * Period, then switches to Low Output for (1 - Balance) * Period. This is similar to, but not identical to a PWM signal, since PWM always varies between 0 and 5v (or whatever Vcc is) whereas this algorithm does not swing to the rails.

I have implemented the program using millis(), in a manner essentially identical to blinkWithoutDelay, but with a lot more logic in it. I have researched soft-PWM techniques, including some that use interrupts and timers, but the sticking point is that I am not just outputting a PWM signal; I'm outputting another signal modulated on top of a PWM signal. The complexity there is a bit much for me. What I'd really like to do is use the Uno's in-built PWM via analogWrite(), but write my own code using timers and interrupts to trigger the changes in output. For example, if the High Output is 255, the Low Output is 128, the Period is 100 ms, and the Balance is 20%, then instead of doing a blinkWithoutDelay countdown, I'd just set two triggers for every 100 ms, offset by 25 ms, and call analogWrite() from within the ISR--or if calling analogWrite() within the ISR is a bad idea, I could set a flag in the ISR that the loop would detect and change from High to Low and vice versa.

One thing that I'm not sure if it complicates matters is the need to have Balance be an arbitrary value. If we knew that Balance would always be 50%, we could just set one timer with a length of Period / 2. If we knew that Balance would be 25%, we could set a timer with length of Period / 4 and ignore some of the interrupts. But the Balance could be, perhaps, anything from 95% to 5%, in 1% intervals. So the greatest common multiple there would be something like 1/100th of the period, which would be an awful lot of interrupts, although maybe that's manageable.

I don't know if I have a specific question, except to say that any input or feedback on how best to implement this is welcome.

I think I did that once, but I can't find it just now. I think I used one timer to change a pin that caused a pin-change interrupt that fired another timer, if that helps.

Here, I think:

http://www.gammon.com.au/forum/?id=11504&reply=6#reply6

"Modulating a 38 kHz carrier with a 500 Hz signal"

Wow! Thanks, Nick. I'll look into it.