We hear tones and music. The tone is a signal that changes with time.
We can generate a sequencies of values and play the sequence spaced by a time interval.
For Telephony, it was typically 8000 samples per second, so the samples would be spaced 125 micro-seconds apart.
Typically, the samples are supplied to a hardware audio card, that outputs the samples to the audio output and then onto an amplifier to a headphone or speaker.
Is it possible to generate the samples for a modem?
Yes -
http://www.dougrice.plus.com/dougnapTheory/index.htm has some notes of using a telphone circuit.
Over the years experiments in generating audio have been tried.
At School we were told about this:
X = X + Y*N Y = Y - X*N
Itterate them and you get nice Sine and Cosine waves. What is remarkable is the amplitude seems stable over a long time.
http://www.dougrice.plus.com/rt004/sr3/sine.htm and http://www.dougrice.plus.com/indexPics.html has links.
https://mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html - Useful webpage that explains the format of WAV files.
http://www.dougrice.plus.com/dev/wav.c It is possible to use a C program to write a WAV file and play it with media player.
https://gasstationwithoutpumps.wordpress.com/2011/10/08/making-wav-files-from-c-programs/ may be clearer.
We had a need to convert between Telephony sample rate of 8000 samples per second to CD quality 44100 samples per second.
Pump the Telephony sample into a Digital filter clocked at the CD sample rate.
CD Quality 44100 / Telephony 8000 is 5.5125
Use a bit of simple accountancy.
For each Telephony sample, time moves on by 1/8000 seconds. You get an "income" of 125us , buy CD qualty samples that cost "1/44100"
So for each Telephony sample you can buy 5.5125 CD samples. Some times, you can buy 5 samples, sometimes 6 samples.
Going the other way:-
You buy at CD sample rate at 44100 samples per second. they cost 1/44100 so you need 5.5125 samples of income to before you can buy a Telephony sample.
This works. Do you need Anti-alias filters - Probably.
So if you want to mix Telephony samples that are not synchronised to another stream of Telephony samples, upsample to a higher sample rate. Use an anti-alias filter clockef at the Higher sample rate.
http://www.dougrice.plus.com/dev/trySVG/g9_CDtoTelephony.svg
http://www.dougrice.plus.com/dev/trySVG/g10_CDtoTelephony.svg
http://www.dougrice.plus.com/dev/dtmfCode/dtmf1_g.svg
At the early days of the dial up internet, before spammers, I had an idea to send the number of unread emails to a caller display device.
At the time, emails were available using dial-up internet. It would be nice to know if you had unread emails.
http://www.dougrice.plus.com/dev/modem.cpp - from 1997 when I could play out a file using my Sound Blaster with DOS utilities.
http://www.dougrice.plus.com/dev/modem_caller_display.cpp - Using this program and an additional circuit, it was possible to send text to a phone that supports CDS Caller Display. The additional did the line reversal. This damaged my PC's audio. Caller Display uses a signal bases on V.23 sending at 1200 baud.
It would have been possible send a short message to a caller display phone.
It needed:
Further information https://niccstandards.org.uk/publications/nd1001-1099/ on signalling standards
We did AutoCorellation at college.
http://www.dougrice.plus.com/dev/auto5.html - eCall 3GPP TS 26.267 V13.0.0 (2015-12)
https://itecspec.com/archive/3gpp-specification-ts-26-268/ - This has a test harness that is worth a try.
The eCall spec and reference modem code is available on line.
https://www.etsi.org/deliver/etsi_ts/126200_126299/126267/16.00.00_60/ts_126267v160000p.pdf - Spec
https://www.etsi.org/deliver/etsi_ts/126200_126299/126268/08.00.00_60/ts_126268v080000p.pdf - C code for the modem and test harness. There is a zip file in the same folder.
The reference code has a test harness that is easy to build on a Raspberry Pi and PC using Tiny C.
What impressed me is that the zip file has Test harness.
It does not contain the executable.
There is a make file.
You build the code and then run the test harness.
If you can build the code, the test harness passes the tests supplied.
The code has beed delivered to you.