Closed norill closed 8 years ago
Could you please post the logs of the receiver?
Run it with -vv
flag for most verbose logging.
2016-09-08 22:39:40,421 DEBUG Audio OFDM MODEM v1.13: 8.0 kb/s (16-QAM x 2 carriers) Fs=8.0 kHz
__main__.py:219
2016-09-08 22:39:40,421 INFO PortAudio V19-devel (built Sep 8 2016 20:56:08) loaded
audio.py:19
2016-09-08 22:39:40,506 DEBUG AsyncReader thread started
async.py:23
2016-09-08 22:39:40,509 DEBUG Skipping 0.100 seconds
main.py:44
2016-09-08 22:39:41,115 INFO Waiting for carrier tone: 1.0 kHz
main.py:51
2016-09-08 22:39:46,740 INFO Carrier detected at ~5620.0 ms @ 1.0 kHz
detect.py:58
2016-09-08 22:39:46,740 DEBUG Buffered 1000 ms of audio
detect.py:60
2016-09-08 22:39:46,769 INFO Carrier coherence: 97.641%
detect.py:93
2016-09-08 22:39:46,769 DEBUG Carrier starts at 5619.000 ms
detect.py:70
2016-09-08 22:39:46,769 INFO Carrier symbols amplitude : 0.096
detect.py:104
2016-09-08 22:39:46,779 INFO Frequency error: -17.801 ppm
detect.py:114
2016-09-08 22:39:46,779 DEBUG Frequency correction: 17.802 ppm
main.py:55
2016-09-08 22:39:46,779 DEBUG Gain correction: 10.415
main.py:58
2016-09-08 22:39:46,829 DEBUG Prefix OK
recv.py:49
2016-09-08 22:39:47,288 DEBUG 1.0 kHz: SNR = 13.19 dB
recv.py:93
2016-09-08 22:39:47,288 DEBUG 2.0 kHz: SNR = 7.06 dB
recv.py:93
2016-09-08 22:39:47,288 INFO Starting demodulation
recv.py:127
2016-09-08 22:39:47,338 WARNING Invalid checksum: ee7f188a != ae15727
framing.py:29
2016-09-08 22:39:47,338 ERROR Decoding failed
main.py:64
Traceback (most recent call last):
File "C:\Program Files\Python27\lib\site-packages\amodem\main.py", line 61, in recv
receiver.run(sampler, gain=1.0/amplitude, output=dst)
File "C:\Program Files\Python27\lib\site-packages\amodem\recv.py", line 167, in run
for frame in framing.decode_frames(bitstream):
File "C:\Program Files\Python27\lib\site-packages\amodem\framing.py", line 120, in decode_frames
for frame in framer.decode(_to_bytes(bits)):
File "C:\Program Files\Python27\lib\site-packages\amodem\framing.py", line 57, in decode
block = self.checksum.decode(frame)
File "C:\Program Files\Python27\lib\site-packages\amodem\framing.py", line 30, in decode
raise ValueError('Invalid checksum')
ValueError: Invalid checksum
2016-09-08 22:39:47,338 DEBUG Demodulated 0.255 kB @ 0.051 seconds (20.0% realtime)
recv.py:177
2016-09-08 22:39:47,338 INFO Received 0.000 kB @ 0.051 seconds = 0.000 kB/s
recv.py:181
2016-09-08 22:39:47,418 DEBUG AsyncReader thread stopped (read 110400 bytes)
async.py:28
2016-09-08 22:39:47,438 DEBUG Finished I/O
__main__.py:246
The SNR indeed seems quite low...
Could you dump the received audio using --dump
flag, and send it to me?
BTW, do you use a microphone & speaker on the same computer, or on separate computers?
on different computers i get either too noisy or too strong during calibration
The waveform and the spectrogram of the recorded audio:
$ python scripts/plot.py /tmp/dmp
Looking on the leading tone, it seems that the background noise is quite dominant and there is a bit of echo (note the trailing oscillations after the tone is over):
It seems that this causes the frequency drift estimator to estimate the wrong frequency drift and the rest of demodulation pipeline fails to compensate for it later.
Unfortunately, I think that this SNR won't allow reliable transmission in 8kb/s bitrate. Could you please run and post the calibration results using BITRATE=1? (the lowest bitrate possible) Here are my results: https://asciinema.org/a/25065
By the way, could you put the microphone closer to the speaker? I can also recommend using a simple audio cable to connect the computers: This should improve significantly the SNR, so you could use higher bitrates...
same computer, mic at 100%:
C:\>amodem recv -vvc
2016-09-09 16:45:37,497 DEBUG Audio OFDM MODEM v1.13: 1.0 kb/s (2-QAM x 1 carriers) Fs=8.0 kHz
__main__.py:219
2016-09-09 16:45:37,502 INFO PortAudio V19-devel (built Sep 8 2016 20:56:08) loaded
audio.py:19
2016-09-09 16:45:37,584 DEBUG AsyncReader thread started
async.py:23
2016-09-09 16:45:37,584 INFO verbose: 2
calib.py:132
2016-09-09 16:45:38,200 INFO 2000 Hz: too weak signal total=0.0087, rms=0.0009, coherency=0.1082, peak=0.0153
calib.py:138
2016-09-09 16:45:38,400 INFO 2000 Hz: too weak signal total=0.0089, rms=0.0010, coherency=0.1106, peak=0.0157
calib.py:138
2016-09-09 16:45:38,594 INFO 2000 Hz: too weak signal total=0.0085, rms=0.0010, coherency=0.1118, peak=0.0161
calib.py:138
2016-09-09 16:45:38,799 INFO 2000 Hz: too weak signal total=0.0081, rms=0.0011, coherency=0.1347, peak=0.0157
calib.py:138
2016-09-09 16:45:39,000 INFO 2000 Hz: too weak signal total=0.0081, rms=0.0010, coherency=0.1267, peak=0.0156
calib.py:138
2016-09-09 16:45:39,200 INFO 2000 Hz: too weak signal total=0.0087, rms=0.0010, coherency=0.1130, peak=0.0165
calib.py:138
2016-09-09 16:45:39,394 INFO 2000 Hz: too weak signal total=0.0085, rms=0.0010, coherency=0.1151, peak=0.0190
calib.py:138
2016-09-09 16:45:39,594 INFO 2000 Hz: too weak signal total=0.0084, rms=0.0010, coherency=0.1204, peak=0.0166
calib.py:138
2016-09-09 16:45:39,799 INFO 2000 Hz: too weak signal total=0.0092, rms=0.0010, coherency=0.1070, peak=0.0164
calib.py:138
2016-09-09 16:45:40,000 INFO 2000 Hz: too weak signal total=0.0093, rms=0.0010, coherency=0.1094, peak=0.0163
calib.py:138
2016-09-09 16:45:40,200 INFO 2000 Hz: too weak signal total=0.0087, rms=0.0010, coherency=0.1193, peak=0.0180
calib.py:138
2016-09-09 16:45:40,394 INFO 2000 Hz: too weak signal total=0.0079, rms=0.0013, coherency=0.1654, peak=0.0141
calib.py:138
2016-09-09 16:45:40,594 INFO 2000 Hz: too weak signal total=0.0090, rms=0.0039, coherency=0.4315, peak=0.0194
calib.py:138
2016-09-09 16:45:40,793 INFO 2000 Hz: too weak signal total=0.0100, rms=0.0062, coherency=0.6146, peak=0.0196
calib.py:138
2016-09-09 16:45:41,000 INFO 2000 Hz: too weak signal total=0.0169, rms=0.0145, coherency=0.8579, peak=0.0316
calib.py:138
2016-09-09 16:45:41,198 INFO 2000 Hz: too weak signal total=0.0253, rms=0.0236, coherency=0.9322, peak=0.0399
calib.py:138
2016-09-09 16:45:41,400 INFO 2000 Hz: too weak signal total=0.0287, rms=0.0272, coherency=0.9485, peak=0.0411
calib.py:138
2016-09-09 16:45:41,599 INFO 2000 Hz: too weak signal total=0.0320, rms=0.0306, coherency=0.9585, peak=0.0462
calib.py:138
2016-09-09 16:45:41,799 INFO 2000 Hz: too weak signal total=0.0375, rms=0.0365, coherency=0.9713, peak=0.0538
calib.py:138
2016-09-09 16:45:41,999 INFO 2000 Hz: too weak signal total=0.0456, rms=0.0449, coherency=0.9846, peak=0.0575
calib.py:138
2016-09-09 16:45:42,198 INFO 2000 Hz: too weak signal total=0.0515, rms=0.0508, coherency=0.9865, peak=0.0639
calib.py:138
2016-09-09 16:45:42,398 INFO 2000 Hz: too weak signal total=0.0542, rms=0.0535, coherency=0.9882, peak=0.0692
calib.py:138
2016-09-09 16:45:42,598 INFO 2000 Hz: too weak signal total=0.0653, rms=0.0647, coherency=0.9907, peak=0.0768
calib.py:138
2016-09-09 16:45:42,799 INFO 2000 Hz: too weak signal total=0.0726, rms=0.0721, coherency=0.9924, peak=0.0841
calib.py:138
2016-09-09 16:45:42,999 INFO 2000 Hz: too weak signal total=0.0855, rms=0.0851, coherency=0.9950, peak=0.1030
calib.py:138
2016-09-09 16:45:43,198 INFO 2000 Hz: too weak signal total=0.0936, rms=0.0930, coherency=0.9943, peak=0.1060
calib.py:138
2016-09-09 16:45:43,392 INFO 2000 Hz: too weak signal total=0.0934, rms=0.0929, coherency=0.9949, peak=0.1034
calib.py:138
2016-09-09 16:45:43,592 INFO 2000 Hz: too weak signal total=0.0933, rms=0.0930, coherency=0.9960, peak=0.1021
calib.py:138
2016-09-09 16:45:43,799 INFO 2000 Hz: good signal total=0.1018, rms=0.1014, coherency=0.9965, peak=0.1139
calib.py:138
2016-09-09 16:45:43,999 INFO 2000 Hz: good signal total=0.1044, rms=0.1040, coherency=0.9965, peak=0.1136
calib.py:138
2016-09-09 16:45:44,198 INFO 2000 Hz: good signal total=0.1045, rms=0.1041, coherency=0.9961, peak=0.1127
calib.py:138
2016-09-09 16:45:44,398 INFO 2000 Hz: good signal total=0.1165, rms=0.1161, coherency=0.9973, peak=0.1252
calib.py:138
2016-09-09 16:45:44,598 INFO 2000 Hz: good signal total=0.1170, rms=0.1167, coherency=0.9976, peak=0.1257
calib.py:138
2016-09-09 16:45:44,799 INFO 2000 Hz: good signal total=0.1170, rms=0.1167, coherency=0.9977, peak=0.1256
calib.py:138
2016-09-09 16:45:44,999 INFO 2000 Hz: good signal total=0.1170, rms=0.1167, coherency=0.9976, peak=0.1236
calib.py:138
2016-09-09 16:45:45,193 INFO 2000 Hz: good signal total=0.1286, rms=0.1283, coherency=0.9979, peak=0.1390
calib.py:138
2016-09-09 16:45:45,394 INFO 2000 Hz: good signal total=0.1470, rms=0.1468, coherency=0.9984, peak=0.1543
calib.py:138
2016-09-09 16:45:45,598 INFO 2000 Hz: good signal total=0.1479, rms=0.1476, coherency=0.9981, peak=0.1562
calib.py:138
2016-09-09 16:45:45,792 INFO 2000 Hz: good signal total=0.1590, rms=0.1588, coherency=0.9985, peak=0.1709
calib.py:138
2016-09-09 16:45:45,993 INFO 2000 Hz: good signal total=0.1658, rms=0.1656, coherency=0.9987, peak=0.1729
calib.py:138
2016-09-09 16:45:46,193 INFO 2000 Hz: good signal total=0.1681, rms=0.1679, coherency=0.9988, peak=0.1895
calib.py:138
2016-09-09 16:45:46,394 INFO 2000 Hz: good signal total=0.1896, rms=0.1894, coherency=0.9992, peak=0.2101
calib.py:138
2016-09-09 16:45:46,595 INFO 2000 Hz: good signal total=0.2066, rms=0.2064, coherency=0.9992, peak=0.2085
calib.py:138
2016-09-09 16:45:46,796 INFO 2000 Hz: good signal total=0.2118, rms=0.2116, coherency=0.9992, peak=0.2368
calib.py:138
2016-09-09 16:45:46,999 INFO 2000 Hz: good signal total=0.2340, rms=0.2338, coherency=0.9993, peak=0.2369
calib.py:138
2016-09-09 16:45:47,198 INFO 2000 Hz: good signal total=0.2555, rms=0.2553, coherency=0.9994, peak=0.2659
calib.py:138
2016-09-09 16:45:47,398 INFO 2000 Hz: good signal total=0.2628, rms=0.2626, coherency=0.9995, peak=0.2599
calib.py:138
2016-09-09 16:45:47,598 INFO 2000 Hz: good signal total=0.2630, rms=0.2629, coherency=0.9995, peak=0.2600
calib.py:138
2016-09-09 16:45:47,799 INFO 2000 Hz: good signal total=0.2937, rms=0.2936, coherency=0.9996, peak=0.2972
calib.py:138
2016-09-09 16:45:47,993 INFO 2000 Hz: good signal total=0.2955, rms=0.2954, coherency=0.9996, peak=0.2902
calib.py:138
2016-09-09 16:45:48,193 INFO 2000 Hz: good signal total=0.3121, rms=0.3120, coherency=0.9996, peak=0.3291
calib.py:138
2016-09-09 16:45:48,398 INFO 2000 Hz: good signal total=0.3318, rms=0.3317, coherency=0.9996, peak=0.3264
calib.py:138
2016-09-09 16:45:48,595 INFO 2000 Hz: good signal total=0.3582, rms=0.3581, coherency=0.9997, peak=0.3692
calib.py:138
2016-09-09 16:45:48,799 INFO 2000 Hz: good signal total=0.4033, rms=0.4032, coherency=0.9997, peak=0.4105
calib.py:138
2016-09-09 16:45:48,994 INFO 2000 Hz: good signal total=0.4230, rms=0.4229, coherency=0.9998, peak=0.4480
calib.py:138
2016-09-09 16:45:49,197 INFO 2000 Hz: good signal total=0.4491, rms=0.4490, coherency=0.9998, peak=0.4238
calib.py:138
2016-09-09 16:45:49,394 INFO 2000 Hz: good signal total=0.4741, rms=0.4740, coherency=0.9998, peak=0.4797
calib.py:138
2016-09-09 16:45:49,598 INFO 2000 Hz: good signal total=0.4909, rms=0.4908, coherency=0.9998, peak=0.4590
calib.py:138
2016-09-09 16:45:49,795 INFO 2000 Hz: good signal total=0.5157, rms=0.5156, coherency=0.9998, peak=0.5186
calib.py:138
2016-09-09 16:45:49,999 INFO 2000 Hz: good signal total=0.5404, rms=0.5403, coherency=0.9998, peak=0.5758
calib.py:138
2016-09-09 16:45:50,198 INFO 2000 Hz: good signal total=0.5891, rms=0.5891, coherency=0.9999, peak=0.5478
calib.py:138
2016-09-09 16:45:50,398 INFO 2000 Hz: good signal total=0.5966, rms=0.5965, coherency=0.9998, peak=0.6254
calib.py:138
2016-09-09 16:45:50,598 INFO 2000 Hz: good signal total=0.6365, rms=0.6364, coherency=0.9999, peak=0.5810
calib.py:138
2016-09-09 16:45:50,795 INFO 2000 Hz: good signal total=0.6616, rms=0.6615, coherency=0.9999, peak=0.6610
calib.py:138
2016-09-09 16:45:50,996 INFO 2000 Hz: good signal total=0.6892, rms=0.6892, coherency=0.9999, peak=0.6243
calib.py:138
2016-09-09 16:45:51,194 INFO 2000 Hz: good signal total=0.7458, rms=0.7457, coherency=0.9999, peak=0.7073
calib.py:138
2016-09-09 16:45:51,398 INFO 2000 Hz: good signal total=0.7656, rms=0.7655, coherency=0.9999, peak=0.6876
calib.py:138
2016-09-09 16:45:51,598 INFO 2000 Hz: good signal total=0.7597, rms=0.7596, coherency=0.9999, peak=0.6838
calib.py:138
2016-09-09 16:45:51,792 INFO 2000 Hz: good signal total=0.7552, rms=0.7551, coherency=0.9999, peak=0.6790
calib.py:138
2016-09-09 16:45:51,993 INFO 2000 Hz: good signal total=0.6154, rms=0.6151, coherency=0.9996, peak=0.6814
calib.py:138
2016-09-09 16:45:52,198 INFO 2000 Hz: good signal total=0.2697, rms=0.2695, coherency=0.9992, peak=0.3620
calib.py:138
2016-09-09 16:45:52,394 INFO 2000 Hz: too weak signal total=0.0907, rms=0.0903, coherency=0.9957, peak=0.1492
calib.py:138
2016-09-09 16:45:52,598 INFO 2000 Hz: too weak signal total=0.0538, rms=0.0531, coherency=0.9861, peak=0.0752
calib.py:138
2016-09-09 16:45:52,799 INFO 2000 Hz: too weak signal total=0.0502, rms=0.0493, coherency=0.9830, peak=0.0688
calib.py:138
2016-09-09 16:45:52,993 INFO 2000 Hz: too weak signal total=0.0511, rms=0.0502, coherency=0.9833, peak=0.0653
calib.py:138
2016-09-09 16:45:53,200 INFO 2000 Hz: too weak signal total=0.0508, rms=0.0500, coherency=0.9845, peak=0.0633
calib.py:138
2016-09-09 16:45:53,398 INFO 2000 Hz: too weak signal total=0.0502, rms=0.0496, coherency=0.9878, peak=0.0611
calib.py:138
2016-09-09 16:45:53,599 INFO 2000 Hz: too weak signal total=0.0499, rms=0.0493, coherency=0.9874, peak=0.0627
calib.py:138
2016-09-09 16:45:53,799 INFO 2000 Hz: too weak signal total=0.0499, rms=0.0493, coherency=0.9876, peak=0.0611
calib.py:138
2016-09-09 16:45:53,999 INFO 2000 Hz: too weak signal total=0.0501, rms=0.0494, coherency=0.9864, peak=0.0619
calib.py:138
2016-09-09 16:45:54,198 INFO 2000 Hz: too weak signal total=0.0504, rms=0.0496, coherency=0.9847, peak=0.0612
calib.py:138
2016-09-09 16:45:54,398 INFO 2000 Hz: too weak signal total=0.0508, rms=0.0499, coherency=0.9840, peak=0.0622
calib.py:138
2016-09-09 16:45:54,598 INFO 2000 Hz: too weak signal total=0.0508, rms=0.0500, coherency=0.9850, peak=0.0651
calib.py:138
2016-09-09 16:45:54,799 INFO 2000 Hz: too weak signal total=0.0506, rms=0.0499, coherency=0.9859, peak=0.0618
calib.py:138
2016-09-09 16:45:54,993 INFO 2000 Hz: too weak signal total=0.0502, rms=0.0496, coherency=0.9883, peak=0.0602
calib.py:138
2016-09-09 16:45:55,194 INFO 2000 Hz: too weak signal total=0.0503, rms=0.0497, coherency=0.9874, peak=0.0611
calib.py:138
2016-09-09 16:45:55,398 INFO 2000 Hz: too weak signal total=0.0503, rms=0.0496, coherency=0.9865, peak=0.0649
calib.py:138
2016-09-09 16:45:55,598 INFO 2000 Hz: too weak signal total=0.0500, rms=0.0493, coherency=0.9856, peak=0.0619
calib.py:138
2016-09-09 16:45:55,799 INFO 2000 Hz: too weak signal total=0.0500, rms=0.0490, coherency=0.9789, peak=0.0634
calib.py:138
2016-09-09 16:45:56,000 INFO 2000 Hz: too weak signal total=0.0495, rms=0.0487, coherency=0.9849, peak=0.0603
calib.py:138
2016-09-09 16:45:56,198 INFO 2000 Hz: too weak signal total=0.0496, rms=0.0488, coherency=0.9851, peak=0.0615
calib.py:138
2016-09-09 16:45:56,398 INFO 2000 Hz: too weak signal total=0.0170, rms=0.0147, coherency=0.8628, peak=0.0753
calib.py:138
2016-09-09 16:45:56,598 INFO 2000 Hz: too weak signal total=0.0077, rms=0.0009, coherency=0.1221, peak=0.0139
calib.py:138
2016-09-09 16:45:56,799 INFO 2000 Hz: too weak signal total=0.0083, rms=0.0011, coherency=0.1267, peak=0.0170
calib.py:138
2016-09-09 16:45:56,992 DEBUG AsyncReader thread stopped (read 310400 bytes)
async.py:28
2016-09-09 16:45:57,009 DEBUG Finished I/O
different computers, mic at 100%:
C:\>python -m amodem recv -vvc
2016-09-09 16:58:30,388 DEBUG Audio OFDM MODEM v1.13: 1.0 kb/s (2-QAM x 1 carriers) Fs=8.0 kHz
__main__.py:219
2016-09-09 16:58:30,388 INFO PortAudio V19-devel (built Sep 8 2016 20:56:08) loaded
audio.py:19
2016-09-09 16:58:30,700 DEBUG AsyncReader thread started
async.py:23
2016-09-09 16:58:30,700 INFO verbose: 2
calib.py:132
2016-09-09 16:58:31,316 INFO 2000 Hz: too noisy signal total=0.1859, rms=0.0806, coherency=0.4339, peak=0.2989
calib.py:138
2016-09-09 16:58:31,506 INFO 2000 Hz: too noisy signal total=0.1927, rms=0.0809, coherency=0.4199, peak=0.2930
calib.py:138
2016-09-09 16:58:31,717 INFO 2000 Hz: too noisy signal total=0.1945, rms=0.0803, coherency=0.4130, peak=0.3716
calib.py:138
2016-09-09 16:58:31,917 INFO 2000 Hz: too noisy signal total=0.1953, rms=0.0804, coherency=0.4118, peak=0.3043
calib.py:138
2016-09-09 16:58:32,117 INFO 2000 Hz: too noisy signal total=0.1882, rms=0.0809, coherency=0.4301, peak=0.3279
calib.py:138
2016-09-09 16:58:32,316 INFO 2000 Hz: too noisy signal total=0.1844, rms=0.0815, coherency=0.4423, peak=0.3303
calib.py:138
2016-09-09 16:58:32,516 INFO 2000 Hz: too noisy signal total=0.1972, rms=0.0824, coherency=0.4178, peak=0.3257
calib.py:138
2016-09-09 16:58:32,707 INFO 2000 Hz: too noisy signal total=0.2032, rms=0.0821, coherency=0.4039, peak=0.3752
calib.py:138
2016-09-09 16:58:32,917 INFO 2000 Hz: too noisy signal total=0.1992, rms=0.0814, coherency=0.4088, peak=0.3538
calib.py:138
2016-09-09 16:58:33,107 INFO 2000 Hz: too noisy signal total=0.2046, rms=0.0815, coherency=0.3982, peak=0.3617
calib.py:138
2016-09-09 16:58:33,316 INFO 2000 Hz: too noisy signal total=0.2470, rms=0.1696, coherency=0.6866, peak=0.4520
calib.py:138
2016-09-09 16:58:33,506 INFO 2000 Hz: too noisy signal total=0.2761, rms=0.2053, coherency=0.7434, peak=0.4454
calib.py:138
2016-09-09 16:58:33,717 INFO 2000 Hz: too noisy signal total=0.2768, rms=0.2115, coherency=0.7642, peak=0.4326
calib.py:138
2016-09-09 16:58:33,917 INFO 2000 Hz: too noisy signal total=0.3136, rms=0.2602, coherency=0.8295, peak=0.4422
calib.py:138
2016-09-09 16:58:34,117 INFO 2000 Hz: too noisy signal total=0.4035, rms=0.3624, coherency=0.8980, peak=0.5609
calib.py:138
2016-09-09 16:58:34,306 INFO 2000 Hz: too noisy signal total=0.4809, rms=0.4463, coherency=0.9281, peak=0.6540
calib.py:138
2016-09-09 16:58:34,516 INFO 2000 Hz: too noisy signal total=0.5618, rms=0.5324, coherency=0.9476, peak=0.6820
calib.py:138
2016-09-09 16:58:34,707 INFO 2000 Hz: too noisy signal total=0.7931, rms=0.7722, coherency=0.9737, peak=0.9927
calib.py:138
2016-09-09 16:58:34,927 INFO 2000 Hz: too strong signal total=1.1473, rms=1.1432, coherency=0.9964, peak=1.0244
calib.py:138
2016-09-09 16:58:35,107 INFO 2000 Hz: too strong signal total=1.1955, rms=1.1939, coherency=0.9987, peak=1.0244
calib.py:138
2016-09-09 16:58:35,316 INFO 2000 Hz: too strong signal total=1.1997, rms=1.1989, coherency=0.9993, peak=1.0242
calib.py:138
2016-09-09 16:58:35,516 INFO 2000 Hz: too strong signal total=1.1878, rms=1.1872, coherency=0.9995, peak=1.0244
calib.py:138
2016-09-09 16:58:35,726 INFO 2000 Hz: too strong signal total=1.1727, rms=1.1722, coherency=0.9996, peak=1.0245
calib.py:138
2016-09-09 16:58:35,907 INFO 2000 Hz: too strong signal total=1.1591, rms=1.1586, coherency=0.9996, peak=1.0245
calib.py:138
2016-09-09 16:58:36,127 INFO 2000 Hz: too strong signal total=1.1402, rms=1.1399, coherency=0.9997, peak=1.0240
calib.py:138
2016-09-09 16:58:36,316 INFO 2000 Hz: too strong signal total=1.1234, rms=1.1231, coherency=0.9998, peak=1.0246
calib.py:138
2016-09-09 16:58:36,516 INFO 2000 Hz: too strong signal total=1.1087, rms=1.1085, coherency=0.9998, peak=1.0250
calib.py:138
2016-09-09 16:58:36,707 INFO 2000 Hz: too strong signal total=1.0935, rms=1.0934, coherency=0.9998, peak=1.0252
calib.py:138
2016-09-09 16:58:36,927 INFO 2000 Hz: too strong signal total=1.0811, rms=1.0810, coherency=0.9998, peak=1.0257
calib.py:138
2016-09-09 16:58:37,117 INFO 2000 Hz: too strong signal total=1.0703, rms=1.0702, coherency=0.9999, peak=1.0256
calib.py:138
2016-09-09 16:58:37,316 INFO 2000 Hz: too strong signal total=1.0588, rms=1.0587, coherency=0.9999, peak=1.0260
calib.py:138
2016-09-09 16:58:37,516 INFO 2000 Hz: too strong signal total=1.0476, rms=1.0475, coherency=0.9999, peak=1.0262
calib.py:138
2016-09-09 16:58:37,717 INFO 2000 Hz: too strong signal total=1.0410, rms=1.0409, coherency=0.9999, peak=1.0266
calib.py:138
2016-09-09 16:58:37,917 INFO 2000 Hz: too strong signal total=1.0368, rms=1.0367, coherency=0.9999, peak=1.0266
calib.py:138
2016-09-09 16:58:38,127 INFO 2000 Hz: too strong signal total=1.0320, rms=1.0319, coherency=0.9999, peak=1.0271
calib.py:138
2016-09-09 16:58:38,306 INFO 2000 Hz: too strong signal total=1.0290, rms=1.0289, coherency=0.9999, peak=1.0273
calib.py:138
2016-09-09 16:58:38,516 INFO 2000 Hz: too strong signal total=1.0267, rms=1.0266, coherency=0.9999, peak=1.0269
calib.py:138
2016-09-09 16:58:38,717 INFO 2000 Hz: too strong signal total=1.0257, rms=1.0256, coherency=0.9999, peak=1.0266
calib.py:138
2016-09-09 16:58:38,927 INFO 2000 Hz: too strong signal total=1.0251, rms=1.0250, coherency=0.9999, peak=1.0268
calib.py:138
2016-09-09 16:58:39,107 INFO 2000 Hz: too strong signal total=1.0269, rms=1.0267, coherency=0.9998, peak=1.0261
calib.py:138
2016-09-09 16:58:39,326 INFO 2000 Hz: too strong signal total=1.0302, rms=1.0298, coherency=0.9996, peak=1.0248
calib.py:138
2016-09-09 16:58:39,516 INFO 2000 Hz: too strong signal total=0.9894, rms=0.9850, coherency=0.9956, peak=1.0245
calib.py:138
2016-09-09 16:58:39,717 INFO 2000 Hz: too noisy signal total=0.3675, rms=0.3223, coherency=0.8771, peak=0.7486
calib.py:138
2016-09-09 16:58:39,907 INFO 2000 Hz: too noisy signal total=0.1729, rms=0.0215, coherency=0.1246, peak=0.3493
calib.py:138
2016-09-09 16:58:40,117 INFO 2000 Hz: too noisy signal total=0.1647, rms=0.0156, coherency=0.0948, peak=0.2633
calib.py:138
2016-09-09 16:58:40,316 INFO 2000 Hz: too noisy signal total=0.1678, rms=0.0164, coherency=0.0975, peak=0.2821
calib.py:138
2016-09-09 16:58:40,526 INFO 2000 Hz: too noisy signal total=0.1881, rms=0.0169, coherency=0.0900, peak=0.3024
calib.py:138
2016-09-09 16:58:40,717 INFO 2000 Hz: too noisy signal total=0.1750, rms=0.0157, coherency=0.0896, peak=0.3090
calib.py:138
2016-09-09 16:58:40,917 INFO 2000 Hz: too noisy signal total=0.1811, rms=0.0174, coherency=0.0962, peak=0.2897
calib.py:138
2016-09-09 16:58:41,107 INFO 2000 Hz: too noisy signal total=0.1980, rms=0.0179, coherency=0.0906, peak=0.3317
calib.py:138
2016-09-09 16:58:41,397 DEBUG AsyncReader thread stopped (read 171200 bytes)
async.py:28
different computers, mic at 30%:
C:\>python -m amodem recv -vvc
2016-09-09 17:09:53,085 DEBUG Audio OFDM MODEM v1.13: 1.0 kb/s (2-QAM x 1 carriers) Fs=8.0 kHz
__main__.py:219
2016-09-09 17:09:53,095 INFO PortAudio V19-devel (built Sep 8 2016 20:56:08) loaded
audio.py:19
2016-09-09 17:09:53,286 DEBUG AsyncReader thread started
async.py:23
2016-09-09 17:09:53,286 INFO verbose: 2
calib.py:132
2016-09-09 17:09:53,905 INFO 2000 Hz: too weak signal total=0.0507, rms=0.0040, coherency=0.0799, peak=0.0719
calib.py:138
2016-09-09 17:09:54,105 INFO 2000 Hz: too weak signal total=0.0532, rms=0.0042, coherency=0.0799, peak=0.0744
calib.py:138
2016-09-09 17:09:54,315 INFO 2000 Hz: too weak signal total=0.0534, rms=0.0042, coherency=0.0788, peak=0.0745
calib.py:138
2016-09-09 17:09:54,506 INFO 2000 Hz: too weak signal total=0.0535, rms=0.0042, coherency=0.0793, peak=0.0725
calib.py:138
2016-09-09 17:09:54,716 INFO 2000 Hz: too weak signal total=0.0551, rms=0.0044, coherency=0.0790, peak=0.0761
calib.py:138
2016-09-09 17:09:54,905 INFO 2000 Hz: too weak signal total=0.0544, rms=0.0044, coherency=0.0811, peak=0.0747
calib.py:138
2016-09-09 17:09:55,125 INFO 2000 Hz: too weak signal total=0.0553, rms=0.0046, coherency=0.0832, peak=0.0732
calib.py:138
2016-09-09 17:09:55,305 INFO 2000 Hz: too weak signal total=0.0551, rms=0.0048, coherency=0.0865, peak=0.0774
calib.py:138
2016-09-09 17:09:55,516 INFO 2000 Hz: too weak signal total=0.0559, rms=0.0129, coherency=0.2304, peak=0.0865
calib.py:138
2016-09-09 17:09:55,706 INFO 2000 Hz: too weak signal total=0.0594, rms=0.0200, coherency=0.3370, peak=0.0923
calib.py:138
2016-09-09 17:09:55,915 INFO 2000 Hz: too weak signal total=0.0627, rms=0.0303, coherency=0.4827, peak=0.1050
calib.py:138
2016-09-09 17:09:56,105 INFO 2000 Hz: too weak signal total=0.0772, rms=0.0540, coherency=0.6992, peak=0.1310
calib.py:138
2016-09-09 17:09:56,315 INFO 2000 Hz: too weak signal total=0.0923, rms=0.0745, coherency=0.8070, peak=0.1526
calib.py:138
2016-09-09 17:09:56,506 INFO 2000 Hz: too noisy signal total=0.1098, rms=0.0958, coherency=0.8725, peak=0.1763
calib.py:138
2016-09-09 17:09:56,716 INFO 2000 Hz: too noisy signal total=0.1300, rms=0.1182, coherency=0.9097, peak=0.1873
calib.py:138
2016-09-09 17:09:56,905 INFO 2000 Hz: too noisy signal total=0.1582, rms=0.1485, coherency=0.9385, peak=0.2281
calib.py:138
2016-09-09 17:09:57,115 INFO 2000 Hz: too noisy signal total=0.1774, rms=0.1691, coherency=0.9532, peak=0.2556
calib.py:138
2016-09-09 17:09:57,305 INFO 2000 Hz: too noisy signal total=0.2533, rms=0.2471, coherency=0.9758, peak=0.3537
calib.py:138
2016-09-09 17:09:57,526 INFO 2000 Hz: too noisy signal total=0.3367, rms=0.3325, coherency=0.9875, peak=0.4263
calib.py:138
2016-09-09 17:09:57,706 INFO 2000 Hz: too noisy signal total=0.3697, rms=0.3655, coherency=0.9887, peak=0.4675
calib.py:138
2016-09-09 17:09:57,915 INFO 2000 Hz: good signal total=0.4350, rms=0.4317, coherency=0.9924, peak=0.5140
calib.py:138
2016-09-09 17:09:58,105 INFO 2000 Hz: good signal total=0.4987, rms=0.4958, coherency=0.9942, peak=0.5938
calib.py:138
2016-09-09 17:09:58,315 INFO 2000 Hz: good signal total=0.5591, rms=0.5563, coherency=0.9950, peak=0.7127
calib.py:138
2016-09-09 17:09:58,506 INFO 2000 Hz: good signal total=0.6625, rms=0.6602, coherency=0.9965, peak=0.7957
calib.py:138
2016-09-09 17:09:58,716 INFO 2000 Hz: good signal total=0.7486, rms=0.7465, coherency=0.9973, peak=0.8888
calib.py:138
2016-09-09 17:09:58,905 INFO 2000 Hz: good signal total=0.8277, rms=0.8260, coherency=0.9979, peak=0.8964
calib.py:138
2016-09-09 17:09:59,105 INFO 2000 Hz: too strong signal total=0.9156, rms=0.9138, coherency=0.9981, peak=1.0127
calib.py:138
2016-09-09 17:09:59,305 INFO 2000 Hz: too strong signal total=1.0085, rms=1.0077, coherency=0.9992, peak=1.0246
calib.py:138
2016-09-09 17:09:59,516 INFO 2000 Hz: too strong signal total=1.0342, rms=1.0338, coherency=0.9996, peak=1.0248
calib.py:138
2016-09-09 17:09:59,706 INFO 2000 Hz: too strong signal total=1.0402, rms=1.0399, coherency=0.9997, peak=1.0247
calib.py:138
2016-09-09 17:09:59,915 INFO 2000 Hz: too strong signal total=1.0427, rms=1.0424, coherency=0.9997, peak=1.0245
calib.py:138
2016-09-09 17:10:00,105 INFO 2000 Hz: too strong signal total=1.0461, rms=1.0458, coherency=0.9997, peak=1.0245
calib.py:138
2016-09-09 17:10:00,305 INFO 2000 Hz: too strong signal total=1.0495, rms=1.0492, coherency=0.9997, peak=1.0245
calib.py:138
2016-09-09 17:10:00,506 INFO 2000 Hz: too strong signal total=1.0551, rms=1.0549, coherency=0.9998, peak=1.0247
calib.py:138
2016-09-09 17:10:00,716 INFO 2000 Hz: too strong signal total=1.0615, rms=1.0613, coherency=0.9998, peak=1.0249
calib.py:138
2016-09-09 17:10:00,905 INFO 2000 Hz: too strong signal total=1.0706, rms=1.0705, coherency=0.9998, peak=1.0248
calib.py:138
2016-09-09 17:10:01,115 INFO 2000 Hz: too strong signal total=1.0786, rms=1.0784, coherency=0.9998, peak=1.0249
calib.py:138
2016-09-09 17:10:01,305 INFO 2000 Hz: too strong signal total=1.0895, rms=1.0893, coherency=0.9999, peak=1.0250
calib.py:138
2016-09-09 17:10:01,516 INFO 2000 Hz: too strong signal total=1.0982, rms=1.0981, coherency=0.9999, peak=1.0249
calib.py:138
2016-09-09 17:10:01,696 INFO 2000 Hz: too strong signal total=1.1062, rms=1.1061, coherency=0.9999, peak=1.0249
calib.py:138
2016-09-09 17:10:01,915 INFO 2000 Hz: too strong signal total=1.1166, rms=1.1165, coherency=0.9999, peak=1.0250
calib.py:138
2016-09-09 17:10:02,105 INFO 2000 Hz: too strong signal total=1.1260, rms=1.1259, coherency=0.9999, peak=1.0252
calib.py:138
2016-09-09 17:10:02,305 INFO 2000 Hz: too strong signal total=1.1334, rms=1.1334, coherency=0.9999, peak=1.0251
calib.py:138
2016-09-09 17:10:02,506 INFO 2000 Hz: too strong signal total=1.1412, rms=1.1411, coherency=0.9999, peak=1.0250
calib.py:138
2016-09-09 17:10:02,716 INFO 2000 Hz: too strong signal total=1.0210, rms=1.0202, coherency=0.9992, peak=1.0244
calib.py:138
2016-09-09 17:10:02,905 INFO 2000 Hz: too noisy signal total=0.3217, rms=0.3172, coherency=0.9859, peak=0.6558
calib.py:138
2016-09-09 17:10:03,115 INFO 2000 Hz: too weak signal total=0.0531, rms=0.0045, coherency=0.0850, peak=0.0770
calib.py:138
2016-09-09 17:10:03,305 INFO 2000 Hz: too weak signal total=0.0547, rms=0.0043, coherency=0.0785, peak=0.0728
calib.py:138
2016-09-09 17:10:03,506 INFO 2000 Hz: too weak signal total=0.0561, rms=0.0045, coherency=0.0811, peak=0.0804
calib.py:138
2016-09-09 17:10:03,706 INFO 2000 Hz: too weak signal total=0.0544, rms=0.0044, coherency=0.0801, peak=0.0772
calib.py:138
2016-09-09 17:10:03,915 INFO 2000 Hz: too weak signal total=0.0546, rms=0.0043, coherency=0.0794, peak=0.0720
calib.py:138
2016-09-09 17:10:04,105 INFO 2000 Hz: too weak signal total=0.0540, rms=0.0044, coherency=0.0822, peak=0.0757
calib.py:138
2016-09-09 17:10:04,315 INFO 2000 Hz: too weak signal total=0.0541, rms=0.0045, coherency=0.0824, peak=0.0714
calib.py:138
2016-09-09 17:10:04,506 INFO 2000 Hz: too weak signal total=0.0547, rms=0.0043, coherency=0.0788, peak=0.0711
calib.py:138
2016-09-09 17:10:04,716 INFO 2000 Hz: too weak signal total=0.0548, rms=0.0044, coherency=0.0804, peak=0.0763
calib.py:138
2016-09-09 17:10:04,895 INFO 2000 Hz: too weak signal total=0.0562, rms=0.0046, coherency=0.0817, peak=0.0746
calib.py:138
2016-09-09 17:10:05,115 INFO 2000 Hz: too weak signal total=0.0551, rms=0.0044, coherency=0.0805, peak=0.0748
calib.py:138
2016-09-09 17:10:05,395 DEBUG AsyncReader thread stopped (read 193600 bytes)
async.py:28
2016-09-09 17:10:05,415 DEBUG Finished I/O
microphone right next to the speaker in every case. i couldn't find a cable like that in the house
how should the spectrogram for high SNR look like? are there any methods that would make it work for low SNR at even further reduced bitrate?
An example for good SNR & almost no echo:
There is a "hack" that you could may try though... Note that when you ran 1kbps calibration, you got almost perfect coherency (very close to 1.0) even when the signal was "too strong". There is a nice mathematical coincidence that allows for that (only for 1 kpbs bitrate in this MODEM), so I'd suggest you to try and do a transmission after the calibration shows high coherency (>0.999), "ignoring" the fact that input signal is saturated (e.g. "too strong").
Unfortunately, I wasn't developing this MODEM to be resilient to low SNR & significant echoes. I would recommend to try the quiet library/tool which may have better performance in low SNR scenarios.
@norill Is there anything else I can help with?
nah, but thanks for your time.
for some reason i'm getting frequency errors of -65.546 ppm and higher. consequently the demodulation fails when im using BITRATE=8, and at BITRATE=1 even decoding fails. it says good signal during calibration. i'm using windows 7