Alrededor de 1960, antes de los códigos postales, antes de los centros comerciales, la abuela compartía una conexión telefónica con varias otras personas en una línea compartida. La Compañía Telefónica suministró un timbre distintivo para cada cliente, y por favor no escuches, no es cortés. Esto fue en la ciudad capital de Carolina del Norte, 90.000 personas. A los pocos años, ella era la última en la línea compartida, pero The Phone Company estaba obligada a continuar ofreciendo la tarifa de línea compartida a los clientes existentes. Unos años más tarde, The Telephone Company comenzó a ofrecer la marcación por tonos para reemplazar el dial giratorio redondo (tic-tic-tic-tic-tic... tic-tic-tic...), pero durante años papá mantuvo el teléfonos de disco para no tener que pagar el recargo de $3.00 por una marcación más rápida. Los números con muchos ceros eran particularmente lentos para marcar. Los tonos táctiles son rápidos.
Los tonos táctiles son DTMF (multifrecuencia de tono dual) señales hechas de dos ondas sinusoidales simultáneas en el rango del habla humana para que los sistemas telefónicos puedan transmitirlas fácilmente. Hay ocho tonos disponibles, dispuestos en una cuadrícula de 4 x 4. Probablemente nunca hayas visto la cuarta columna.
| |
1209 Hz |
1336 Hz |
1477 Hz |
1633 Hz |
| 697 Hz |
1 |
2 |
3 |
A |
| 770 Hz |
4 |
5 |
6 |
B |
| 852 Hz |
7 |
8 |
9 |
C |
| 941 Hz |
* |
0 |
# |
D |
(Hz es la unidad que reemplazó CPS en 1960.)
Al final de esta publicación hay un archivo DTMF3.wav adjunto; se hizo con un micrófono de computadora presionado contra un auricular de teléfono y es un poco silencioso. Descárguelo para el script que sigue; Sube un poco los parlantes para escucharlo.
El script recupera las pulsaciones de teclas del archivo wav cargando una matriz de muestras en el dominio del tiempo desde el archivo, luego ejecutando JMP FFT funcionan en secciones cortas de los datos del dominio del tiempo para convertirlos a dominio de la frecuencia . En este gráfico, cada columna vertical de puntos representa qué frecuencias fueron especialmente fuertes durante el intervalo de tiempo. Los puntos adicionales en la parte inferior izquierda probablemente se deban a tocar el micrófono en el auricular; los clics agudos tienen muchas frecuencias.

El primer dígito tiene mucha energía de 1477 Hz y mucha energía de 852 Hz. es un 9 Si desea verificar su trabajo en el resto de los dígitos, compare su respuesta con el JMP US número de soporte técnico .
Actualización 20 de diciembre de 2016: el JSL se restaura después de no sobrevivir a la conversión del antiguo formato de blog. Inténtalo de nuevo si tienes una tabla vacía y ningún gráfico en los últimos meses. Además, este no es un gran modelo para leer archivos WAV; el ejemplo en Trabajar con archivos WAV es mucho más rápido y es más probable que haga lo que necesita en el futuro.
x = Load Text File( "$DESKTOP/DTMF3.wav", blob ); // this file must be 22050 16 bit 1 channel
// because the following code makes zero effort to handle anything else
x = Hex( x ); // doubles the size of the data, but the hex characters are easy to parse
If( Pat Match( x, Hex( "RIFF" ) + Pat Arb() + Hex( "data" ), "" ), // found the data chunk
grab = 2048; // samples per timeslice
period = grab / 22050; // seconds
binwidth = 1 / period; // 1 cycle in the bin's width is the lowest frequency the bins resolve
timeslice = 0; // count through the time slices
dt = New Table("sound",New Column("time"),New Column("frequency"),New Column("amp"));
dt << begin data update; // load the table without updating each time
While( Length( x ) > (grab) * 2 * 2, // grab samples * 2 bytesPerSample * 2 hexCharsPerByte
samples = J( grab, 1, 0 ); // an array to hold the samples; will be sent to the fft below
nsamples = 0; // grab counter
timeslice++; // each time we grab samples is a new time slice
Pat Match( x, // scan the hex data for pairs of hex digits
Pat Repeat(
Pat Len( 2 ) >> left1 + Pat Len( 2 ) >> left2 + // two pairs
// the following Expr evaluates to PatFence(), eventually, so it can be
// concatenated onto the preceding match. But before it does that, it
// stores the preceding match into the samples[ ] matrix
Expr( nsamples++; // index into the sample array
q = Hex To Number( left2 || left1 ); // build the 16 bit integer
If( q > 32767, q = q - 65536 ); // make it signed, +/-32K
samples[ Nsamples ] = q; // keep it
Pat Fence(); ), // make matching faster by fencing off completed work
grab, grab // min,max number of repeats
), "" // replace everything matched for this grab with nothing
);
freq = FFT( {samples} ); // run the fft. freq is a list: { real, imag }
amplitude = Sqrt( freq[1] :*</img> freq[1] + freq[2] :*</img> freq[2] ); // just the amplitude
For( f = 1, f < grab / 2, f++, // write data table
// throw out small amplitude responses and out-of-interest frequencies
// a different file might need some tweaking of these values
If( amplitude[F] > 10000 & f > 50 & f < 150, // roughly 500 to 1500 Hz
dt << addrows( 1 );
dt:time = timeslice * period;
dt:frequency = (f - 1) * binwidth; // bin 1 is really frequency 0, DC
dt:amp = amplitude[F];
)
);
);
dt << end data update;
// the pretty picture
dt << Graph Builder( Size( 664, 470 ), Show Control Panel( 0 ),
Variables( X( :time ), Y( :frequency ) ), Elements( Points( X, Y, Legend( 5 ) ) ),
SendToReport(
Dispatch( {}, "time", ScaleBox, {Min( 0.5 ), Max( 9 ), Inc( 1 ),
Minor Ticks( 1 ), Label Row Nesting( 1 )} ),
Dispatch( {}, "frequency", ScaleBox,
{Min( 250 ), Max( 1750 ), Inc( 2000 ), Minor Ticks( 0 ), Label Row Nesting( 1 ),
Add Ref Line( 697, "Solid", "Black", "697Hz", 1 ),
Add Ref Line( 770, "Solid", "Black", "770Hz", 1 ),
Add Ref Line( 852, "Solid", "Black", "852Hz", 1 ),
Add Ref Line( 941, "Solid", "Black", "941Hz", 1 ),
Add Ref Line( 1209, "Solid", "Black", "1209Hz", 1 ),
Add Ref Line( 1336, "Solid", "Black", "1336Hz", 1 ),
Add Ref Line( 1477, "Solid", "Black", "1477Hz", 1 ),
Add Ref Line( 1633, "Solid", "Black", "1633Hz", 1 )}
),
Dispatch( {}, "graph title", TextEditBox, {Set Text( "DTMF Analyzer" )} )
)
);
, // else...
Print( "not a wav file" )
);
A principios de la década de 1980, The Phone Company se dividió en una grupo de empresas más pequeñas y se volvió legal tener tu propio teléfono.
Observe la extraña relación entre el timbre distintivo de la línea de fiesta de la abuela, que indicaba a quién se llamaba, y los tonos de llamada de hoy, que indican quién llama.
Todavía tengo un teléfono fijo.