The first thing I would do is run the OBD codes to see what the car's computers think. See the link in my signature block for a Caddyinfo page on reading your OBD codes.
If the car passes emissions testing, that means that it has no current emissions codes, not that there are no problems. Nearly always, if the Check Engine light is off, the car will pass emissions testing as it is done lately. There may be History codes or intermittent problems, or there may be something that is not detected by the car's OBD system. But often a check of History OBD codes and codes other than emissions codes will tell you something important, occasionally about a problem that you weren't aware of.
If there are not OBD codes that reflect on your problem, I would check the plug wires, the coils, the crank sensors, MAP sensor, and also for clogging in the catalytic converter. If you are mechanically inclined, you might check the plugs for odd or non-uniform appearance, but be aware that anti-seize compound and silicone plug boot compound must be used when replacing the plugs, and proper torque must be used.
A real code reader that provides misfire counts by cylinder can be helpful in identifying plug, ignition wire, or coil problems. Each coil fires two cylinders, and problems on both for a particular coil point to the coil as opposed to the plugs or wires. Moving wires from coil to coil can verify that a coil is bad - or good, but the wires or plugs are bad.