Um 1960, noch bevor es Postleitzahlen und Einkaufszentren gab, teilte Großmutter einen Telefonanschluss mit mehreren anderen Leuten auf einer Partyleitung. Die Telefongesellschaft lieferte a Rufen Sie jeden Kunden individuell an, und bitte hören Sie nicht zu, das ist unhöflich. Dies waren in der Hauptstadt North Carolina 90.000 Menschen. Innerhalb weniger Jahre war sie die letzte auf der Partyline, aber The Phone Company musste den Partyline-Tarif weiterhin für bestehende Kunden anbieten. Ein paar Jahre später begann die Telefongesellschaft, Tonwahl als Ersatz für die runde Wählscheibe anzubieten (Tick-Tick-Tick-Tick-Tick ... Tick-Tick-Tick ...), aber jahrelang behielt Papa das Wählscheibentelefone, damit er den Aufpreis von 3,00 $ für schnelleres Wählen nicht bezahlen musste. Nummern mit vielen Nullen waren besonders langsam zu wählen. Touch-Tones sind schnell.
Touch-Tones sind DTMF (Dual Tone Multi-Frequency) Signale, die aus zwei gleichzeitigen Sinuswellen im menschlichen Sprachbereich bestehen, sodass Telefonsysteme sie problemlos übertragen können. Es stehen acht Töne zur Verfügung, die in einem 4 x 4-Raster angeordnet sind. Sie haben die vierte Spalte wahrscheinlich noch nie gesehen.
| |
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 ist die ersetzte Einheit CPS im Jahr 1960.)
Am Ende dieses Beitrags ist eine DTMF3.wav-Datei angehängt; Es wurde mit einem Computermikrofon aufgenommen, das an einen Telefonhörer gedrückt wurde, und ist etwas leise. Laden Sie es für das folgende Skript herunter; Drehen Sie Ihre Lautsprecher etwas auf, um es zu hören.
Das Skript stellt die Tastendrücke aus der WAV-Datei wieder her, indem es eine Sample-Matrix in die Datei lädt Zeitbereich aus der Datei, dann JMPs ausführen FFT Funktion für kurze Abschnitte der Zeitbereichsdaten, in die sie konvertiert werden sollen Frequenzbereich . In diesem Diagramm stellt jede vertikale Punktspalte dar, welche Frequenzen während des Zeitfensters besonders laut waren. Die zusätzlichen Punkte unten links stammen wahrscheinlich vom Antippen des Mikrofons am Ohrhörer; Die scharfen Klicks haben viele Frequenzen.

Die erste Ziffer hat viel 1477-Hz-Energie und viel 852-Hz-Energie. Es ist eine 9. Wenn Sie Ihre Arbeit an den restlichen Ziffern überprüfen möchten, vergleichen Sie Ihre Antwort mit der JMP US Nummer des technischen Supports .
Update 20. Dezember 2016: Die JSL wird wiederhergestellt, nachdem die Konvertierung vom alten Blog-Format nicht überstanden wurde. Versuchen Sie es erneut, wenn Sie in den letzten Monaten eine leere Tabelle und keine Grafik erhalten haben. Außerdem ist dies kein gutes Modell zum Lesen von WAV-Dateien; das Beispiel in Arbeiten mit WAV-Dateien ist viel schneller und wird in Zukunft mit größerer Wahrscheinlichkeit das tun, was Sie brauchen.
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" )
);
In den frühen 1980er Jahren spaltete sich The Phone Company in eine auf eine Reihe kleinerer Unternehmen und es wurde legal, ein eigenes Telefon zu besitzen.
Beachten Sie die merkwürdige Beziehung zwischen dem eindeutigen Rufton Ihrer Großmutter, der anzeigte, wer angerufen wurde, und den heutigen Klingeltönen, die erkennen ließen, wer anruft.
Ich habe immer noch einen Festnetzanschluss.