• WANTED: Happy members who like to discuss audio and other topics related to our interest. Desire to learn and share knowledge of science required. There are many reviews of audio hardware and expert members to help answer your questions. Click here to have your audio equipment measured for free!

Phono Cartridge Response Measurement Script

Ya as @VinyLuke said riaamode 3 and inverse 1 is what you want.
Thanks, JP!

Here is what I measure for a Soundsmith SMMC4, a rather good cartridge with less than 50 hours play time on it, VTF=1.2g.

Do the results look good or bad or indifferent?

What is the likely cause of the uneven response between 10kHz and 20kHz?

I have a bunch of cartridges to test, but don't want to contribute results to the library thread if my measurements are faulty.

SoundSmith SMMC4 (1.2g)_140pF + 100pF_CBS STR 100 (1961).png
 
I would say you need A Clearaudio TRS-1007 test record , your CBS seems worn out
 
shaky and uneven response at «low «frequency and the same high end sharp peak on two different cartridges.
Left and right channel move more than I am used to see.
And the it is the age 1961. VTA was different then , could be a problem for newer cartridges…?
 
Last edited:
shaky and uneven response at «low «frequency and the same high end sharp peak on two different cartridges.
Left and right channel move more than I am used to see.
And the it is the age 1961. VTA was different then , could be a problem for newer cartridges…?
I'm going to try making a measurement with the same cartridge but mounted on a different turntable. That would eliminate the table/arm being the source of those anomalies. I'll report back ... thanks for the help so far!
 
I'm going to try making a measurement with the same cartridge but mounted on a different turntable. That would eliminate the table/arm being the source of those anomalies. I'll report back ... thanks for the help so far!
Here is a measurement of the same cartridge (Soundsmith SMMC4) but in this case mounted on a B&O Beogram 1800. Using the same test record. Compare with the plot in Post #982 above. For some reason there is no data above 18kHz in this run - perhaps I trimmed the data too aggressively, although I was very careful.

Would welcome some interpretation of the differences, as I'm out of my depth :)


SMMC4 (1.2g) on Beogram 1800 _??pF + 100pF_CBS STR 100 (1961).png
 
??ValueError: The length of the input vector x must be greater than padlen, which is 12.
 
AT-OC9MLII ,What is going on here? I am loosing parts of the crosstalk plot. In the signal too low maybe, recording flat at even 72gain did not recover crosstalk, Should I try recording with RIAA EQ next?
1711604981516.png




1711605179885.png
 
Redid it with RIAA active and configured script accordingly , and crosstalk appears all the way. I suspect it has to do with the level of the signal that can be detected.
 
I did some work on my auto-crop script for the 1007 Records @JP . It now brings together both variants into one, which can be chosen as prompted.
i know, this is not for everyone, but since many use 1007 Records, this should make life easier for those =)


Python:
'''

This script will take your recorded test tracks with their 1kHz pilot tone and subsequent silence after the sweep in 96kHz format.
It will cut out the sweep and, depending on your desired operation, swap channels, so that the measurement script can do its work.

This script assumes that you are using a "temp" subfolder in the directory where your script is located.
The "temp" subfolder is where your recorded audio files should be located.
The naming convention used is that your recorded files are named "1007_L+R.wav" if you recorded Track 3 or 11 on your 1007 Test Record.
This is only good for the Frequency Response and Harmonics; it will NOT give you a Crosstalk measurement!

If you recorded Track 1 or 9 and 2 or 10 of a 1007 Test Record, the files should be named "1007_L.wav" and "1007_R.wav".
The script will prompt you for the variant you want to execute and save "wavefile1.wav" and "wavefile2.wav" in the same temp folder.

You can now go on and use the measurement script. Please check that your naming convention fits these scripts.

1 - Single File, Split Channels
2 - Separate Files, Swap Channels

You may need to adjust your "post_pilot_duration" (in seconds) if the script cuts too early or late for your setup.


'''
import os
import numpy as np
from scipy.io import wavfile
from scipy.signal import stft, butter, sosfilt

def bandpass_filter(data, sample_rate, lowcut=18, highcut=22, order=5):
    sos = butter(order, [lowcut / (0.5 * sample_rate), highcut / (0.5 * sample_rate)], btype='band', output='sos')
    return sosfilt(sos, data)

def detect_sweep_start(data, sample_rate, post_pilot_duration=50.5):
    filtered_data = bandpass_filter(data, sample_rate)
    f, t, Zxx = stft(filtered_data, fs=sample_rate, nperseg=1024)
    target_freq_index = np.argmin(np.abs(f - 20))
    magnitude = np.abs(Zxx[target_freq_index, :])
    threshold = np.max(magnitude) * 0.1
    sweep_start_idx = np.where(magnitude > threshold)[0][0]
    sweep_start_time = t[sweep_start_idx]
    sweep_end_time = sweep_start_time + post_pilot_duration
    return sweep_start_time, sweep_end_time

def save_trimmed_audio(data, sample_rate, start_time, end_time, source_file, file_name='wavefile', swap_channels=False):
    start_sample = int(start_time * sample_rate)
    end_sample = int(end_time * sample_rate)
    trimmed_data = data[start_sample:end_sample]
    if swap_channels and trimmed_data.shape[1] > 1:
        trimmed_data = trimmed_data[:, [1, 0]]
    output_dir = os.path.dirname(source_file) if source_file else '.'
    output_path = os.path.join(output_dir, f"{file_name}.wav")
    wavfile.write(output_path, sample_rate, trimmed_data)
    return output_path

def process_audio():
    choice = input("Choose operation mode:\n1. Single file, split channels\n2. Separate files, with channel swap\nEnter 1 or 2: ")
    base_path = os.path.join(os.path.dirname(__file__), 'temp')
   
    if choice == '1':
        source_audio_file = os.path.join(base_path, '1007_L+R_Downsample.wav')
        sample_rate, data = wavfile.read(source_audio_file)
        mono_data = data.mean(axis=1) if data.ndim > 1 else data
        sweep_start_time, sweep_end_time = detect_sweep_start(mono_data, sample_rate)
        left_file, right_file = save_trimmed_audio(data, sample_rate, sweep_start_time, sweep_end_time, source_audio_file, "wavefile")
        print(f"Trimmed audio files saved as {left_file} and {right_file}")
    elif choice == '2':
        left_audio_file = os.path.join(base_path, '1007_L.wav')
        right_audio_file = os.path.join(base_path, '1007_R.wav')
        sample_rate, data_left = wavfile.read(left_audio_file)
        sweep_start_time, sweep_end_time = detect_sweep_start(data_left.mean(axis=1), sample_rate)
        wavefile1_path = save_trimmed_audio(data_left, sample_rate, sweep_start_time, sweep_end_time, left_audio_file, "wavefile1")
        sample_rate, data_right = wavfile.read(right_audio_file)
        sweep_start_time, sweep_end_time = detect_sweep_start(data_right.mean(axis=1), sample_rate)
        wavefile2_path = save_trimmed_audio(data_right, sample_rate, sweep_start_time, sweep_end_time, right_audio_file, "wavefile2", swap_channels=True)
        print(f"Trimmed audio files saved as {wavefile1_path} and {wavefile2_path}")
    else:
        print("Invalid choice. Please run the script again and enter 1 or 2.")

if __name__ == "__main__":
    process_audio()
 
Thanks. I’m pretty much done on one that detects the end of the pilot and the end of the sweep, so it works for almost any record. I just have to add tone start for TRS-1005 as there’s a delay between the pilot and the sweep, and then incorporate it in to the measurement script.
 
Here is a measurement of the same cartridge (Soundsmith SMMC4) but in this case mounted on a B&O Beogram 1800. Using the same test record. Compare with the plot in Post #982 above. For some reason there is no data above 18kHz in this run - perhaps I trimmed the data too aggressively, although I was very careful.

Would welcome some interpretation of the differences, as I'm out of my depth :)


View attachment 348396
Assuming the test record is okay and acceptable, I'd say the Soundsmith has a few dB more at the extremes than the B&O original did! NOT suggesting it's an issue at all, just noting.. B&O originals could be tenperature sensitive and my previuous MMC 20E, EN and CL samples just don't 'do it ' in wintertime (all objectively reviewed and noted so not subjective) as the hf dips and tracking goes off a bit and I seem to recall the later MMC 5 - 1 models weren't hugely different.

As said above, can you get a modern test record and try again, starting with the B&O deck. Granny sucking eggs here? but the B&O deck wiring used to have pin 2 of the DIN plug as *signal* return/screen and the outer metallic 'shell' of the DIN plug as chassis grounding. before special RCA-DIN adaptors were available with a separate outer grounding fly-lead, we used to use thin bell wire, stripped at both ends and one end was pushed into the DIN socket before the B&O plug was inserted. This removed hum for us even if it was an ugly-ish solution.... Some later B&O decks came with conventional RCA plus grounding wire cables (RX2 and TX2 which used the later pickups your Soundmith is based around). Sorry if you knew this already...
 
Not sure if this is the appropriate place to ask, but… Any commentary on the “Ultimate Analog Test LP” vs the other top choices CBS and CA?
 
I find the Ultimate Analog kind of useless. The VTA track is made with wrong modulation - it is stereo It should have been mono Out of phase to help analyse VTA. And you need reverse RIAA after your RIAA!!!( read the back side notes) The sweeps are poor. The only good thing about that record is the front page photo…

I have got close to 30 test records.
The ones you need are Ortofon for Azimuth, channel balance and Tracking/ Anti-skating. The Ortofon sweep makes no sense… why they include such poorly executed track is a mystery.
And then Clearaudio CA-TRS-1007 for frequency sweep, if you cannot get that try a CBS-100 for comparison of Frequency response only.Both work well with the script here.
 
Last edited:
There is only one current Ortofon test record that is sold commercially .

The track titles should be self explanatory .
 
hmm, the Ortofon Test Record frequency sweeps only start at 800 Hz and above. No doubt there is some vinyl limitation behind this, but it sure doesn't help us to measure a full frequency response!
 
Back
Top Bottom