Re: [linux-audio-dev] Algorithm for displaying waveforms

From: Alfons Adriaensen <fons.adriaensen@email-addr-hidden>
Date: Mon Jun 06 2005 - 13:04:16 EEST

On Mon, Jun 06, 2005 at 09:17:54AM +0000, vanDongen/Gilcher wrote:

> As I recently found out, this can be very messy :)

Indeed :-)

> The basic algorithm is this:
> Each horizontal pixel represents n samples. Usually n is pretty big.
> Of those n samples you take the min and the max, and then you draw a vertical
> line between them.
> Obviously this has to be scaled to your vertical resolution and vertically
> translated to the right position on your canvas.
> If n<=1 you can choose to draw lines between the points, or just show the
> points.

The most difficult situation is for n nearly equal to one.

But even this is not really correct if you want precision.

Consider an Fs/4 sine with samples -0.9 -0.9 +0.9 +0.9 -0.9 -0.9 +0.9 etc.
Now what is the (peak) amplitude of this sine ? Not 0.9, but something like
1.27. If you send this signal through a unity gain filter that produces 45
degrees of phase shift, you will get samples at +/- 1.27, and your DAC will
clip.

So even a simle digital peak meter requires interpolation of peaks to
be accurate. I don't know any in the linux world that do this.

-- 
FA
Received on Mon Jun 6 16:15:07 2005

This archive was generated by hypermail 2.1.8 : Mon Jun 06 2005 - 16:15:07 EEST