After a bit of back and force with the author and another look at the paper it's much clearer how the simulator they use works.
First, as josh thought, the carrier frequency is actually just the voltage being turned on and off at 10kHz during each 1ms pulse. This should have been obvious from a look at the paper but for some reason I missed it.
Second, the stimulator in use has a current sensor which measures the amount of current and checks it against the target current, then the voltage is adjusted to compensate for any change in impedance. The nature of the applied waveform prevents polarization of the electrodes and skin beneath the electrodes so changes in impedance is usually due to some other factor.
This means that while the pulse pal can output an appropriate waveform a current sensor would have to be added and tied to logic that adjusts the amplitude in order to keep the current constant. Seems like a kind of roll-your-own approach at this point. The arduino due could probably handle reading a current sensor and some extra code could change the amplitude on the fly but right now I don't know enough about current sensing to do that myself. I'll probably post this problem on an arduino or electrical engineering forum flush out the details, unless a member here could point me in the right direction.
One thing I'd be especially careful about, is grounding.
You DEFINITELY don't want to ground yourself to any electrical system that is not isolated from electric mains. In case of equipment failure, you can get injured.
Pulse Pal's trigger channels are optically isolated, but the output channels share a ground with your computer's USB hub power supply. If you use a laptop on battery power or a USB battery to power Pulse Pal, you'll reduce this concern (though both supplies can generate enough current to cause damage if you're not careful!)
Thanks for the warning about grounding. I'll keep that in mind and make sure it's taken care of when I add a current sensor. I'm still having a bit of trouble nailing down some good impedance figures since the author I've been talking to has yet to respond about that. I've been looking online and since it's a square wave I guess it's a bit special when it comes to calculating impedance and voltage and such. I'm also not sure about how the body would act in this scenario. Would it be purely, or close enough to, resistive? Some sites recommend using fourier analysis to approximate the values. Am I overthinking this?
What's the maximum amount of current produced by the pulse pal 2? The voltage ranges between +10V and -10V so if I know the maximum current I can work backwards and figure out the maximum impedance it could handle while keeping a constant current at a certain frequency and duty cycle.
I see. To be honest I haven't looked through all of the wiring yet, just started to make my way through some of the datasheets for the parts and read through some of the code too. I'll need to draw up to 120mA of current and I'm still not quite sure if 10 volts is enough. It seems like at this point it would be better to make something purpose-built rather than try to modify a pulse pal to fit my project, which is kind of unfortunate but probably better anyway.
I appreciate all the responses you've given so far. I'm going to start by looking at a constant-current power source and how to make bipolar waves with an arduino. I'm sure some of your code will come in handy there. I'll also probably need to get my hands on an oscilloscope to make sure everything comes out correctly. I'll look into getting one of those too.
Any last comments/advice?