HiFi AM DSP utility for the Kenwood TS-950SDX
Bill Paul N1GPT firstname.lastname@example.org
The TS-950SDX is well known for being able to produce outstanding HiFi SSB audio. Using a couple of special power-on menu options, it's possible to achieve up to 6.7Khz of audio frequency response. However, due to a design quirk, once you set the LPF option to 'off' to open up the high end response, the DSP will no longer generate a carrier when the radio is set for AM mode. This prevents the operator from achieving Hi-Fi sound on AM.
It turns though that you can make the radio transmit in HiFi mode in AM, if you trick it. I've discovered two ways so far. The first is to set the LPF menu option to 3100Hz, then begin transmitting in AM, and then change the menu option to 'off' without releasing the key. The other is to set the LPF menu option to 'off,' then begin transmitting in AM, and then switch to either LSB or USB mode and then back to AM mode again. (Using FM instead of LSB or USB also works. CW does not.)
Basically, the radio is able to operate in AM with the DSP configured for HiFi mode, but for some reason Kenwood sabotaged the functionality. The above techniques can be used to get around the problem, but it's annoying to have to press extra buttons on the radio every time you want to transmit.
It would be ideal if there were some way to modify the rig to remove this limitation. In theory it is possible to do this, either by changing the signals generated by the CPU or possibly by modifying the firmware. However, both of these options would require a significant amount of reverse-engineering.
Until that can be accomplished, I came up with an interim solution that's less of a hassle than manually swapping modes or menu settings, and which doesn't require modifying the radio at all. The TS-950SDX has a serial port for CAT control, which can be used to monitor the radio's state and to select its current operating mode. It occured to me that it should be possible to have a custom CAT utility that checks to see when the radio has been set to transmit in AM mode, and to then automatically swap modes from AM to SSB and then back again.
I wrote such a program and have made it available for download below. The utility is written in C, and currently runs on FreeBSD, Linux and Windows. (It could probably be implemented in perl to make it more portable, but I'm not any good with perl.) The program constantly polls the state of the radio using the 'info' command, and when it sees that the radio is transmitting in AM mode, it issues mode commands to quickly swap from AM to LSB and then back to AM. The only drawback is that because the TS-950SDX's serial port only runs at 4800 baud, polling the radio is a little slow. It can take a half second or so for it to notice the radio has entered TX mode. Unfortunately there doesn't seem to be a way to speed this up. According to the documentation, there's a way to make the radio announce its state automatically, however it will only do it at approximately 1.5 second intervals, which is also too slow. In spite of this, I used the software quite a bit over the weekend and for now at least it seems to work reasonably well. Of course, someone finds a better solution, they're welcome to let me know. :)
Note that this same technique should also work with the TS-850/DSP-100 combo. The 850 can also be made to transmit in AM HiFi DSP mode using the same mode swap trick. However, I was unable to get my CAT cable to talk to the radio via the CONT OUT port on the DSP-100 unit. (I was able to talk to it with the cable plugged directly into the back of the radio though.) If you have a TS-850/DSP-100 combo with a working cat cable, the program may work for you too. (You will likely need to modify the code that checks for the radio ID, since the TS-850 has a different product ID number.)
Also, there's one caveat. I tried both the Piexx and G4ZLP Kenwood CAT cables. Both worked, however I noticed that with the G4ZLP cable, I could occasionally hear some digital hash noise in my transmitted audio. I was able to make it go away by adding some ferrite chokes to the cable and moving my laptop to a different location. With the Piexx cable, there was no noise at all. This is due to the fact that the Piexx cable isolates the serial data lines using optocouplers. (The G4ZLP just uses normal TTL level conversion.) Since the program is constantly polling the state of the radio, the communication signals will always be active. I therefore recommend using the Piexx CAT cable (or something like it), or else have some RF chokes handy to counter any noise if you hear it.
UPDATE: I've modified the program so that it should now also work with the TS-850, which uses the same command format. Be aware however that I haven't been able to test it with my TS-850/DSP-100 combo, because for some reason my computer can't seem to communicate with the rig through the CONT OUT port on the back of the DSP unit. (It does work fine when connected directly to the radio, so I'm not sure what the problem is.) However, the only significant difference between the two radios is the product ID code, and the program now recognizes both the TS-950SDX's code (12) as well as the TS-850S's (9). In my experimentation, the same mode toggle trick works with the TS-850/DSP-100 combo, though the audio doesn't sound quite as good to me as when the same trick is used with the TS-950SDX. Your mileage may vary. Since it was easy to support both radios, I figured I'd add the support for it in case anyone wanted to experiment.
To download the program source code, click the link below:
UNIX tar.gz format:
Kenwood TS-950SDX AM DSP utility (.tar.gz file)
Kenwood TS-950SDX AM DSP utility (.zip file)
The program can be compiled on FreeBSD or Linux using the native C compiler that comes with the operating system. For Windows, you need to use the Cygwin version of GCC, which is available from Cygwin.org. You need to install at least the core Cygwin system, the C compiler (C++ not needed) and the 'make' utility.
NOTE: The archive includes pre-compiled binaries for FreeBSD, Linux and Windows. Along with the Windows binary (ts950.exe), are two Cygwin DLL files. These are required in order for the Windows version of the program to run. The program should run fine as long as the two DLLs are in the same directory as the executable. Please keep them together. (One day if I'm really bored I may create a fully native Windows binary that doesn't need the DLLs, but for now using Cygwin is much simpler.)
To compile the program, just unpack the source code and use the 'make' command:
$ cat ts950.tar.gz | gzip -d | tar -xvf -
$ cd ts950
To run the program, you need to specify the path to your serial port device. On FreeBSD, using the Piexx CAT cable with USB adapter, the device is usually /dev/cuaU0. For Linux, it's probably /dev/ttyS0. For Windows, use the comm port device that corresponds to the serial port where your radio is connected, e.g. COM1, COM2, COM5, etc...
$ ./ts950 -f /dev/ttyS0
Note that this program is in the public domain. It's provided as-is, with no implied warranty for any purpose. The author disclaims all liability for any losses or damage that may result from its use. If it breaks, you get to keep both pieces.