Chris@41
|
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
|
Chris@41
|
2 <HTML>
|
Chris@41
|
3
|
Chris@41
|
4 <HEAD>
|
Chris@41
|
5 <TITLE>
|
Chris@41
|
6 Secret Rabbit Code (aka libsamplerate)
|
Chris@41
|
7 </TITLE>
|
Chris@41
|
8 <META NAME="Author" CONTENT="Erik de Castro Lopo (erikd AT mega-nerd DOT com)">
|
Chris@41
|
9 <META NAME="Version" CONTENT="libsamplerate-0.1.8">
|
Chris@41
|
10 <META NAME="Description" CONTENT="The Secret Rabbit Code Home Page">
|
Chris@41
|
11 <META NAME="Keywords" CONTENT="libsamplerate sound resample audio dsp Linux">
|
Chris@41
|
12 <LINK REL=StyleSheet HREF="SRC.css" TYPE="text/css" MEDIA="all">
|
Chris@41
|
13 </HEAD>
|
Chris@41
|
14
|
Chris@41
|
15 <BODY TEXT="#FFFFFF" BGCOLOR="#000000" LINK="#FB1465" VLINK="#FB1465" ALINK="#FB1465">
|
Chris@41
|
16 <!-- pepper -->
|
Chris@41
|
17 <CENTER>
|
Chris@41
|
18 <IMG SRC="SRC.png" HEIGHT=100 WIDTH=760 ALT="SRC.png">
|
Chris@41
|
19 </CENTER>
|
Chris@41
|
20 <!-- pepper -->
|
Chris@41
|
21 <BR>
|
Chris@41
|
22 <!-- pepper -->
|
Chris@41
|
23 <TABLE ALIGN="center" WIDTH="98%">
|
Chris@41
|
24 <TR>
|
Chris@41
|
25 <TD VALIGN="top">
|
Chris@41
|
26 <BR>
|
Chris@41
|
27 <DIV CLASS="nav">
|
Chris@41
|
28 <BR>
|
Chris@41
|
29 <A HREF="index.html">Home</A><BR>
|
Chris@41
|
30 <A HREF="license.html">License</A><BR>
|
Chris@41
|
31 <A HREF="history.html">History</A><BR>
|
Chris@41
|
32 <A HREF="download.html">Download</A><BR>
|
Chris@41
|
33 <A HREF="quality.html">Quality</A><BR>
|
Chris@41
|
34 <A HREF="api.html">API</A><BR>
|
Chris@41
|
35 <A HREF="bugs.html">Bug Reporting</A><BR>
|
Chris@41
|
36 <A HREF="win32.html">On Win32</A><BR>
|
Chris@41
|
37 <A HREF="faq.html">FAQ</A><BR>
|
Chris@41
|
38 <A HREF="lists.html">Mailing Lists</A><BR>
|
Chris@41
|
39 <A HREF="ChangeLog">ChangeLog</A><BR>
|
Chris@41
|
40 <BR>
|
Chris@41
|
41 <DIV CLASS="block">
|
Chris@41
|
42 Author :<BR>Erik de Castro Lopo
|
Chris@41
|
43 <!-- pepper -->
|
Chris@41
|
44 <BR><BR>
|
Chris@41
|
45 <!-- pepper -->
|
Chris@41
|
46
|
Chris@41
|
47 </DIV>
|
Chris@41
|
48 <IMG SRC=
|
Chris@41
|
49 "/cgi-bin/Count.cgi?ft=6|frgb=55;55;55|tr=0|md=6|dd=B|st=1|sh=1|df=src_qual.dat"
|
Chris@41
|
50 HEIGHT=30 WIDTH=100 ALT="counter.gif">
|
Chris@41
|
51 </DIV>
|
Chris@41
|
52
|
Chris@41
|
53 </TD>
|
Chris@41
|
54 <!-- pepper -->
|
Chris@41
|
55 <!-- ######################################################################## -->
|
Chris@41
|
56 <!-- pepper -->
|
Chris@41
|
57 <TD VALIGN="top">
|
Chris@41
|
58 <DIV CLASS="block">
|
Chris@41
|
59
|
Chris@41
|
60 <H1><B>SRC Quality</B></H1>
|
Chris@41
|
61 <CENTER><P>
|
Chris@41
|
62 <B>This document not yet complete.</B><BR>
|
Chris@41
|
63 </P></CENTER>
|
Chris@41
|
64 <P>
|
Chris@41
|
65 When measuring the performance of a Sample Rate Converter, there are three
|
Chris@41
|
66 factors to consider:
|
Chris@41
|
67 </P>
|
Chris@41
|
68 <UL>
|
Chris@41
|
69 <LI><B>Signal-to-Noise Ratio</B> - a measure of how much noise the sample
|
Chris@41
|
70 rate conversion process adds to the signal.
|
Chris@41
|
71 This is measured in decibels (dB) and the higher this value the
|
Chris@41
|
72 better.
|
Chris@41
|
73 For most sample rate converters, the SNR will vary depending on
|
Chris@41
|
74 the input signal and the ratio between input and output sample
|
Chris@41
|
75 rates.
|
Chris@41
|
76 The only valid comparison of SNR is between the worst case for
|
Chris@41
|
77 for each converter.
|
Chris@41
|
78 <LI><B>Bandwidth</B> - most sample rate converters attenuate high
|
Chris@41
|
79 frequencies as part of their operation.
|
Chris@41
|
80 Bandwidth can be measured by finding the frequency where the
|
Chris@41
|
81 attenuation is 3dB and expressing that as a percentage of the full
|
Chris@41
|
82 bandwidth at that sampling rate.
|
Chris@41
|
83 <LI><B>Speed</B> - the faster the better <B>:-)</B>.
|
Chris@41
|
84 </UL>
|
Chris@41
|
85
|
Chris@41
|
86 <P>
|
Chris@41
|
87 There are a number of sample rate converters available for downloading
|
Chris@41
|
88 but I will limit the comparison ot Secret Rabbit Code to the following:
|
Chris@41
|
89 </P>
|
Chris@41
|
90 <UL>
|
Chris@41
|
91 <LI><A HREF="http://www.mega-nerd.com/SRC/download.html">sndfile-resample</A>
|
Chris@41
|
92 which is a program (which uses libsamplerate) from the <B>examples/</B>
|
Chris@41
|
93 directory of the Secret Rabbit Code source code distribution.
|
Chris@41
|
94 <LI><A HREF="http://www-ccrma.stanford.edu/~jos/resample/Available_Software.html">
|
Chris@41
|
95 Resample</A>
|
Chris@41
|
96 by Julius O Smiths which seems to have been the first high quality converter
|
Chris@41
|
97 available as source code.
|
Chris@41
|
98 <LI><A HREF="http://www.tsp.ece.mcgill.ca/MMSP/Documents/Software/AFsp/ResampAudio.html">ResampAudio</A>
|
Chris@41
|
99 which is part of
|
Chris@41
|
100 <A HREF="http://www.tsp.ece.mcgill.ca/MMSP/Documents/Software/AFsp/AFsp.html">
|
Chris@41
|
101 Audio File Programs and Routines</A>
|
Chris@41
|
102 by Peter Kabal.
|
Chris@41
|
103 <LI><A HREF="http://home.sprynet.com/~cbagwell/sox.html">SoX</A> which is maintained
|
Chris@41
|
104 by Chris Bagwell.
|
Chris@41
|
105 SoX is also able to perform some low quality sample rate conversions but these
|
Chris@41
|
106 will not be investigated.
|
Chris@41
|
107 <LI><A HREF="http://shibatch.sourceforge.net/">Shibatch</A> which seems to be a
|
Chris@41
|
108 frequency domain sample rate converter.
|
Chris@41
|
109 Unfortunately, this converter does not handle arbitrary conversion ratios and
|
Chris@41
|
110 hence could not be properly compared to the other converters.
|
Chris@41
|
111 <LI><A HREF="http://sr-convert.sourceforge.net/">sr-convert</A> is another
|
Chris@41
|
112 converter which does not handle arbitrary conversion ratios.
|
Chris@41
|
113 </UL>
|
Chris@41
|
114
|
Chris@41
|
115 <P>
|
Chris@41
|
116 It should be noted that the first three converters above are based on the algorithm
|
Chris@41
|
117 by <A HREF="http://www-ccrma.stanford.edu/~jos/resample/"> Julius O. Smith</A>
|
Chris@41
|
118 which emulates the conversion of the digital signal to an analogue one and then
|
Chris@41
|
119 sampling the analogue signal at the new sample rate.
|
Chris@41
|
120 </P>
|
Chris@41
|
121
|
Chris@41
|
122 <!--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
|
Chris@41
|
123
|
Chris@41
|
124 <H3><B>Methodology</B></H3>
|
Chris@41
|
125 <P>
|
Chris@41
|
126 Measuring the SNR of a converter is relatively straight forward.
|
Chris@41
|
127 Generate an input signal consisting of a windowed sine wave, sample rate
|
Chris@41
|
128 convert it and measure the signal-to-noise ratio of the output signal.
|
Chris@41
|
129 A typical length for the original file is 30000 samples.
|
Chris@41
|
130 </P>
|
Chris@41
|
131 <P>
|
Chris@41
|
132 The bandwidth of a sample rate converter is a little more difficult to measure.
|
Chris@41
|
133 Currently this is done by generating two short files containing a windowed
|
Chris@41
|
134 sine wave.
|
Chris@41
|
135 The frequencies of the sine waves are 0.35 and 0.495 of the sample rate.
|
Chris@41
|
136 These file are then upsampled by a factor of 2 using the converter under test.
|
Chris@41
|
137 If the attenutaion of the lower frquency is less than 3dB and higher frequency is
|
Chris@41
|
138 more than 3dB, it is then possible to iteratively increase the lower frequency
|
Chris@41
|
139 and decrease the upper frequency keeping the -3dB point bracketed.
|
Chris@41
|
140 When the distance between the upper and lower frequency is sufficiently small,
|
Chris@41
|
141 it is possible to obtain a very accurate estimate of the -3dB frequency.
|
Chris@41
|
142 </P>
|
Chris@41
|
143 <P>
|
Chris@41
|
144 The speed of a sample rate converter is easy to measure; simply perform a
|
Chris@41
|
145 conversion on a large file or a number of smaller files and time the conversion
|
Chris@41
|
146 process.
|
Chris@41
|
147 </P>
|
Chris@41
|
148
|
Chris@41
|
149 <P>
|
Chris@41
|
150 The above measurement techniques are built into a test program which is delivered
|
Chris@41
|
151 with the Secret Rabbit Code source code distibution.
|
Chris@41
|
152 This program is able to test the first four of the above converters.
|
Chris@41
|
153 </P>
|
Chris@41
|
154 <!--+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-->
|
Chris@41
|
155
|
Chris@41
|
156 <H3><B>SoX</B></H3>
|
Chris@41
|
157 <P>
|
Chris@41
|
158 SoX provides three methods of resampling; a linear interpolator, a polyphase
|
Chris@41
|
159 resampler and the Julius O. Smith simulated analogue filter method.
|
Chris@41
|
160 </P>
|
Chris@41
|
161
|
Chris@41
|
162 <H3><B>Shibatch</B></H3>
|
Chris@41
|
163 <P>
|
Chris@41
|
164 Shibach
|
Chris@41
|
165 </P>
|
Chris@41
|
166
|
Chris@41
|
167 <P>
|
Chris@41
|
168 <B>More Coming Soon.</B>
|
Chris@41
|
169 </P>
|
Chris@41
|
170
|
Chris@41
|
171 <!-- <A HREF="mailto:aldel@mega-nerd.com">For the spam bots</A> -->
|
Chris@41
|
172
|
Chris@41
|
173 </DIV>
|
Chris@41
|
174 </TD></TR>
|
Chris@41
|
175 </TABLE>
|
Chris@41
|
176
|
Chris@41
|
177 </BODY>
|
Chris@41
|
178 </HTML>
|
Chris@41
|
179
|