Category Archives: DSP

Fast and Efficient Pitch Detection: Bitstream Autocorrelation

      DSP, Electronics, Pitch Detection, Software

So, since last year, I’ve been mulling over a unique, and extremely fast(!) Autocorrelation scheme for monophonic pitch detection. Last weekend, I finally got myself to write the proof of concept. It’s not like any autocorrelation scheme I’ve seen before. I am still wondering why no one has thought about doing it this way. As far as I can tell, this is my invention, but please tell me if there’s something I am missing and if I’m not the first to actually do it this way. I dubbed the technique Bitstream Autocorrelation.

Unlike standard Autocorrelation, my scheme works on single bit binary data streams instead of floating point (or fixed point) real numbers. Compared to standard Autocorrelation, Bitstream Autocorrelation is wicked fast. As I’ve been working on multiple channels of audio on small Microcontrollers, I’ve consistently shied away from Autocorrelation schemes for pitch detection (see my original article: Fast and Efficient Pitch Detection). Popular time-domain Autocorrelation (ACF)  based pitch detection, including variants such as AMDF (Average Magnitude Difference Function), ASDF (Average Squared Difference Function),  YIN, and MPM,  are quite expensive in terms of CPU cycles required (ACF is basically an N² operation for N samples).

Continue reading

Fast and Efficient Pitch Detection: Double Trouble

      DSP, Electronics, Infinity, Pitch Detection, Software

This D string was driving my pitch detector nuts. It’s jumping from fundamental to octave and back all over the place. Can’t make up its mind! The effect is like a wacko version of Satch with a whammy pedal gone haywire.

What the hell am I talking about? Last month, I wrote about a fast and efficient software multichannel pitch detection scheme using dual peak-detectors. I needed it to be as efficient as possible, so I can run multiple detectors simultaneously using a small 32 bit microcontroller (MCU). Most of the time, it works really well, except in some cases, like that troublesome D string.

Continue reading

Fast and Efficient Pitch Detection

      DSP, Electronics, Infinity, Pitch Detection, Software

Phase Accurate Synthesizer (blue) Tracking Guitar (yellow)

I needed to implement real-time, multichannel pitch detection in software using a small ARM Cortex-M4 microcontroller (MCU). My all-time favorite is the STM32F4 family from STMicroelectronics. It has DSP and single precision FPU instructions and can reach up to 225 DMIPS/608 CoreMark at up to 180 MHz operating frequency. Not too bad, actually, especially for this class of MCUs, but it can easily get overwhelmed with complex DSP code we normally take for granted in a desktop or laptop machine with multi-cores running in the GHz range.

I’ve been working on this for quite some time now and I am quite pleased with the results. I now have a fast, accurate, low-latency, phase-correct and efficient multichannel pitch detection. I thought I’d like to share. In case you are wondering, no, it is not for note to MIDI conversion, although that is obviously one application.

Continue reading

Infinity Reloaded

      DSP, Infinity

Inf-Logo-2016Infinity… It’s all about sustain. Our goal is and will always be polyphonic sustain. Polyphonic sustain, plus extensive processing for each string, will give us musicians full control over the dynamics of the guitar. Sustain is one of the reasons why we drive amplifiers using excessive gain. We want to make the guitar sing, gently weep, or even scream like invading aliens about to decimate an entire population.

Yet, there’s still so much to be desired. We can only push the gain so much before noise dominates the trailing end of a sustained note. So we make it louder such that we induce feedback through the speakers. Or, we use sustain drivers such as the Ebow, the Sustainiac, or the Fernandez Sustainer. All of which can indefinitely sustain one note at a time (some say you can sustain more than one note, but I do not want to digress). What I want is controlled polyphonic sustain. It’s been done before, e.g. the Moog Guitar, or Keith McMillen’s StrongArm, but I’d like to offer an alternative solution with a modular architecture and an accessible open design.

Continue reading

Virtual Pickups Revisited

      Design, DSP, Effects, Evolution, Filters, Modeling, Nu Series, Open Source, Pickups, Software

A little background: I’ve written a series of articles before about Virtual Pickups and how they are implemented in software (DSP). It’s a three part series: Part 1, Part 2 and Part 3. I wrote about Standing Waves, Nodes, Antinodes and Pickup Position, Comb Filters, some underlying Math and Simulation in DSP code. I also presented what I thought was a minimal interface I really like.

Infinity_GUIIt has taken a while (I can’t believe it has been almost 2 years now!), and now I’m back to writing the software. What has transpired since then? Production of the XR and the Nu took the most of our time and I’m left with very little time to do what we I best: R&D. Now that the Nu is out, it makes sense to go back, pick up and continue where we left off, starting with the GUI.

Continue reading

Infinity goes FM

      DSP, Electronics, Evolution, Hardware, Infinity, Processing

Testing the FM synthesizer

What do I do on Christmas eve? What else, but hack some C++ code. I got a new highly optimized sustain driver design that also acts as pickup! The power consumption is now at 20mA, each. With the new drivers, I upgraded to FM synthesis from simple additive synthesis. Now I will be driving the strings with FM waves, the same tech behind the 80s Yamaha DX7 synthesizer. FM synthesis was developed by John Chowning at Stanford University in the 70s. In the 80s up ’till the mid 90s, Yamaha virtually monopolized the market with their hardware implementation. The patent expired in 1995.

FM is cool! I think FM synthesis is the best fit for the Infinity project.

Merry Christmas Everyone!


Computational Hexaphonic Guitar

      Design, DSP, Electronics, Innovation, Nu Series, Pickups

It’s nice to see our pickups in the academe. Chengxiang Ren and Jeffrey Huang, Cornell University, Electrical and Computer Engineering, used the Cycfi Neo (now Nu) polyphonic pickups in their Master’s project. I’ll try to learn more about this project and these cool people. Their ideas are perfectly aligned with mine.

RenHuang-2In this project, we designed a computational guitar that consists of a hexaphonic pickup and a digital signal processor (DSP). As an example application, we implemented a pitch correction algorithm that corrects the pitch of each string in real-time, which enables us to play the guitar “in-tune” when it is not. Our pitch correction algorithm operates in real time on a Texas Instrument DSP board (TI DSK6713) and combines frequency-domain pitch detection and time-domain pitch shifting.

Continue reading

Easy Peasy Lemon Squeezy

      Electronics, Filters, Nu Series, Pickups, Side Winder



“Make things as simple as possible, but not simpler.” Ah my favourite Einstein quote. Apart from the Infinity project, here’s what we’ve been working on for the past couple of months: Coming very soon, an easy to use Neo setup. This solderless system includes everything you will need to get an extended response pickup system up and running as quickly as possible. This setup shown is for a Fender Stratocaster S-S-S configuration, but various customisations are possible. For example, the bridge pickup can be paired with a Neo6 multichannel pickup (my favourite setup!). Dual humbuckers? Sure, that’s two pairs (four pickups). The tonal combinations would be awesome if you combine four pickups in various ways. Or how about 6 pickups!

In addition to 6 string pickups, available on request, we will also offer pickups for 7, 8 and 9 strings (we are committed to the ERG crowd!). We use premium components only (Bourns potentiometers, Switchcraft jacks, gold-plated headers and connectors etc).

If you wish for a highly customised setup, don’t hesitate to send us a message. Basic customisation options include:

  1. Volume control
  2. 5-way switch
  3. Passive low-pass filter
  4. Passive high-pass filter
  5. Active resonant filter with variable Q and sweepable frequency
  6. Lithium-Ion battery pack and charger (not shown)
  7. Single-coil or Sidewinder

Here’s the system on a Fender Stratocaster. I love it so much I decided to keep it permanent! I’ll post some sound clips soon.


Cycfi Extended Response pickup set



Extended Response pickups on a Strat!

Virtual Pickups Part 3

      DSP, Electronics, Filters, Nu Series, Pickups

This is the third and final instalment of the Virtual Pickups series. I changed the title from Virtual Pickup Placement to better express the actual subject which will now go beyond pickup placement. This time, we will talk about simulating pickup width —its aperture. We will also talk about compensating for the actual pickup’s comb filter effect using an inverse comb filter. Finally, we’ll deal with the electrical characteristics of pickups.

Feel free to review the previous articles:

Pickup Width

Referring to J. Donald Tillman’s article again, we will simulate the effect of pickup width. Pickups sense the string over an area spanning the width of the pickup’s magnetic field. This sensing area is the “aperture” of the pickup. Various pickups have different widths. The article mentions 1 inch for the typical single-coil and 2.5 inches for the typical PAF style humbucker.

If you read the first article in this series, you know that a single pickup point can be simulated using a feedforward comb filter. To simulate pickup width, we want to average all the points over the aperture of the pickup. Here are the computed frequency response of a 1 inch single-coil pickup and a 2.5 inch humbucker-stype pickup.

The filtering effect of a 1.0 inch wide pickup on the low E string. -3dB point 1820 Hz, first null 4200 Hz.

The filtering effect of a 2.5 inch wide pickup on the low E string. -3dB point 728 Hz, first null, 1680 Hz.

Notice the low-pass response with a 6dB per octave slope with unity gain at D.C. This is the effect of integration. I was able to replicate this frequency response using an integrator and a comb filter.

Integrator plus Feedforward Comb Filter.

Integrator plus Feedforward Comb Filter.

The filter integrates (accumulates) all the incoming signal and subtracts the delayed signal with a delay time proportional to the ½ the aperture size of the pickup. With a sampling frequency of 44100 samples per second, the delay line for the entire length of the E string will be 535.12 samples (44100 / 82.41). For a scale length of 25.5 inches and a pickup aperture of 2.5 inches, the delay line required will be: 535.12 x 2.5 / 25.5 = 52.46 samples.

Here’s the actual frequency response given the comb-filter configuration above for a 1 inch single-coil pickup and a 2.5 inch humbucker-type pickup.

1 inch wide pickup response.

1 inch wide pickup response.

2.5 inch pickup response.

2.5 inch pickup response.

These frequency graphs are exactly as expected. Now all we have to do is cascade that with our previous filters.

After some listening tests (I’ll share some more sound clips hopefully soon), I find the pickup width filters make the sound too muddy. The details are somehow lost. I think there are a couple of issues with the model Mr. Tillman proposes in his article. In this model, for example, he assumes that averaging the point response over the aperture length, while isn’t completely accurate, makes a fine first approximation. I don’t think I agree with that. The sensitivity near the poles is crucial. For actual pickups, the response falls off very rapidly beyond 0.4” (10 mm) from the poles (see Practical Pickup Measurements). Also, the aperture width of 2.5 inches for a humbucker and 1.0 inch for a single coil are too wide. I had better results with a 1.25 inch wide aperture for a humbucker. I’m not sure how he derived the 2.5 inch wide aperture. I measured the pickup width of a humbucker and it is indeed 1.25 inch wide. I also think that a zero (or close to zero) aperture width for a single coil sounds best.

In the end, for a humbucker, I find that simply placing two pickups side by side, spaced 0.68” apart, gives the best results. 0.68” happens to be the pole spacing of a typical PAF style humbucker. Here’s the frequency response I got:

Double Coil Pickup Response

Double Coil Pickup Response

Double virtual coils, plus a resonant low-pass filter (see Pickup Electrical Characteristics section below), sound very convincing for a humbucker.

Inverse Comb

Want to go further? The astute reader will ask: OK, but how about the response of the actual (non-virtual) pickup? Wouldn’t that have its own comb notches that imparts its own colour? Yes it will! And to compensate for that, we need an inverse comb filter. That can be done using a feedback comb filter. Recall:


The frequency response of a feedforward and a feedback comb filter, for the open E string, are as follows:

Feedforward Comb Filter Spectrum

Feedforward Comb Filter Spectrum.

Feedback Comb Filter Spectrum.

Feedback Comb Filter Spectrum.

Notice that the Feedback Comb Filter Spectrum is the inverse of the Feedforward Comb Filter Spectrum. We can use a feedback comb as a pre-filter to negate the effect of the actual pickup. The amount of signal being fed back should be less than 100% for this to be stable, otherwise, you will get infinite repeats.

Pickup Electrical Characteristics

Finally, what we haven’t covered yet is the effect of the actual pickups’s electrical characteristics. This is the easy part! The guitar pickup is equivalent to this circuit (lifted from The Secrets of Electric Guitar Pickups by Helmuth E. W. Lemme):

Electrical equivalent circuit of a magnetic pickup.

Electrical equivalent circuit of a magnetic pickup.

This is a simple resonant low-pass filter (adjustable frequency and Q with a 12db per octave slope). The effect is independent from the scale length and string tuning and can therefore be placed after everything else. Ideally, you will need one of these per virtual pickup. More if you want multiple resonant peaks.

Here’s a link to a table of different resonant frequencies of some well-know pickups. The graph below is the EQ settings for a resonant low-pass filter set at 3.3 kHz and a Q of 2.5:

Resonant Low Pass Filter

Resonant Low Pass Filter

Photographs and Paintings

starry-nightLet me reiterate that I am not aiming for exact emulation of specific guitars. I want to use emulation only as a starting point so the user will have something familiar to start with.

Accurate emulations can be achieved using convolution from sampled impulse responses of various instruments. Convolution with Impulse Responses can accurately capture anything: expensive microphones, vintage EQs, speaker cabinet response, full cathedral reverberations, etc. Essentially, anything that can be modeled as a filter can be captured. And yes, the guitar pickup as well as the guitar body are just filters!

One major drawback of convolution is that it is computationally expensive. Of course, we now live in a world full of very powerful multi-core processors, so that’s not really a problem anymore. Later, we’ll definitely take advantage of convolution. The math and the algorithms are already well established. We’ll have more on that soon!

Another drawback of convolution is the lack of intuitive control. With convolution, we work with sampled impulse responses which are basically raw waveforms in memory. It is possible to tweak an impulse response in the frequency domain (its spectrum), but that’s it. Doing so is like tweaking a very detailed EQ (much like editing a terrain map). The EQ’s frequency response does not say anything about pickup positions, pickup width, combining pickups, body resonance, etc.

The process of capturing an impulse response is sampling. A friend asked me once about the difference between a synthesiser (analog, FM, etc.) and a sampler. My analogy: the sound generated by synthesisers and samplers are analogous to paintings and photographs. Sampler files are like photographs. They are snapshots of the real world. On the other hand, sound generation using various forms of synthesis are like paintings. The artist uses various tools like brushes and paint to capture the real (or unreal!) world.

So here, I am donning a painter’s hat. I want to paint the sound, instead of taking a photograph of the sound. Later, I’ll wear a photographer’s hat and combine the best of both worlds.

There you go! Next time, I will present some C++ code! We’ll also see some more audio samples with combinations of these filters in action.

Get Rad and Prosper!

Further Reading

  1. Convolution
  2. Convolution Processing with Impulse Responses
  3. Response Effects of Guitar Pickup Position and Width
  4. The Secrets of Electric Guitar Pickups
  5. Measuring Impedance and Frequency Response
  6. Resonant frequencies of some well-know pickups
    for various parallel capacitors
  7. Practical Pickup Measurements