Intorno al 1960, prima dei codici postali, prima dei centri commerciali, la nonna condivideva una connessione telefonica con molte altre persone in una linea di partito. La compagnia telefonica ha fornito a squillo distintivo per ogni cliente, e per favore non ascoltare, non è educato. Era nella capitale della Carolina del Nord, 90.000 persone. Nel giro di pochi anni fu l'ultima sulla linea del partito, ma The Phone Company doveva continuare a offrire la tariffa della linea del partito ai clienti esistenti. Alcuni anni dopo, The Telephone Company ha iniziato a offrire la composizione a toni per sostituire la manopola rotonda (tick-tick-tick-tick-tick....tick-tick-tick...), ma per anni papà ha mantenuto il telefoni rotativi in modo da non dover pagare il supplemento di $ 3,00 per la composizione più veloce. I numeri con molti zeri erano particolarmente lenti da comporre. I toni al tocco sono veloci.
I toni sono DTMF (Dual Tone Multi-Frequency) segnali realizzati da due onde sinusoidali simultanee nella gamma del parlato umano in modo che i sistemi telefonici possano trasmetterli facilmente. Sono disponibili otto toni, disposti in una griglia 4 x 4. Probabilmente non hai mai visto la quarta colonna.
| |
1209 hertz |
1336 Hz |
1477 hertz |
1633Hz |
| 697 hertz |
1 |
2 |
3 |
UN |
| 770 hertz |
4 |
5 |
6 |
B |
| 852Hz |
7 |
8 |
9 |
C |
| 941 hertz |
* |
0 |
# |
D |
(Hz è l'unità che ha sostituito CPS nel 1960.)
Alla fine di questo post è allegato un file DTMF3.wav; è stato realizzato con il microfono di un computer premuto contro la cornetta del telefono ed è un po' silenzioso. Scaricalo per lo script che segue; alza un po' gli altoparlanti per sentirlo.
Lo script recupera le pressioni dei tasti dal file wav caricando una matrice di campioni nel file dominio del tempo dal file, quindi eseguendo JMP FFT funzione su brevi sezioni dei dati nel dominio del tempo in cui convertirli dominio di frequenza . In questo grafico ogni colonna verticale di punti rappresenta quali frequenze erano particolarmente forti durante la fascia oraria. I punti extra in basso a sinistra sono probabilmente dovuti al tocco del microfono sull'auricolare; i clic acuti hanno molte frequenze.

La prima cifra ha molta energia a 1477 Hz e molta energia a 852 Hz. È un 9. Se vuoi controllare il tuo lavoro sul resto delle cifre, confronta la tua risposta con il JMP US numero assistenza tecnica .
Aggiornamento 20 dicembre 2016: la JSL viene ripristinata dopo non essere sopravvissuta alla conversione dal vecchio formato del blog. Riprova se hai una tabella vuota e nessun grafico negli ultimi mesi. Inoltre, questo non è un ottimo modello per leggere file WAV; l'esempio in Lavorare con i file WAV è molto più veloce e più propenso a fare ciò di cui hai bisogno in 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" )
);
All'inizio degli anni '80, The Phone Company si sciolse in a gruppo di aziende più piccole ed è diventato legale possedere il proprio telefono.
Notare la strana relazione tra la suoneria distintiva della linea del gruppo della nonna, che diceva chi veniva chiamato, e le suonerie di oggi, che possono dire chi sta chiamando.
Ho ancora una linea fissa.