COPPER

A PS Audio Publication

Issue 23 • Free Online Magazine

Issue 23 QUIBBLES AND BITS

Cardinal Sinc

Cardinal Sinc

PCM encodes audio as a set of samples, each representing as closely as possible the actual amplitude of the audio waveform at some specific instant in time.  Recreating the audio is then a matter of using those samples to reconstruct the original waveform, data point by data point, because that’s what the data samples represent, isn’t it?  Actually, strictly speaking, it’s more complicated than that.

The reason for this was touched upon in my column a few weeks back, titled “50 Years After”.  It is a subtle point, but I think it’s worth understanding, so I’ll try to explain it in more detail.  In doing so, please bear in mind that for everything I am going to describe, I assume strict adherence to the Nyquist criterion, so that all waveforms contain no frequencies above one-half of the sampling rate.  When this strict criterion is breached, all bets are off.

When you want to recreate a waveform from a file full of samples, you need to ask what the samples actually represent, in isolation.  The totality of all of the samples is easily understood in the context of the ensemble, but what is the meaning, mathematically, of any one individual sample?  Only by fully understanding that meaning can you fully understand the process of using that sample – and its cohorts – to recreate the original waveform.

Let’s say we have a digitized audio waveform that comprises N samples.  We can consider that waveform to be the result of adding together N separate waveforms, each comprising sample values that are all zero, except for one non-zero value.  The non-zero values of each separate waveform each occupy different sample positions, and their values are those of the samples in the equivalent positions in the master waveform.  Summed together, all these ‘single-point’ waveforms add up to the original master waveform.

We have a term that we use to describe a ‘single-point’ waveform.  It is called an impulse, and it has a number of interesting properties (most of which I won’t be getting into in this column).

At this point I want to make a brief deviation, for reasons that will only become apparent later, in order to look at the process of extracting one individual sample from a data file.  I want to do this by placing a “window” over the entire data file, with a single gap in the window that allows you to view the data file only at the chosen sampling point.  This “window” function comprises a set of values that line up precisely with the contents of the data file.  Every value in the “window” function determines whether or not I can see through the window and view the sample behind it.  To extract just one sample, the window must be “open” at the one position that corresponds to the desired sample, and “closed” everywhere else.  In other words, my “window” function has a value of unity where the window is “open”, and zero where the window is “closed”.  It is, in fact, a unity-valued impulse function.

Mathematically, the process of applying a window function is called convolution.  By convolving an impulse function with a data file, the result is the specific sample at the location in the data file corresponding to the impulse.  Clearly, we can individually isolate each sample of the entire data file by convolving the data file with an appropriately aligned unity-valued impulse function.  Bear that in mind, and I’ll come back to it again later.

So, what kind of analog waveform does this digital impulse actually represent?   Consider the Sin() function (i.e. a sine wave).  It oscillates between positive and negative, crossing the x-axis (where it has a value of zero) at regularly-spaced intervals.  We’re looking for a function which behaves like the Sin() function, but somehow replaces one – and only one – of those zeros with a +1.  It turns out that our solution is a Sinc() function, related to the Sin() function as follows:

Sinc(x) = Sin(x)/x

When x=0, Sinc(0) evaluates to Sin(0)/0, which – surprisingly perhaps – works out be +1.  Hallelujah for that!

The oscillations of the Sinc() function go on infinitely in each direction, dying out slowly along the way.  From this diagram we can clearly see how our impulse data (the red dots) encode a Sinc() function (the blue curve), and how the samples get to be zero-valued everywhere except in the middle.  Therefore, by treating every individual sample in a digital audio file as a separate impulse waveform (as illustrated in my first diagram) every single one of them can be seen to actually encode its own Sinc() function.  You can also see from the spacing of the red dots that the particular Sinc() function we require is determined by the sample rate, and, aside from its amplitude, will therefore be the same every time.  In fact, the particular Sinc() function we want is Sinc(2πFst), where t is time, and Fs is the sample rate.

I can now take a final step – which is very important.  It is also perhaps tricky to grasp, so I apologize for that in advance.  Earlier, I mentioned convolution, which is using one function as a “window” through which to view another function.  We convolved the sampled digital waveform with the digital impulse function, and in doing so isolated an individual sample value.  It can easily be shown that the same is therefore true of their analog counterparts.  In other words, by convolving the equivalent analog waveform with a Sinc() function, we produce the exact same individual, isolated, sample value.  You might want to read that again …

What this actually shows is that the process of convolving a waveform with the function Sinc(2πFst) is the exact mathematical description for sampling that waveform at a sample rate of Fs.  This is a result of profound importance because it provides the crucial bridge – a lossless transformation – between the analog and digital worlds.

Knowing all this enables us to look at our sampled values, and figure out what we must do to transform them – losslessly – back into their original analog form.  The proper mathematical transformation involves taking every single sample value, and recreating its matching Sinc() function.  The sum of all those Sinc() functions will be the exact original waveform.  Unfortunately, though, recreating and summing Sinc() functions is a practical impossibility.  There is just no way to do that in any sort of real-world DAC.  Similarly, there is no way to convolve an analog waveform with a Sinc() function in a real-world ADC.  All of which brings us back down to earth again with a bump.  But it provides us with a framework against which we can measure all the things we can do, and determine how well we are doing them.

More from Issue 23

View All Articles in Issue 23

Search Copper Magazine

#231 Piano Prodigy Jude Kofie Releases His Debut Album On Octave Records by Frank Doris Jun 01, 2026 #231 Underappreciated Artists, Part Two: City Boy by Rich Isaacs Jun 01, 2026 #231 Music and the Art of Creation: Talking With Saxophonist Rob Scheps by Joe Caplan Jun 01, 2026 #231 How to Play in a Rock Band, 24: Further Adventures at the 2026 Montauk Music Festival by Frank Doris Jun 01, 2026 #231 Courtney Barnett: Creature of Habit by Wayne Robins Jun 01, 2026 #231 Angine de Poitrine: Interstellar Guitar Rock Saviors Headed for Late-Night TV Pop Stardom? by Mark Lepage Jun 01, 2026 #231 My Impressions of AXPONA 2026, Part One by Frank Doris Jun 01, 2026 #231 2026 La Jolla Concours d'Elegance: Another Aesthetic Feast by B. Jan Montana Jun 01, 2026 #231 Country Music Icon Jo Dee Messina’s Bridges: A New Beginning by Ray Chelstowski Jun 01, 2026 #231 The Luxury Dispatch Hosts a Video Podcast With Ken Kessler by Ken Kessler Jun 01, 2026 #231 The Vinyl Beat: Tracking in the Motor City by Rudy Radelic Jun 01, 2026 #231 Lots of Fun With DSP: The Ferrum Audio WANDLA DAC and Its Tube Mode by Frank Doris Jun 01, 2026 #231 From The Audiophile's Guide: Digital Source Components and Streaming Audio by Paul McGowan Jun 01, 2026 #231 Onkyo’s Monster M-510 power amplifier by The Staff at Just Audio Jun 01, 2026 #231 PS Audio in the News by PS Audio Staff Jun 01, 2026 #231 Naming Convention by Peter Xeni Jun 01, 2026 #231 Les Invisibles by Frank Doris Jun 01, 2026 #231 Wildlife Scene by James Schrimpf Jun 01, 2026 #230 Camaraderie by B. Jan Montana May 04, 2026 #230 AXPONA 2026: A Family Gathering by Paul McGowan May 04, 2026 #230 Pianist Ryan Benthall Explores Jazz Realms and Far Beyond With Divine Sky by Frank Doris May 04, 2026 #230 The Vinyl Beat in AXPONA-Land by Rudy Radelic May 04, 2026 #230 Teddy Thompson’s Musical Growth Deepens With Never Be the Same by Ray Chelstowski May 04, 2026 #230 More Fun in the Sun: Florida Audio Expo, Part Two by Frank Doris May 04, 2026 #230 CanJam NYC 2026 Show Report: Heady Sound, Part Two by Frank Doris and Harris Fogel May 04, 2026 #230 Sonic Youth On Murray Street by Wayne Robins May 04, 2026 #230 Graffeo Coffee: A Symphony of Sensory Experience by Joe Caplan May 04, 2026 #230 The Saul Authority: The Story of Hi-Fi Pioneer Saul Marantz by Olivier Meunier-Plante May 04, 2026 #230 How to Play in a Rock Band, 23: Encounters With Famous Musicians, Part Two by Frank Doris May 04, 2026 #230 An Outlier in the Rack: A Vintage BIC Beam Box by The Staff at Just Audio May 04, 2026 #230 PS Audio in the News by PS Audio Staff May 04, 2026 #230 A Cautionary Tale by Rich Isaacs May 04, 2026 #230 Reel-to-Reel Roots, Part 33 (Revised): Ken Kessler Reports On the 2026 (British) AudioJumble by Ken Kessler May 04, 2026 #230 Text Messaging by Frank Doris May 04, 2026 #230 The Audiophile Rat Race by Peter Xeni May 04, 2026 #230 On the Rocks by Rich Isaacs May 04, 2026 #229 The Earliest Stars of Country Music, Part Three by Jeff Weiner Apr 06, 2026 #229 The Healing Power of Music and Sound at the Omega Institute by Joe Caplan Apr 06, 2026 #229 CanJam NYC 2026 Show Report: Heady Sound, Part One by Frank Doris Apr 06, 2026 #229 Florida Audio Expo 2026: Warming Up to High-End Audio, Part One by Frank Doris Apr 06, 2026 #229 Quick Takes: Anne Bisson, Sam Morrison, The Velvet Underground, and the Stooges by Frank Doris Apr 06, 2026 #229 The Vinyl Beat: New Arrivals, and Old Audio Show Demo Scores to Settle by Rudy Radelic Apr 06, 2026 #229 Harvard Gets a High-End Audio Education by Frank Doris Apr 06, 2026 #229 No Country for Old Knees by B. Jan Montana Apr 06, 2026 #229 How To Play in A Rock Band, 22: Encounters With Famous Musicians, Part 1 by Frank Doris Apr 06, 2026 #229 The Soulful Grooves of Guinea-Bissau by Steve Kindig Apr 06, 2026 #229 Four-Hand Piano Performance at Its Finest by Stephan Haberthür Apr 06, 2026

Cardinal Sinc

Cardinal Sinc

PCM encodes audio as a set of samples, each representing as closely as possible the actual amplitude of the audio waveform at some specific instant in time.  Recreating the audio is then a matter of using those samples to reconstruct the original waveform, data point by data point, because that’s what the data samples represent, isn’t it?  Actually, strictly speaking, it’s more complicated than that.

The reason for this was touched upon in my column a few weeks back, titled “50 Years After”.  It is a subtle point, but I think it’s worth understanding, so I’ll try to explain it in more detail.  In doing so, please bear in mind that for everything I am going to describe, I assume strict adherence to the Nyquist criterion, so that all waveforms contain no frequencies above one-half of the sampling rate.  When this strict criterion is breached, all bets are off.

When you want to recreate a waveform from a file full of samples, you need to ask what the samples actually represent, in isolation.  The totality of all of the samples is easily understood in the context of the ensemble, but what is the meaning, mathematically, of any one individual sample?  Only by fully understanding that meaning can you fully understand the process of using that sample – and its cohorts – to recreate the original waveform.

Let’s say we have a digitized audio waveform that comprises N samples.  We can consider that waveform to be the result of adding together N separate waveforms, each comprising sample values that are all zero, except for one non-zero value.  The non-zero values of each separate waveform each occupy different sample positions, and their values are those of the samples in the equivalent positions in the master waveform.  Summed together, all these ‘single-point’ waveforms add up to the original master waveform.

We have a term that we use to describe a ‘single-point’ waveform.  It is called an impulse, and it has a number of interesting properties (most of which I won’t be getting into in this column).

At this point I want to make a brief deviation, for reasons that will only become apparent later, in order to look at the process of extracting one individual sample from a data file.  I want to do this by placing a “window” over the entire data file, with a single gap in the window that allows you to view the data file only at the chosen sampling point.  This “window” function comprises a set of values that line up precisely with the contents of the data file.  Every value in the “window” function determines whether or not I can see through the window and view the sample behind it.  To extract just one sample, the window must be “open” at the one position that corresponds to the desired sample, and “closed” everywhere else.  In other words, my “window” function has a value of unity where the window is “open”, and zero where the window is “closed”.  It is, in fact, a unity-valued impulse function.

Mathematically, the process of applying a window function is called convolution.  By convolving an impulse function with a data file, the result is the specific sample at the location in the data file corresponding to the impulse.  Clearly, we can individually isolate each sample of the entire data file by convolving the data file with an appropriately aligned unity-valued impulse function.  Bear that in mind, and I’ll come back to it again later.

So, what kind of analog waveform does this digital impulse actually represent?   Consider the Sin() function (i.e. a sine wave).  It oscillates between positive and negative, crossing the x-axis (where it has a value of zero) at regularly-spaced intervals.  We’re looking for a function which behaves like the Sin() function, but somehow replaces one – and only one – of those zeros with a +1.  It turns out that our solution is a Sinc() function, related to the Sin() function as follows:

Sinc(x) = Sin(x)/x

When x=0, Sinc(0) evaluates to Sin(0)/0, which – surprisingly perhaps – works out be +1.  Hallelujah for that!

The oscillations of the Sinc() function go on infinitely in each direction, dying out slowly along the way.  From this diagram we can clearly see how our impulse data (the red dots) encode a Sinc() function (the blue curve), and how the samples get to be zero-valued everywhere except in the middle.  Therefore, by treating every individual sample in a digital audio file as a separate impulse waveform (as illustrated in my first diagram) every single one of them can be seen to actually encode its own Sinc() function.  You can also see from the spacing of the red dots that the particular Sinc() function we require is determined by the sample rate, and, aside from its amplitude, will therefore be the same every time.  In fact, the particular Sinc() function we want is Sinc(2πFst), where t is time, and Fs is the sample rate.

I can now take a final step – which is very important.  It is also perhaps tricky to grasp, so I apologize for that in advance.  Earlier, I mentioned convolution, which is using one function as a “window” through which to view another function.  We convolved the sampled digital waveform with the digital impulse function, and in doing so isolated an individual sample value.  It can easily be shown that the same is therefore true of their analog counterparts.  In other words, by convolving the equivalent analog waveform with a Sinc() function, we produce the exact same individual, isolated, sample value.  You might want to read that again …

What this actually shows is that the process of convolving a waveform with the function Sinc(2πFst) is the exact mathematical description for sampling that waveform at a sample rate of Fs.  This is a result of profound importance because it provides the crucial bridge – a lossless transformation – between the analog and digital worlds.

Knowing all this enables us to look at our sampled values, and figure out what we must do to transform them – losslessly – back into their original analog form.  The proper mathematical transformation involves taking every single sample value, and recreating its matching Sinc() function.  The sum of all those Sinc() functions will be the exact original waveform.  Unfortunately, though, recreating and summing Sinc() functions is a practical impossibility.  There is just no way to do that in any sort of real-world DAC.  Similarly, there is no way to convolve an analog waveform with a Sinc() function in a real-world ADC.  All of which brings us back down to earth again with a bump.  But it provides us with a framework against which we can measure all the things we can do, and determine how well we are doing them.

0 comments

Leave a comment

0 Comments

Your avatar

Loading comments...

🗑️ Delete Comment

Enter moderator password to delete this comment:

✏️ Edit Comment

Enter your email to verify ownership: