diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e65b455d37175fea3a23b738210eb01d59537980 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +Vaillant_decode +Basewave_extract +Manchester_decode +Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat_Annotated.xcf +Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat_Annotated.kra diff --git a/Basewave_extract.c b/Basewave_extract.c new file mode 100644 index 0000000000000000000000000000000000000000..9fd33ea12cd2559f3a011f3c69a6ee8651697d0b --- /dev/null +++ b/Basewave_extract.c @@ -0,0 +1,119 @@ +#include <stdio.h> +#include <unistd.h> +#include <time.h> +#include <sys/time.h> + +// Basewave_extract.c Copyright 2017 Reinhold Kainhofer, reinhold@kainhofer.com +// License: GNU GPL 3.0 +// +// Compile with: +// gcc Basewave_extract.c -o Basewave_extract +// +// Reads a string of 0 and 1 from STDIN, tries to remove a 11001100 basewave (XOR'ed) +// and prints the converted result to STDOUT (prefixed with current date/time). +// Decoding errors (i.e. no amplitude switch at the pulse mid-point) are +// indicated by a ? +// +// This app is purely pipe-through, i.e. its usage is: +// +// cat signalfile.txt | Basewave_extract > decoded_signalfile.txt +// +// To process an output file while it is still written to, you can use tail. This +// will print the proper timestamps for the signals: +// +// tail -n +1 -f signalfile.txt | ./Basewave_extract + + +typedef int bool; +#define true 1 +#define false 0 + +void main(int argc, char *argv[]) +{ + setbuf(stdout, NULL); + + bool insideZeroes = true; + int zeroes = 0; + int pulsePos = 0; + int comment = 0; + + char basewave = '0'; + char ch = '0', prev = '0'; + while(read(STDIN_FILENO, &ch, 1) > 0) { + // Everything starting with # is a comment until the end of line + if (ch == '#') { + comment = true; + if (!insideZeroes) printf("\n"); + insideZeroes = 1; + continue; + } + // Ignore all line breaks and spaces (so output can be formatted before running through this app): + if (ch == '\n' || ch == '\r') { + comment = false; + continue; + } + // Ignore all spaces (so output can be formatted before running through this app) and comments: + if (comment || ch == ' ') { + continue; + } + + // Keep track of how many zeroes we have (count at most up to 1000!) + if (ch == '0') { + if (zeroes++ > 1000) zeroes = 1000; + } else { + zeroes = 0; + } + // We have zeroes, so jump to the next char if we have another 0, reset otherwise + if (insideZeroes) { + if (ch == '0') { + prev = ch; + continue; + } else { + insideZeroes = false; + pulsePos = 0; + basewave = '0'; + // A '1' after a long sequence of '0' means some kind of signal + // (valid or invalid), so print the current date/time to start + // a new line: + struct timeval tv; + gettimeofday(&tv, NULL); + int millisec = tv.tv_usec/1000; + + char fmt[64], s[64]; + struct tm *tm; + if((tm = localtime(&tv.tv_sec)) != NULL) { + strftime(fmt, sizeof fmt, "%F %T", tm); + snprintf(s, sizeof s, "%s.%03d", fmt, millisec); + printf("%s ", s); + } + } + } + + if (pulsePos == 0) { // between pulses => needs to switch amplitude! + if (ch == prev) { + if (ch=='0' && (zeroes > 2)) { + // End of Signal, receiving just zeroes, i.e. waiting for next signal + insideZeroes = true; + basewave = '0'; + printf("\r\n"); + } else { + printf("?"); + } + // Keep the pulse position (TODO: Check if it is better for error recovery to switch!) + continue; + + } else { // Amplitude switch was detected + basewave = (basewave=='0')?'1':'0'; + printf((basewave==ch)?"0":"1"); + } + } else { + printf((basewave==ch)?"0":"1"); + } + + // Switch pulsePos: + pulsePos = (pulsePos + 1) % 2; + prev = ch; + } + printf("\r\n"); +} + diff --git a/Images/Vaillant-Thermostat-AM-868.285MHz-Inspectrum_Analysis_All.png b/Images/Vaillant-Thermostat-AM-868.285MHz-Inspectrum_Analysis_All.png new file mode 100644 index 0000000000000000000000000000000000000000..8b4c5427937b6a1a7bc22febdc6f575f3b5aab14 Binary files /dev/null and b/Images/Vaillant-Thermostat-AM-868.285MHz-Inspectrum_Analysis_All.png differ diff --git a/Images/Vaillant-Thermostat-AM-868.287MHz-Inspectrum_Analysis.png b/Images/Vaillant-Thermostat-AM-868.287MHz-Inspectrum_Analysis.png new file mode 100644 index 0000000000000000000000000000000000000000..b1e037aeb4382b27cb906446fc95dfd4f5f25250 Binary files /dev/null and b/Images/Vaillant-Thermostat-AM-868.287MHz-Inspectrum_Analysis.png differ diff --git a/Images/Vaillant-Thermostat-AM-868.287MHz-Wave-Zoom.png b/Images/Vaillant-Thermostat-AM-868.287MHz-Wave-Zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..b8a8e479acb54e1bcff1ff694f8c59d9cb078c36 Binary files /dev/null and b/Images/Vaillant-Thermostat-AM-868.287MHz-Wave-Zoom.png differ diff --git a/Images/Vaillant-Thermostat-AM-868.287MHz-Wave1a-Zoom.png b/Images/Vaillant-Thermostat-AM-868.287MHz-Wave1a-Zoom.png new file mode 100644 index 0000000000000000000000000000000000000000..136fb6b12d465bf635386a45424c5f93f59dfd8b Binary files /dev/null and b/Images/Vaillant-Thermostat-AM-868.287MHz-Wave1a-Zoom.png differ diff --git a/Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat.png b/Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat.png new file mode 100644 index 0000000000000000000000000000000000000000..dedd34ff0d104c3a588ae3381f0a423445d3b05e Binary files /dev/null and b/Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat.png differ diff --git a/Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat_Annotated.png b/Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat_Annotated.png new file mode 100644 index 0000000000000000000000000000000000000000..2fce3201fc9035445b2c8863a94827027ee52fd3 Binary files /dev/null and b/Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat_Annotated.png differ diff --git a/Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat_Annotated2.png b/Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat_Annotated2.png new file mode 100644 index 0000000000000000000000000000000000000000..ca728595d956dee30d6abdb823b463916a2a6316 Binary files /dev/null and b/Images/Vaillant-Thermostat-AM-868.287MHz-Wave2a-Zoom_Repeat_Annotated2.png differ diff --git a/Images/Vaillant-Thermostat-AM-868.288MHz-Wave.png b/Images/Vaillant-Thermostat-AM-868.288MHz-Wave.png new file mode 100644 index 0000000000000000000000000000000000000000..b8a670667fd8970007b8480df4f89eb067572636 Binary files /dev/null and b/Images/Vaillant-Thermostat-AM-868.288MHz-Wave.png differ diff --git a/Images/Vaillant-Thermostat-AM-868.28MHz-Gnuradio-Companion.png b/Images/Vaillant-Thermostat-AM-868.28MHz-Gnuradio-Companion.png new file mode 100644 index 0000000000000000000000000000000000000000..9a3cf2442c1eed5e39cd76927a35d7a12b51b1e3 Binary files /dev/null and b/Images/Vaillant-Thermostat-AM-868.28MHz-Gnuradio-Companion.png differ diff --git a/Images/Vaillant-Thermostat-AM-868MHz-gqrx-Signal.png b/Images/Vaillant-Thermostat-AM-868MHz-gqrx-Signal.png new file mode 100644 index 0000000000000000000000000000000000000000..1f249e0c9a59866b264a31d5fa055f2dac9ad5c4 Binary files /dev/null and b/Images/Vaillant-Thermostat-AM-868MHz-gqrx-Signal.png differ diff --git a/Images/Vaillant-Thermostat-Calormatic-340f-back.jpg b/Images/Vaillant-Thermostat-Calormatic-340f-back.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1f06f82e44d3c4bbc164aea747e594acf823248 Binary files /dev/null and b/Images/Vaillant-Thermostat-Calormatic-340f-back.jpg differ diff --git a/Images/Vaillant-Thermostat-Calormatic-340f-transceiver.jpg b/Images/Vaillant-Thermostat-Calormatic-340f-transceiver.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9965ee1ccf0de940fdcd6544846e70abc5e62bfe Binary files /dev/null and b/Images/Vaillant-Thermostat-Calormatic-340f-transceiver.jpg differ diff --git a/Manchester_decode.c b/Manchester_decode.c new file mode 100644 index 0000000000000000000000000000000000000000..99c8b1f7df363878addace5f499f3778f5b84062 --- /dev/null +++ b/Manchester_decode.c @@ -0,0 +1,125 @@ +#include <stdio.h> +#include <unistd.h> +#include <time.h> +#include <sys/time.h> + +// Manchester_decode.c Copyright 2017 Reinhold Kainhofer, reinhold@kainhofer.com +// License: GNU GPL 3.0 +// +// Compile with: +// gcc Manchester_decode.c -o Manchester_decode +// +// Reads a string of 0 and 1 from STDIN, tries to decode it as Manchester-encoded +// and prints the converted result to STDOUT (prefixed with current date/time). +// Decoding errors (i.e. no amplitude switch at the pulse mid-point) are +// indicated by a ? +// +// This app is purely pipe-through, i.e. its usage is: +// +// cat signalfile.txt | Manchester_decode > decoded_signalfile.txt +// +// To process an output file while it is still written to, you can use tail. This +// will print the proper timestamps for the signals: +// +// tail -n +1 -f signalfile.txt | ./Manchester_decode + + +typedef int bool; +#define true 1 +#define false 0 + +void main(int argc, char *argv[]) +{ + setbuf(stdout, NULL); + + bool insideZeroes = true; + int zeroes = 0; + int pulsePos = 0; + int comment = 0; + + char ch = '0', prev = '0'; + while(read(STDIN_FILENO, &ch, 1) > 0) { + // Everything starting with # is a comment until the end of line + if (ch == '#') { + comment = true; + if (!insideZeroes) printf("\n"); + insideZeroes = 1; + continue; + } + // Ignore all line breaks and spaces (so output can be formatted before running through this app): + if (ch == '\n' || ch == '\r') { + comment = false; + continue; + } + // Ignore all spaces (so output can be formatted before running through this app) and comments: + if (comment || ch == ' ') { + continue; + } + + // Keep track of how many zeroes we have (count at most up to 1000!) + if (ch == '0') { + if (zeroes++ > 1000) zeroes = 1000; + } else { + zeroes = 0; + } + // We have zeroes, so jump to the next char if we have another 0, reset otherwise + if (insideZeroes) { + if (ch == '0') { + prev = ch; + continue; + } else { + insideZeroes = false; + pulsePos = 0; + // A '1' after a long sequence of '0' means some kind of signal + // (valid or invalid), so print the current date/time to start + // a new line: + struct timeval tv; + gettimeofday(&tv, NULL); + int millisec = tv.tv_usec/1000; + + char fmt[64], s[64]; + struct tm *tm; + if((tm = localtime(&tv.tv_sec)) != NULL) { + strftime(fmt, sizeof fmt, "%F %T", tm); + snprintf(s, sizeof s, "%s.%03d", fmt, millisec); + printf("%s ", s); + } + } + } + + if (pulsePos == 0) { // middle of the pulse => needs to switch amplitude! + + if (ch == prev) { + if (ch=='0' && (zeroes > 2)) { + // End of Signal, receiving just zeroes, i.e. waiting for next signal + insideZeroes = true; + printf("\r\n"); + } else { + printf("?"); + } + // Keep the pulse position (TODO: Check if it is better for error recovery to switch!) + continue; + + } else { // Amplitude switch was detected + + // Switch 0->1 means 0, while 1->0 means 1 + if (prev=='0' && ch=='1') { + printf("0"); + } else if (prev=='1' && ch=='0') { + printf("1"); + } else { + // TODO: Maybe we should not switch pulsePos in this case? + printf("(%c)", ch); + } + } + } else { + // Between pulses, amplitude can change or not (does not matter) + } + + // Switch pulsePos: + pulsePos = (pulsePos + 1) % 2; + prev = ch; + } + printf("\r\n"); +} + diff --git a/Vaillant.grc b/Vaillant.grc new file mode 100644 index 0000000000000000000000000000000000000000..5dbcb6e80ea31c939a5e2ad073dde24c29fb6a05 --- /dev/null +++ b/Vaillant.grc @@ -0,0 +1,3631 @@ +<?xml version='1.0' encoding='utf-8'?> +<?grc format='1' created='3.7.9'?> +<flow_graph> + <timestamp>Sun Apr 16 22:29:26 2017</timestamp> + <block> + <key>options</key> + <param> + <key>author</key> + <value>Reinhold Kainhofer</value> + </param> + <param> + <key>window_size</key> + <value></value> + </param> + <param> + <key>category</key> + <value>Custom</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>description</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 8)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>generate_options</key> + <value>qt_gui</value> + </param> + <param> + <key>hier_block_src_path</key> + <value>.:</value> + </param> + <param> + <key>id</key> + <value>top_block</value> + </param> + <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> + <key>qt_qss_theme</key> + <value></value> + </param> + <param> + <key>realtime_scheduling</key> + <value></value> + </param> + <param> + <key>run_command</key> + <value>{python} -u {filename}</value> + </param> + <param> + <key>run_options</key> + <value>prompt</value> + </param> + <param> + <key>run</key> + <value>True</value> + </param> + <param> + <key>thread_safe_setters</key> + <value></value> + </param> + <param> + <key>title</key> + <value>Vaillant calorMATIC 340f decoder</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(384, 13)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>baud_rate</value> + </param> + <param> + <key>value</key> + <value>606</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(280, 13)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>default_freq</value> + </param> + <param> + <key>value</key> + <value>868280000</value> + </param> + </block> + <block> + <key>variable_qtgui_entry</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>value</key> + <value>default_freq</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(856, 21)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>freq</value> + </param> + <param> + <key>label</key> + <value></value> + </param> + <param> + <key>type</key> + <value>real</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(656, 13)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>pathprefix</value> + </param> + <param> + <key>value</key> + <value>"/home/reinhold/" + datetime.now().strftime("%Y-%m-%d_%H-%M-%S") + "_SDR_Vaillant_calormatic_1M_868.28MHz_AM"</value> + </param> + </block> + <block> + <key>variable</key> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(176, 13)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>samp_rate</value> + </param> + <param> + <key>value</key> + <value>1000000</value> + </param> + </block> + <block> + <key>analog_am_demod_cf</key> + <param> + <key>audio_decim</key> + <value>1</value> + </param> + <param> + <key>audio_pass</key> + <value>2500</value> + </param> + <param> + <key>audio_stop</key> + <value>5000</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>chan_rate</key> + <value>48000</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(216, 911)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>analog_am_demod_cf_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>analog_sig_source_x</key> + <param> + <key>amp</key> + <value>1</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>freq</key> + <value>4750</value> + </param> + <param> + <key>_coordinate</key> + <value>(232, 256)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>analog_sig_source_x_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>offset</key> + <value>0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>waveform</key> + <value>analog.GR_COS_WAVE</value> + </param> + </block> + <block> + <key>blocks_add_const_vxx</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>const</key> + <value>48</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(240, 804)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_add_const_vxx_0</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_complex_to_mag</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(224, 873)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_complex_to_mag_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_complex_to_mag_squared</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(424, 593)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_complex_to_mag_squared_1</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_file_sink</key> + <param> + <key>append</key> + <value>False</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>file</key> + <value>pathprefix + ".dump"</value> + </param> + <param> + <key>_coordinate</key> + <value>(792, 142)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_file_sink_0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>unbuffered</key> + <value>False</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_file_sink</key> + <param> + <key>append</key> + <value>False</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>file</key> + <value>pathprefix + ".final"</value> + </param> + <param> + <key>_coordinate</key> + <value>(800, 790)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_file_sink_1</value> + </param> + <param> + <key>type</key> + <value>byte</value> + </param> + <param> + <key>unbuffered</key> + <value>False</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_file_source</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>file</key> + <value>pathprefix+".dump"</value> + </param> + <param> + <key>_coordinate</key> + <value>(48, 261)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_file_source_1</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>repeat</key> + <value>True</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_float_to_uchar</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(376, 809)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_float_to_uchar_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_keep_one_in_n</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(664, 692)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_keep_one_in_n_1</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>n</key> + <value>samp_rate/baud_rate/2</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_multiply_xx</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(440, 209)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_multiply_xx_0</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>num_inputs</key> + <value>2</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_threshold_ff</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(456, 678)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>high</key> + <value>0.001</value> + </param> + <param> + <key>id</key> + <value>blocks_threshold_ff_1</value> + </param> + <param> + <key>init</key> + <value>0</value> + </param> + <param> + <key>low</key> + <value>0.0005</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + </block> + <block> + <key>blocks_throttle</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(256, 204)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_throttle_1</value> + </param> + <param> + <key>ignoretag</key> + <value>True</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>samples_per_second</key> + <value>samp_rate</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + </block> + <block> + <key>blocks_wavfile_sink</key> + <param> + <key>bits_per_sample</key> + <value>16</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>file</key> + <value>pathprefix + ".wav"</value> + </param> + <param> + <key>_coordinate</key> + <value>(560, 838)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>blocks_wavfile_sink_0</value> + </param> + <param> + <key>nchan</key> + <value>1</value> + </param> + <param> + <key>samp_rate</key> + <value>44100</value> + </param> + </block> + <block> + <key>import</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>_coordinate</key> + <value>(544, 12)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>import_0</value> + </param> + <param> + <key>import</key> + <value>from datetime import datetime</value> + </param> + </block> + <block> + <key>low_pass_filter</key> + <param> + <key>beta</key> + <value>6.76</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>cutoff_freq</key> + <value>20e3</value> + </param> + <param> + <key>decim</key> + <value>1</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>fir_filter_ccf</value> + </param> + <param> + <key>_coordinate</key> + <value>(232, 458)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>gain</key> + <value>1</value> + </param> + <param> + <key>id</key> + <value>low_pass_filter_0</value> + </param> + <param> + <key>interp</key> + <value>1</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>width</key> + <value>10e3</value> + </param> + <param> + <key>win</key> + <value>firdes.WIN_HAMMING</value> + </param> + </block> + <block> + <key>qtgui_sink_x</key> + <param> + <key>bw</key> + <value>samp_rate</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>fc</key> + <value>freq</value> + </param> + <param> + <key>freqchangevar</key> + <value>None</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>fftsize</key> + <value>1024</value> + </param> + <param> + <key>_coordinate</key> + <value>(808, 407)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>qtgui_sink_x_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>plotconst</key> + <value>True</value> + </param> + <param> + <key>plotfreq</key> + <value>True</value> + </param> + <param> + <key>plottime</key> + <value>True</value> + </param> + <param> + <key>plotwaterfall</key> + <value>True</value> + </param> + <param> + <key>showports</key> + <value>True</value> + </param> + <param> + <key>showrf</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>rate</key> + <value>10</value> + </param> + <param> + <key>wintype</key> + <value>firdes.WIN_BLACKMAN_hARRIS</value> + </param> + </block> + <block> + <key>qtgui_sink_x</key> + <param> + <key>bw</key> + <value>samp_rate</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>fc</key> + <value>freq</value> + </param> + <param> + <key>freqchangevar</key> + <value>None</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>fftsize</key> + <value>1024</value> + </param> + <param> + <key>_coordinate</key> + <value>(328, 87)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>qtgui_sink_x_0_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>plotconst</key> + <value>True</value> + </param> + <param> + <key>plotfreq</key> + <value>True</value> + </param> + <param> + <key>plottime</key> + <value>True</value> + </param> + <param> + <key>plotwaterfall</key> + <value>True</value> + </param> + <param> + <key>showports</key> + <value>True</value> + </param> + <param> + <key>showrf</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>rate</key> + <value>10</value> + </param> + <param> + <key>wintype</key> + <value>firdes.WIN_BLACKMAN_hARRIS</value> + </param> + </block> + <block> + <key>qtgui_time_sink_x</key> + <param> + <key>autoscale</key> + <value>False</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>ctrlpanel</key> + <value>False</value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>entags</key> + <value>True</value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(808, 334)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid</key> + <value>False</value> + </param> + <param> + <key>id</key> + <value>qtgui_time_sink_x_0</value> + </param> + <param> + <key>legend</key> + <value>True</value> + </param> + <param> + <key>alpha1</key> + <value>1.0</value> + </param> + <param> + <key>color1</key> + <value>"blue"</value> + </param> + <param> + <key>label1</key> + <value></value> + </param> + <param> + <key>marker1</key> + <value>-1</value> + </param> + <param> + <key>style1</key> + <value>1</value> + </param> + <param> + <key>width1</key> + <value>1</value> + </param> + <param> + <key>alpha10</key> + <value>1.0</value> + </param> + <param> + <key>color10</key> + <value>"blue"</value> + </param> + <param> + <key>label10</key> + <value></value> + </param> + <param> + <key>marker10</key> + <value>-1</value> + </param> + <param> + <key>style10</key> + <value>1</value> + </param> + <param> + <key>width10</key> + <value>1</value> + </param> + <param> + <key>alpha2</key> + <value>1.0</value> + </param> + <param> + <key>color2</key> + <value>"red"</value> + </param> + <param> + <key>label2</key> + <value></value> + </param> + <param> + <key>marker2</key> + <value>-1</value> + </param> + <param> + <key>style2</key> + <value>1</value> + </param> + <param> + <key>width2</key> + <value>1</value> + </param> + <param> + <key>alpha3</key> + <value>1.0</value> + </param> + <param> + <key>color3</key> + <value>"green"</value> + </param> + <param> + <key>label3</key> + <value></value> + </param> + <param> + <key>marker3</key> + <value>-1</value> + </param> + <param> + <key>style3</key> + <value>1</value> + </param> + <param> + <key>width3</key> + <value>1</value> + </param> + <param> + <key>alpha4</key> + <value>1.0</value> + </param> + <param> + <key>color4</key> + <value>"black"</value> + </param> + <param> + <key>label4</key> + <value></value> + </param> + <param> + <key>marker4</key> + <value>-1</value> + </param> + <param> + <key>style4</key> + <value>1</value> + </param> + <param> + <key>width4</key> + <value>1</value> + </param> + <param> + <key>alpha5</key> + <value>1.0</value> + </param> + <param> + <key>color5</key> + <value>"cyan"</value> + </param> + <param> + <key>label5</key> + <value></value> + </param> + <param> + <key>marker5</key> + <value>-1</value> + </param> + <param> + <key>style5</key> + <value>1</value> + </param> + <param> + <key>width5</key> + <value>1</value> + </param> + <param> + <key>alpha6</key> + <value>1.0</value> + </param> + <param> + <key>color6</key> + <value>"magenta"</value> + </param> + <param> + <key>label6</key> + <value></value> + </param> + <param> + <key>marker6</key> + <value>-1</value> + </param> + <param> + <key>style6</key> + <value>1</value> + </param> + <param> + <key>width6</key> + <value>1</value> + </param> + <param> + <key>alpha7</key> + <value>1.0</value> + </param> + <param> + <key>color7</key> + <value>"yellow"</value> + </param> + <param> + <key>label7</key> + <value></value> + </param> + <param> + <key>marker7</key> + <value>-1</value> + </param> + <param> + <key>style7</key> + <value>1</value> + </param> + <param> + <key>width7</key> + <value>1</value> + </param> + <param> + <key>alpha8</key> + <value>1.0</value> + </param> + <param> + <key>color8</key> + <value>"dark red"</value> + </param> + <param> + <key>label8</key> + <value></value> + </param> + <param> + <key>marker8</key> + <value>-1</value> + </param> + <param> + <key>style8</key> + <value>1</value> + </param> + <param> + <key>width8</key> + <value>1</value> + </param> + <param> + <key>alpha9</key> + <value>1.0</value> + </param> + <param> + <key>color9</key> + <value>"dark green"</value> + </param> + <param> + <key>label9</key> + <value></value> + </param> + <param> + <key>marker9</key> + <value>-1</value> + </param> + <param> + <key>style9</key> + <value>1</value> + </param> + <param> + <key>width9</key> + <value>1</value> + </param> + <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>size</key> + <value>1024</value> + </param> + <param> + <key>srate</key> + <value>samp_rate</value> + </param> + <param> + <key>tr_chan</key> + <value>0</value> + </param> + <param> + <key>tr_delay</key> + <value>0</value> + </param> + <param> + <key>tr_level</key> + <value>0.0</value> + </param> + <param> + <key>tr_mode</key> + <value>qtgui.TRIG_MODE_FREE</value> + </param> + <param> + <key>tr_slope</key> + <value>qtgui.TRIG_SLOPE_POS</value> + </param> + <param> + <key>tr_tag</key> + <value>""</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> + <param> + <key>ylabel</key> + <value>Amplitude</value> + </param> + <param> + <key>yunit</key> + <value>""</value> + </param> + <param> + <key>ymax</key> + <value>1</value> + </param> + <param> + <key>ymin</key> + <value>-1</value> + </param> + </block> + <block> + <key>qtgui_waterfall_sink_x</key> + <param> + <key>bw</key> + <value>samp_rate</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>fc</key> + <value>freq</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>fftsize</key> + <value>1024</value> + </param> + <param> + <key>_coordinate</key> + <value>(808, 494)</value> + </param> + <param> + <key>gui_hint</key> + <value></value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid</key> + <value>False</value> + </param> + <param> + <key>id</key> + <value>qtgui_waterfall_sink_x_0</value> + </param> + <param> + <key>int_max</key> + <value>10</value> + </param> + <param> + <key>int_min</key> + <value>-140</value> + </param> + <param> + <key>legend</key> + <value>True</value> + </param> + <param> + <key>alpha1</key> + <value>1.0</value> + </param> + <param> + <key>color1</key> + <value>0</value> + </param> + <param> + <key>label1</key> + <value></value> + </param> + <param> + <key>alpha10</key> + <value>1.0</value> + </param> + <param> + <key>color10</key> + <value>0</value> + </param> + <param> + <key>label10</key> + <value></value> + </param> + <param> + <key>alpha2</key> + <value>1.0</value> + </param> + <param> + <key>color2</key> + <value>0</value> + </param> + <param> + <key>label2</key> + <value></value> + </param> + <param> + <key>alpha3</key> + <value>1.0</value> + </param> + <param> + <key>color3</key> + <value>0</value> + </param> + <param> + <key>label3</key> + <value></value> + </param> + <param> + <key>alpha4</key> + <value>1.0</value> + </param> + <param> + <key>color4</key> + <value>0</value> + </param> + <param> + <key>label4</key> + <value></value> + </param> + <param> + <key>alpha5</key> + <value>1.0</value> + </param> + <param> + <key>color5</key> + <value>0</value> + </param> + <param> + <key>label5</key> + <value></value> + </param> + <param> + <key>alpha6</key> + <value>1.0</value> + </param> + <param> + <key>color6</key> + <value>0</value> + </param> + <param> + <key>label6</key> + <value></value> + </param> + <param> + <key>alpha7</key> + <value>1.0</value> + </param> + <param> + <key>color7</key> + <value>0</value> + </param> + <param> + <key>label7</key> + <value></value> + </param> + <param> + <key>alpha8</key> + <value>1.0</value> + </param> + <param> + <key>color8</key> + <value>0</value> + </param> + <param> + <key>label8</key> + <value></value> + </param> + <param> + <key>alpha9</key> + <value>1.0</value> + </param> + <param> + <key>color9</key> + <value>0</value> + </param> + <param> + <key>label9</key> + <value></value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>name</key> + <value>""</value> + </param> + <param> + <key>nconnections</key> + <value>1</value> + </param> + <param> + <key>showports</key> + <value>True</value> + </param> + <param> + <key>freqhalf</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>update_time</key> + <value>0.10</value> + </param> + <param> + <key>wintype</key> + <value>firdes.WIN_BLACKMAN_hARRIS</value> + </param> + </block> + <block> + <key>rtlsdr_source</key> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>ant0</key> + <value></value> + </param> + <param> + <key>bb_gain0</key> + <value>20</value> + </param> + <param> + <key>bw0</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode0</key> + <value>0</value> + </param> + <param> + <key>corr0</key> + <value>0</value> + </param> + <param> + <key>freq0</key> + <value>freq</value> + </param> + <param> + <key>gain_mode0</key> + <value>False</value> + </param> + <param> + <key>if_gain0</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode0</key> + <value>0</value> + </param> + <param> + <key>gain0</key> + <value>10</value> + </param> + <param> + <key>ant10</key> + <value></value> + </param> + <param> + <key>bb_gain10</key> + <value>20</value> + </param> + <param> + <key>bw10</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode10</key> + <value>0</value> + </param> + <param> + <key>corr10</key> + <value>0</value> + </param> + <param> + <key>freq10</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode10</key> + <value>False</value> + </param> + <param> + <key>if_gain10</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode10</key> + <value>0</value> + </param> + <param> + <key>gain10</key> + <value>10</value> + </param> + <param> + <key>ant11</key> + <value></value> + </param> + <param> + <key>bb_gain11</key> + <value>20</value> + </param> + <param> + <key>bw11</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode11</key> + <value>0</value> + </param> + <param> + <key>corr11</key> + <value>0</value> + </param> + <param> + <key>freq11</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode11</key> + <value>False</value> + </param> + <param> + <key>if_gain11</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode11</key> + <value>0</value> + </param> + <param> + <key>gain11</key> + <value>10</value> + </param> + <param> + <key>ant12</key> + <value></value> + </param> + <param> + <key>bb_gain12</key> + <value>20</value> + </param> + <param> + <key>bw12</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode12</key> + <value>0</value> + </param> + <param> + <key>corr12</key> + <value>0</value> + </param> + <param> + <key>freq12</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode12</key> + <value>False</value> + </param> + <param> + <key>if_gain12</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode12</key> + <value>0</value> + </param> + <param> + <key>gain12</key> + <value>10</value> + </param> + <param> + <key>ant13</key> + <value></value> + </param> + <param> + <key>bb_gain13</key> + <value>20</value> + </param> + <param> + <key>bw13</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode13</key> + <value>0</value> + </param> + <param> + <key>corr13</key> + <value>0</value> + </param> + <param> + <key>freq13</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode13</key> + <value>False</value> + </param> + <param> + <key>if_gain13</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode13</key> + <value>0</value> + </param> + <param> + <key>gain13</key> + <value>10</value> + </param> + <param> + <key>ant14</key> + <value></value> + </param> + <param> + <key>bb_gain14</key> + <value>20</value> + </param> + <param> + <key>bw14</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode14</key> + <value>0</value> + </param> + <param> + <key>corr14</key> + <value>0</value> + </param> + <param> + <key>freq14</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode14</key> + <value>False</value> + </param> + <param> + <key>if_gain14</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode14</key> + <value>0</value> + </param> + <param> + <key>gain14</key> + <value>10</value> + </param> + <param> + <key>ant15</key> + <value></value> + </param> + <param> + <key>bb_gain15</key> + <value>20</value> + </param> + <param> + <key>bw15</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode15</key> + <value>0</value> + </param> + <param> + <key>corr15</key> + <value>0</value> + </param> + <param> + <key>freq15</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode15</key> + <value>False</value> + </param> + <param> + <key>if_gain15</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode15</key> + <value>0</value> + </param> + <param> + <key>gain15</key> + <value>10</value> + </param> + <param> + <key>ant16</key> + <value></value> + </param> + <param> + <key>bb_gain16</key> + <value>20</value> + </param> + <param> + <key>bw16</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode16</key> + <value>0</value> + </param> + <param> + <key>corr16</key> + <value>0</value> + </param> + <param> + <key>freq16</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode16</key> + <value>False</value> + </param> + <param> + <key>if_gain16</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode16</key> + <value>0</value> + </param> + <param> + <key>gain16</key> + <value>10</value> + </param> + <param> + <key>ant17</key> + <value></value> + </param> + <param> + <key>bb_gain17</key> + <value>20</value> + </param> + <param> + <key>bw17</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode17</key> + <value>0</value> + </param> + <param> + <key>corr17</key> + <value>0</value> + </param> + <param> + <key>freq17</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode17</key> + <value>False</value> + </param> + <param> + <key>if_gain17</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode17</key> + <value>0</value> + </param> + <param> + <key>gain17</key> + <value>10</value> + </param> + <param> + <key>ant18</key> + <value></value> + </param> + <param> + <key>bb_gain18</key> + <value>20</value> + </param> + <param> + <key>bw18</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode18</key> + <value>0</value> + </param> + <param> + <key>corr18</key> + <value>0</value> + </param> + <param> + <key>freq18</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode18</key> + <value>False</value> + </param> + <param> + <key>if_gain18</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode18</key> + <value>0</value> + </param> + <param> + <key>gain18</key> + <value>10</value> + </param> + <param> + <key>ant19</key> + <value></value> + </param> + <param> + <key>bb_gain19</key> + <value>20</value> + </param> + <param> + <key>bw19</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode19</key> + <value>0</value> + </param> + <param> + <key>corr19</key> + <value>0</value> + </param> + <param> + <key>freq19</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode19</key> + <value>False</value> + </param> + <param> + <key>if_gain19</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode19</key> + <value>0</value> + </param> + <param> + <key>gain19</key> + <value>10</value> + </param> + <param> + <key>ant1</key> + <value></value> + </param> + <param> + <key>bb_gain1</key> + <value>20</value> + </param> + <param> + <key>bw1</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode1</key> + <value>0</value> + </param> + <param> + <key>corr1</key> + <value>0</value> + </param> + <param> + <key>freq1</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode1</key> + <value>False</value> + </param> + <param> + <key>if_gain1</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode1</key> + <value>0</value> + </param> + <param> + <key>gain1</key> + <value>10</value> + </param> + <param> + <key>ant20</key> + <value></value> + </param> + <param> + <key>bb_gain20</key> + <value>20</value> + </param> + <param> + <key>bw20</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode20</key> + <value>0</value> + </param> + <param> + <key>corr20</key> + <value>0</value> + </param> + <param> + <key>freq20</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode20</key> + <value>False</value> + </param> + <param> + <key>if_gain20</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode20</key> + <value>0</value> + </param> + <param> + <key>gain20</key> + <value>10</value> + </param> + <param> + <key>ant21</key> + <value></value> + </param> + <param> + <key>bb_gain21</key> + <value>20</value> + </param> + <param> + <key>bw21</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode21</key> + <value>0</value> + </param> + <param> + <key>corr21</key> + <value>0</value> + </param> + <param> + <key>freq21</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode21</key> + <value>False</value> + </param> + <param> + <key>if_gain21</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode21</key> + <value>0</value> + </param> + <param> + <key>gain21</key> + <value>10</value> + </param> + <param> + <key>ant22</key> + <value></value> + </param> + <param> + <key>bb_gain22</key> + <value>20</value> + </param> + <param> + <key>bw22</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode22</key> + <value>0</value> + </param> + <param> + <key>corr22</key> + <value>0</value> + </param> + <param> + <key>freq22</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode22</key> + <value>False</value> + </param> + <param> + <key>if_gain22</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode22</key> + <value>0</value> + </param> + <param> + <key>gain22</key> + <value>10</value> + </param> + <param> + <key>ant23</key> + <value></value> + </param> + <param> + <key>bb_gain23</key> + <value>20</value> + </param> + <param> + <key>bw23</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode23</key> + <value>0</value> + </param> + <param> + <key>corr23</key> + <value>0</value> + </param> + <param> + <key>freq23</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode23</key> + <value>False</value> + </param> + <param> + <key>if_gain23</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode23</key> + <value>0</value> + </param> + <param> + <key>gain23</key> + <value>10</value> + </param> + <param> + <key>ant24</key> + <value></value> + </param> + <param> + <key>bb_gain24</key> + <value>20</value> + </param> + <param> + <key>bw24</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode24</key> + <value>0</value> + </param> + <param> + <key>corr24</key> + <value>0</value> + </param> + <param> + <key>freq24</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode24</key> + <value>False</value> + </param> + <param> + <key>if_gain24</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode24</key> + <value>0</value> + </param> + <param> + <key>gain24</key> + <value>10</value> + </param> + <param> + <key>ant25</key> + <value></value> + </param> + <param> + <key>bb_gain25</key> + <value>20</value> + </param> + <param> + <key>bw25</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode25</key> + <value>0</value> + </param> + <param> + <key>corr25</key> + <value>0</value> + </param> + <param> + <key>freq25</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode25</key> + <value>False</value> + </param> + <param> + <key>if_gain25</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode25</key> + <value>0</value> + </param> + <param> + <key>gain25</key> + <value>10</value> + </param> + <param> + <key>ant26</key> + <value></value> + </param> + <param> + <key>bb_gain26</key> + <value>20</value> + </param> + <param> + <key>bw26</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode26</key> + <value>0</value> + </param> + <param> + <key>corr26</key> + <value>0</value> + </param> + <param> + <key>freq26</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode26</key> + <value>False</value> + </param> + <param> + <key>if_gain26</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode26</key> + <value>0</value> + </param> + <param> + <key>gain26</key> + <value>10</value> + </param> + <param> + <key>ant27</key> + <value></value> + </param> + <param> + <key>bb_gain27</key> + <value>20</value> + </param> + <param> + <key>bw27</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode27</key> + <value>0</value> + </param> + <param> + <key>corr27</key> + <value>0</value> + </param> + <param> + <key>freq27</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode27</key> + <value>False</value> + </param> + <param> + <key>if_gain27</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode27</key> + <value>0</value> + </param> + <param> + <key>gain27</key> + <value>10</value> + </param> + <param> + <key>ant28</key> + <value></value> + </param> + <param> + <key>bb_gain28</key> + <value>20</value> + </param> + <param> + <key>bw28</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode28</key> + <value>0</value> + </param> + <param> + <key>corr28</key> + <value>0</value> + </param> + <param> + <key>freq28</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode28</key> + <value>False</value> + </param> + <param> + <key>if_gain28</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode28</key> + <value>0</value> + </param> + <param> + <key>gain28</key> + <value>10</value> + </param> + <param> + <key>ant29</key> + <value></value> + </param> + <param> + <key>bb_gain29</key> + <value>20</value> + </param> + <param> + <key>bw29</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode29</key> + <value>0</value> + </param> + <param> + <key>corr29</key> + <value>0</value> + </param> + <param> + <key>freq29</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode29</key> + <value>False</value> + </param> + <param> + <key>if_gain29</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode29</key> + <value>0</value> + </param> + <param> + <key>gain29</key> + <value>10</value> + </param> + <param> + <key>ant2</key> + <value></value> + </param> + <param> + <key>bb_gain2</key> + <value>20</value> + </param> + <param> + <key>bw2</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode2</key> + <value>0</value> + </param> + <param> + <key>corr2</key> + <value>0</value> + </param> + <param> + <key>freq2</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode2</key> + <value>False</value> + </param> + <param> + <key>if_gain2</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode2</key> + <value>0</value> + </param> + <param> + <key>gain2</key> + <value>10</value> + </param> + <param> + <key>ant30</key> + <value></value> + </param> + <param> + <key>bb_gain30</key> + <value>20</value> + </param> + <param> + <key>bw30</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode30</key> + <value>0</value> + </param> + <param> + <key>corr30</key> + <value>0</value> + </param> + <param> + <key>freq30</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode30</key> + <value>False</value> + </param> + <param> + <key>if_gain30</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode30</key> + <value>0</value> + </param> + <param> + <key>gain30</key> + <value>10</value> + </param> + <param> + <key>ant31</key> + <value></value> + </param> + <param> + <key>bb_gain31</key> + <value>20</value> + </param> + <param> + <key>bw31</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode31</key> + <value>0</value> + </param> + <param> + <key>corr31</key> + <value>0</value> + </param> + <param> + <key>freq31</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode31</key> + <value>False</value> + </param> + <param> + <key>if_gain31</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode31</key> + <value>0</value> + </param> + <param> + <key>gain31</key> + <value>10</value> + </param> + <param> + <key>ant3</key> + <value></value> + </param> + <param> + <key>bb_gain3</key> + <value>20</value> + </param> + <param> + <key>bw3</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode3</key> + <value>0</value> + </param> + <param> + <key>corr3</key> + <value>0</value> + </param> + <param> + <key>freq3</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode3</key> + <value>False</value> + </param> + <param> + <key>if_gain3</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode3</key> + <value>0</value> + </param> + <param> + <key>gain3</key> + <value>10</value> + </param> + <param> + <key>ant4</key> + <value></value> + </param> + <param> + <key>bb_gain4</key> + <value>20</value> + </param> + <param> + <key>bw4</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode4</key> + <value>0</value> + </param> + <param> + <key>corr4</key> + <value>0</value> + </param> + <param> + <key>freq4</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode4</key> + <value>False</value> + </param> + <param> + <key>if_gain4</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode4</key> + <value>0</value> + </param> + <param> + <key>gain4</key> + <value>10</value> + </param> + <param> + <key>ant5</key> + <value></value> + </param> + <param> + <key>bb_gain5</key> + <value>20</value> + </param> + <param> + <key>bw5</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode5</key> + <value>0</value> + </param> + <param> + <key>corr5</key> + <value>0</value> + </param> + <param> + <key>freq5</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode5</key> + <value>False</value> + </param> + <param> + <key>if_gain5</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode5</key> + <value>0</value> + </param> + <param> + <key>gain5</key> + <value>10</value> + </param> + <param> + <key>ant6</key> + <value></value> + </param> + <param> + <key>bb_gain6</key> + <value>20</value> + </param> + <param> + <key>bw6</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode6</key> + <value>0</value> + </param> + <param> + <key>corr6</key> + <value>0</value> + </param> + <param> + <key>freq6</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode6</key> + <value>False</value> + </param> + <param> + <key>if_gain6</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode6</key> + <value>0</value> + </param> + <param> + <key>gain6</key> + <value>10</value> + </param> + <param> + <key>ant7</key> + <value></value> + </param> + <param> + <key>bb_gain7</key> + <value>20</value> + </param> + <param> + <key>bw7</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode7</key> + <value>0</value> + </param> + <param> + <key>corr7</key> + <value>0</value> + </param> + <param> + <key>freq7</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode7</key> + <value>False</value> + </param> + <param> + <key>if_gain7</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode7</key> + <value>0</value> + </param> + <param> + <key>gain7</key> + <value>10</value> + </param> + <param> + <key>ant8</key> + <value></value> + </param> + <param> + <key>bb_gain8</key> + <value>20</value> + </param> + <param> + <key>bw8</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode8</key> + <value>0</value> + </param> + <param> + <key>corr8</key> + <value>0</value> + </param> + <param> + <key>freq8</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode8</key> + <value>False</value> + </param> + <param> + <key>if_gain8</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode8</key> + <value>0</value> + </param> + <param> + <key>gain8</key> + <value>10</value> + </param> + <param> + <key>ant9</key> + <value></value> + </param> + <param> + <key>bb_gain9</key> + <value>20</value> + </param> + <param> + <key>bw9</key> + <value>0</value> + </param> + <param> + <key>dc_offset_mode9</key> + <value>0</value> + </param> + <param> + <key>corr9</key> + <value>0</value> + </param> + <param> + <key>freq9</key> + <value>100e6</value> + </param> + <param> + <key>gain_mode9</key> + <value>False</value> + </param> + <param> + <key>if_gain9</key> + <value>20</value> + </param> + <param> + <key>iq_balance_mode9</key> + <value>0</value> + </param> + <param> + <key>gain9</key> + <value>10</value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>args</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(8, 100)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>id</key> + <value>rtlsdr_source_0</value> + </param> + <param> + <key>maxoutbuf</key> + <value>0</value> + </param> + <param> + <key>clock_source0</key> + <value></value> + </param> + <param> + <key>time_source0</key> + <value></value> + </param> + <param> + <key>clock_source1</key> + <value></value> + </param> + <param> + <key>time_source1</key> + <value></value> + </param> + <param> + <key>clock_source2</key> + <value></value> + </param> + <param> + <key>time_source2</key> + <value></value> + </param> + <param> + <key>clock_source3</key> + <value></value> + </param> + <param> + <key>time_source3</key> + <value></value> + </param> + <param> + <key>clock_source4</key> + <value></value> + </param> + <param> + <key>time_source4</key> + <value></value> + </param> + <param> + <key>clock_source5</key> + <value></value> + </param> + <param> + <key>time_source5</key> + <value></value> + </param> + <param> + <key>clock_source6</key> + <value></value> + </param> + <param> + <key>time_source6</key> + <value></value> + </param> + <param> + <key>clock_source7</key> + <value></value> + </param> + <param> + <key>time_source7</key> + <value></value> + </param> + <param> + <key>minoutbuf</key> + <value>0</value> + </param> + <param> + <key>nchan</key> + <value>1</value> + </param> + <param> + <key>num_mboards</key> + <value>1</value> + </param> + <param> + <key>type</key> + <value>fc32</value> + </param> + <param> + <key>sample_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>sync</key> + <value></value> + </param> + </block> + <block> + <key>wxgui_scopesink2</key> + <param> + <key>ac_couple</key> + <value>False</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(600, 943)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>id</key> + <value>wxgui_scopesink2_0</value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>num_inputs</key> + <value>1</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>t_scale</key> + <value>0</value> + </param> + <param> + <key>title</key> + <value>Scope Plot</value> + </param> + <param> + <key>trig_mode</key> + <value>wxgui.TRIG_MODE_AUTO</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>v_offset</key> + <value>0</value> + </param> + <param> + <key>v_scale</key> + <value>0</value> + </param> + <param> + <key>win_size</key> + <value></value> + </param> + <param> + <key>xy_mode</key> + <value>False</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> + </param> + </block> + <block> + <key>wxgui_scopesink2</key> + <param> + <key>ac_couple</key> + <value>False</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(848, 567)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>id</key> + <value>wxgui_scopesink2_1</value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>num_inputs</key> + <value>1</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>t_scale</key> + <value>0</value> + </param> + <param> + <key>title</key> + <value>Scope Plot</value> + </param> + <param> + <key>trig_mode</key> + <value>wxgui.TRIG_MODE_AUTO</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>v_offset</key> + <value>0</value> + </param> + <param> + <key>v_scale</key> + <value>0</value> + </param> + <param> + <key>win_size</key> + <value></value> + </param> + <param> + <key>xy_mode</key> + <value>False</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> + </param> + </block> + <block> + <key>wxgui_scopesink2</key> + <param> + <key>ac_couple</key> + <value>False</value> + </param> + <param> + <key>alias</key> + <value></value> + </param> + <param> + <key>comment</key> + <value></value> + </param> + <param> + <key>affinity</key> + <value></value> + </param> + <param> + <key>_enabled</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(856, 671)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + <param> + <key>grid_pos</key> + <value></value> + </param> + <param> + <key>id</key> + <value>wxgui_scopesink2_1_0</value> + </param> + <param> + <key>notebook</key> + <value></value> + </param> + <param> + <key>num_inputs</key> + <value>1</value> + </param> + <param> + <key>samp_rate</key> + <value>baud_rate</value> + </param> + <param> + <key>t_scale</key> + <value>0</value> + </param> + <param> + <key>title</key> + <value>Scope Plot</value> + </param> + <param> + <key>trig_mode</key> + <value>wxgui.TRIG_MODE_AUTO</value> + </param> + <param> + <key>type</key> + <value>float</value> + </param> + <param> + <key>v_offset</key> + <value>0</value> + </param> + <param> + <key>v_scale</key> + <value>0</value> + </param> + <param> + <key>win_size</key> + <value></value> + </param> + <param> + <key>xy_mode</key> + <value>False</value> + </param> + <param> + <key>y_axis_label</key> + <value>Counts</value> + </param> + </block> + <connection> + <source_block_id>analog_am_demod_cf_0</source_block_id> + <sink_block_id>blocks_wavfile_sink_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>analog_am_demod_cf_0</source_block_id> + <sink_block_id>wxgui_scopesink2_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>analog_sig_source_x_0</source_block_id> + <sink_block_id>blocks_multiply_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>1</sink_key> + </connection> + <connection> + <source_block_id>blocks_add_const_vxx_0</source_block_id> + <sink_block_id>blocks_float_to_uchar_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_complex_to_mag_0</source_block_id> + <sink_block_id>blocks_wavfile_sink_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_complex_to_mag_0</source_block_id> + <sink_block_id>wxgui_scopesink2_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_complex_to_mag_squared_1</source_block_id> + <sink_block_id>blocks_threshold_ff_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_complex_to_mag_squared_1</source_block_id> + <sink_block_id>wxgui_scopesink2_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_file_source_1</source_block_id> + <sink_block_id>blocks_throttle_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_float_to_uchar_0</source_block_id> + <sink_block_id>blocks_file_sink_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_keep_one_in_n_1</source_block_id> + <sink_block_id>blocks_add_const_vxx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_keep_one_in_n_1</source_block_id> + <sink_block_id>wxgui_scopesink2_1_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_multiply_xx_0</source_block_id> + <sink_block_id>low_pass_filter_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_threshold_ff_1</source_block_id> + <sink_block_id>blocks_keep_one_in_n_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>blocks_throttle_1</source_block_id> + <sink_block_id>blocks_multiply_xx_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>low_pass_filter_0</source_block_id> + <sink_block_id>analog_am_demod_cf_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>low_pass_filter_0</source_block_id> + <sink_block_id>blocks_complex_to_mag_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>low_pass_filter_0</source_block_id> + <sink_block_id>blocks_complex_to_mag_squared_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>low_pass_filter_0</source_block_id> + <sink_block_id>qtgui_sink_x_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>low_pass_filter_0</source_block_id> + <sink_block_id>qtgui_time_sink_x_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>low_pass_filter_0</source_block_id> + <sink_block_id>qtgui_waterfall_sink_x_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>rtlsdr_source_0</source_block_id> + <sink_block_id>blocks_file_sink_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>rtlsdr_source_0</source_block_id> + <sink_block_id>blocks_throttle_1</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> + <connection> + <source_block_id>rtlsdr_source_0</source_block_id> + <sink_block_id>qtgui_sink_x_0_0</sink_block_id> + <source_key>0</source_key> + <sink_key>0</sink_key> + </connection> +</flow_graph> diff --git a/Vaillant_calormatic340f.signals b/Vaillant_calormatic340f.signals new file mode 100644 index 0000000000000000000000000000000000000000..f020e5b2fc6b6bf35ee07c9062ae492da714e6b4 --- /dev/null +++ b/Vaillant_calormatic340f.signals @@ -0,0 +1,78 @@ +# Heizung EIN, Wasser AUS +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100110011001100110011001101001100101100101101010010110011001100110010110101010101001010110011001101001010101010101010110011001100110011 +00000000000000000000000000000000000000000 +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100101100110011001100110010110011010011010010101101001100110011001101001010101010110100110011001101001010101010101010110011001100110011 +00000000000000000000000000000000000000000 +# +# Result: 0000000000000000011111101011011001101111000000000000010000000000000000000001000100101101000000001011111011000001011111111000000000 +# Result: 0000000000000000011111101011011001101111000000000000010000000000100000000001000100101101000000001011111010000001011111111000000000 + + +# Heizung AUS, Wasser AUS +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100110011001100110011001101001100101100110011001100110011001100110010110101010101001010110100101010101010101010101010110011001100110011 +00000000000000000000000000000000000000000 +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100101100110011001100110010110011010011001100110011001100110011001101001010101010110100110100101010101010101010101010110011001100110011 +00000000000000000000000000000000000000000 +# +# Result: 0000000000000000011111101011011001101111000000000000010000000000000000000001000100000000000000001011111011010111111111111000000000 +# Result: 0000000000000000011111101011011001101111000000000000010000000000100000000001000100000000000000001011111010010111111111111000000000 + + +# Heizung EIN, Wasser EIN +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100110011001100110011001100110011010011010010101101001100110011001101001010101010110101001101001101001010101010101010110011001100110011 +000000000000000000000000000000000000000000000000000000000000000000000000 +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100101100110011001100110011001100101100101101010010110011001100110010110101010101001011001101001101001010101010101010110011001100110011 +00000000000000000000000000000000000000000 +# +# Result: 0000000000000000011111101011011001101111000000000000010000000000000000000000000100101101000000001011111011001001011111111000000000 +# Result: 0000000000000000011111101011011001101111000000000000010000000000100000000000000100101101000000001011111010001001011111111000000000 + + +# Heizung AUS, Wasser EIN +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100110011001100110011001100110011010011001100110011001100110011001101001010101010110101001010101010110101010101010101010011001100110011 +0000000000000000000000000000000000000000 +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100101100110011001100110011001100101100110011001100110011001100110010110101010101001011001010101010110101010101010101010011001100110011 +00000000000000000000000000000000000000000 +# +# Result: 0000000000000000011111101011011001101111000000000000010000000000000000000000000100000000000000001011111011011111011111111100000000 +# Result: 0000000000000000011111101011011001101111000000000000010000000000100000000000000100000000000000001011111010011111011111111100000000 + + +# Heizung EIN, Wasser AUS, Batterie +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100110011001100110011001101001100101100101101010010101100110011001101001010101010110100110011001101001010101010101010110011001100110011 +0000000000000000000000000000000000000000 +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100101100110011001100110010110011010011010010101101010011001100110010110101010101001010101010110101001101010101010101010011001100110011 +00000000000000000000000000000000000000000 +# +# Result: 0000000000000000011111101011011001101111000000000000010000000000000000000001000100101101100000001011111010000001011111111000000000 +# Result: 0000000000000000011111101011011001101111000000000000010000000000100000000001000100101101100000001011111011111011001111111100000000 + + +# Heizung AUS, Wasser AUS, Batterie +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100110011001100110011001101001100101100110011001100101100110011001101001010101010110100110100101010101010101010101010110011001100110011 +0000000000000000000000000000000000000000 +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100101100110011001100110010110011010011001100110011010011001100110010110101010101001010101100101010101010101010101010110011001100110011 +00000000000000000000000000000000000000000 +# +# Result: 0000000000000000011111101011011001101111000000000000010000000000000000000001000100000000100000001011111010010111111111111000000000 +# Result: 0000000000000000011111101011011001101111000000000000010000000000100000000001000100000000100000001011111011100111111111111000000000 + + +# Heizung EIN, Wasser EIN, Batterie +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100110011001100110011001100110011010011010010101101010011001100110010110101010101001011001101001101001010101010101010110011001100110011 +000000000000000000000000000000 +110011001100110011001100110011001101010101010100101101010010101100101011010101010011001100110011001100110010110011001100110011001011001100110011001100110011001011001011010100101011001100110011010010101010101101010101001100101101010101010101010011001100110011 +00000000000000000000000000000000000000000 +# +# Result: 0000000000000000011111101011011001101111000000000000010000000000000000000000000100101101100000001011111010001001011111111000000000 +# Result: 0000000000000000011111101011011001101111000000000000010000000000100000000000000100101101100000001011111011110001011111111000000000 + + +# Heizung AUS, Wasser EIN, Batterie +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100110011001100110011001100110011010011001100110011010011001100110010110101010101001011001010101010110101010101010101010011001100110011 +000000000000000000000000000000000000000000 +11001100110011001100110011001100110101010101010010110101001010110010101101010101001100110011001100110011001011001100110011001100101100110011001100110011001100101100110011001100101100110011001101001010101010110101010010101010101010101010101010110011001100110011 +00000000000000000000000000000000000000000 +# +# Result: 0000000000000000011111101011011001101111000000000000010000000000000000000000000100000000100000001011111010011111011111111100000000 +# Result: 0000000000000000011111101011011001101111000000000000010000000000100000000000000100000000100000001011111011101111111111111000000000 diff --git a/Vaillant_calormatic340f.signals.basewaveXORed b/Vaillant_calormatic340f.signals.basewaveXORed new file mode 100644 index 0000000000000000000000000000000000000000..5a8b63f005598631ef81a850eda11ffe7694f549 --- /dev/null +++ b/Vaillant_calormatic340f.signals.basewaveXORed @@ -0,0 +1,17 @@ +2017-04-23 22:56:47.048 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000000000000000000000000000111111110000001111001111000000000000000000111100110011000011000000000000111100110011001100111111111111111111111 +2017-04-23 22:56:47.049 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000001111111111111111111111000000001111110000110000111111111111111111000011001100111100000000000000111100110011001100111111111111111111111 +2017-04-23 22:56:47.050 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000000000000000000000000000111111110000000000000000000000000000000000111100110011000011000011110011001100110011001100111111111111111111111 +2017-04-23 22:56:47.051 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000001111111111111111111111000000001111111111111111111111111111111111000011001100111100000011110011001100110011001100111111111111111111111 +2017-04-23 22:56:47.053 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000000000000000000000000000000000001111110000110000111111111111111111000011001100111100111111000000111100110011001100111111111111111111111 +2017-04-23 22:56:47.054 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000001111111111111111111111111111110000001111001111000000000000000000111100110011000011111111000000111100110011001100111111111111111111111 +2017-04-23 22:56:47.055 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000000000000000000000000000000000001111111111111111111111111111111111000011001100111100111100110011000011001100110011001111111111111111111 +2017-04-23 22:56:47.057 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000001111111111111111111111111111110000000000000000000000000000000000111100110011000011111100110011000011001100110011001111111111111111111 +2017-04-23 22:56:47.058 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000000000000000000000000000111111110000001111001111001111111111111111000011001100111100000000000000111100110011001100111111111111111111111 +2017-04-23 22:56:47.064 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000001111111111111111111111000000001111110000110000110000000000000000111100110011000011001100111100111111001100110011001111111111111111111 +2017-04-23 22:56:47.066 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000000000000000000000000000111111110000000000000000001111111111111111000011001100111100000011110011001100110011001100111111111111111111111 +2017-04-23 22:56:47.068 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000001111111111111111111111000000001111111111111111110000000000000000111100110011000011001111110011001100110011001100111111111111111111111 +2017-04-23 22:56:47.070 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000000000000000000000000000000000001111110000110000110000000000000000111100110011000011111111000000111100110011001100111111111111111111111 +2017-04-23 22:56:47.071 00000000000000000000000000000000000110011001100001111001111001111110011110011001111111111111111111111111111000000000000000000000011111111111111111111111111111100000011110011110011111111111111110000110011001111001100111111110000110011001100110000000000000000000 +2017-04-23 22:56:47.073 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000000000000000000000000000000000001111111111111111110000000000000000111100110011000011111100110011000011001100110011001111111111111111111 +2017-04-23 22:56:47.075 0000000000000000000000000000000000011001100110000111100111100111111001111001100111111111111111111111111111100000000000000000000001111111111111111111111111111110000000000000000001111111111111111000011001100111100110000110011001100110011001100111111111111111111111 + diff --git a/Vaillant_calormatic340f.signals.decoded b/Vaillant_calormatic340f.signals.decoded new file mode 100644 index 0000000000000000000000000000000000000000..cd5116fcb1bd7a78071a3c9e12cd39d78f39682b --- /dev/null +++ b/Vaillant_calormatic340f.signals.decoded @@ -0,0 +1,16 @@ +2017-04-23 22:27:54.963 00000000000000000111111010110110011011110000000000000100000000000000000000010001001011010000000010111110110000010111111110000000000 +2017-04-23 22:27:54.964 00000000000000000111111010110110011011110000000000000100000000001000000000010001001011010000000010111110100000010111111110000000000 +2017-04-23 22:27:54.964 00000000000000000111111010110110011011110000000000000100000000000000000000010001000000000000000010111110110101111111111110000000000 +2017-04-23 22:27:54.964 00000000000000000111111010110110011011110000000000000100000000001000000000010001000000000000000010111110100101111111111110000000000 +2017-04-23 22:27:54.965 00000000000000000111111010110110011011110000000000000100000000000000000000000001001011010000000010111110110010010111111110000000000 +2017-04-23 22:27:54.965 00000000000000000111111010110110011011110000000000000100000000001000000000000001001011010000000010111110100010010111111110000000000 +2017-04-23 22:27:54.965 00000000000000000111111010110110011011110000000000000100000000000000000000000001000000000000000010111110110111110111111111000000000 +2017-04-23 22:27:54.966 00000000000000000111111010110110011011110000000000000100000000001000000000000001000000000000000010111110100111110111111111000000000 +2017-04-23 22:27:54.966 00000000000000000111111010110110011011110000000000000100000000000000000000010001001011011000000010111110100000010111111110000000000 +2017-04-23 22:27:54.966 00000000000000000111111010110110011011110000000000000100000000001000000000010001001011011000000010111110111110110011111111000000000 +2017-04-23 22:27:54.967 00000000000000000111111010110110011011110000000000000100000000000000000000010001000000001000000010111110100101111111111110000000000 +2017-04-23 22:27:54.967 00000000000000000111111010110110011011110000000000000100000000001000000000010001000000001000000010111110111001111111111110000000000 +2017-04-23 22:27:54.967 00000000000000000111111010110110011011110000000000000100000000000000000000000001001011011000000010111110100010010111111110000000000 +2017-04-23 22:27:54.967 0000000000000000011111101011011001101111000000000000010000000000100000000000000100101101100000001011111011110001011111111000000000 +2017-04-23 22:27:54.968 00000000000000000111111010110110011011110000000000000100000000000000000000000001000000001000000010111110100111110111111111000000000 +2017-04-23 22:27:54.968 00000000000000000111111010110110011011110000000000000100000000001000000000000001000000001000000010111110111011111111111110000000000 diff --git a/Vaillant_calormatic340f.signals.manchester b/Vaillant_calormatic340f.signals.manchester new file mode 100644 index 0000000000000000000000000000000000000000..ecb1a2fce79b8a5b58c940446f264a9815f68c85 --- /dev/null +++ b/Vaillant_calormatic340f.signals.manchester @@ -0,0 +1,17 @@ +2017-04-23 22:29:13.776 01010101010101010111111100111000100011111010101010101001010101010101010101011010010011100101010100111111000101011000000000101010101 +2017-04-23 22:29:13.776 01010101010101010111111100111000100011111010101010101001010101010010101010100101101100011010101011000000110101011000000000101010101 +2017-04-23 22:29:13.777 01010101010101010111111100111000100011111010101010101001010101010101010101011010010101010101010100111111000110000000000000101010101 +2017-04-23 22:29:13.777 01010101010101010111111100111000100011111010101010101001010101010010101010100101101010101010101011000000110110000000000000101010101 +2017-04-23 22:29:13.778 01010101010101010111111100111000100011111010101010101001010101010101010101010101101100011010101011000000111011011000000000101010101 +2017-04-23 22:29:13.778 01010101010101010111111100111000100011111010101010101001010101010010101010101010010011100101010100111111001011011000000000101010101 +2017-04-23 22:29:13.779 01010101010101010111111100111000100011111010101010101001010101010101010101010101101010101010101011000000111000000111111111101010101 +2017-04-23 22:29:13.779 01010101010101010111111100111000100011111010101010101001010101010010101010101010010101010101010100111111001000000111111111101010101 +2017-04-23 22:29:13.779 01010101010101010111111100111000100011111010101010101001010101010101010101011010010011100010101011000000110101011000000000101010101 +2017-04-23 22:29:13.780 01010101010101010111111100111000100011111010101010101001010101010010101010100101101100011101010100111111000000111011111111101010101 +2017-04-23 22:29:13.780 01010101010101010111111100111000100011111010101010101001010101010101010101011010010101010010101011000000110110000000000000101010101 +2017-04-23 22:29:13.781 01010101010101010111111100111000100011111010101010101001010101010010101010100101101010101101010100111111000010000000000000101010101 +2017-04-23 22:29:13.781 01010101010101010111111100111000100011111010101010101001010101010101010101010101101100011101010100111111001011011000000000101010101 +2017-04-23 22:29:13.782 0101010101010101011111110011100010001111101010101010100101010101001010101010101001001110001010101100000011111010011111111101010101 +2017-04-23 22:29:13.782 01010101010101010111111100111000100011111010101010101001010101010101010101010101101010101101010100111111001000000111111111101010101 +2017-04-23 22:29:13.783 01010101010101010111111100111000100011111010101010101001010101010010101010101010010101010010101011000000111100000000000000101010101 + diff --git a/Vaillant_decode.c b/Vaillant_decode.c new file mode 100644 index 0000000000000000000000000000000000000000..ad9a6b0b112d95beb5ded8af01304e57c0faa8ea --- /dev/null +++ b/Vaillant_decode.c @@ -0,0 +1,116 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <time.h> +#include <sys/time.h> +#include <math.h> + +// Vaillant_decode.c Copyright 2017 Reinhold Kainhofer +// License: GNU GPL 3.0 +// +// +// Compile with: +// gcc Vaillant_decode.c -o Vaillant_decode +// +// Reads a string of 0 and 1 from STDIN, tries to decode it as Vaillant-encoded +// and prints the converted result to STDOUT (prefixed with current date/time). +// Decoding errors (i.e. no amplitude switch at the pulse mid-point) are +// indicated by a ? +// +// This app is purely pipe-through, i.e. its usage is: +// +// cat signalfile.txt | Vaillant_decode > decoded_signalfile.txt +// +// To process an output file while it is still written to, you can use tail. This +// will print the proper timestamps for the signals: +// +// tail -n +1 -f signalfile.txt | ./Vaillant_decode + +typedef int bool; +#define true 1 +#define false 0 + +void main(int argc, char *argv[]) +{ + setbuf(stdout, NULL); + + bool insideZeroes = true; + int zeroes = 0; + + int validPos = 0; + int comment = 0; + + char ch, prev; + while(read(STDIN_FILENO, &ch, 1) > 0) { + // Everything starting with # is a comment until the end of line + if (ch == '#') { + comment = true; + if (!insideZeroes) printf("\n"); + insideZeroes = 1; + continue; + } + // Ignore all line breaks and spaces (so output can be formatted before running through this app): + if (ch == '\n' || ch == '\r') { + comment = false; + continue; + } + // Ignore all spaces (so output can be formatted before running through this app) and comments: + if (comment || ch == ' ') { + continue; + } + + // Keep track of how many zeroes we have (count at most up to 1000!) + if (ch == '0') { + if (zeroes++ > 1000) zeroes = 1000; + } else { + zeroes = 0; + } + // We have zeroes, so jump to the next char if we have another 0, reset otherwise + if (insideZeroes) { + if (ch == '0') { + prev = ch; + continue; + } else { + insideZeroes = false; + validPos = 0; + // A '1' after a long sequence of '0' means some kind of signal + // (valid or invalid), so print the current date/time to start + // a new line: + struct timeval tv; + gettimeofday(&tv, NULL); + int millisec = tv.tv_usec/1000; + + char fmt[64], s[64]; + struct tm *tm; + if((tm = localtime(&tv.tv_sec)) != NULL) { + strftime(fmt, sizeof fmt, "%F %T", tm); + snprintf(s, sizeof s, "%s.%03d", fmt, millisec); + printf("%s ", s); + } + } + } + if (ch != '0' && ch != '1') { + fwrite(&ch, 1, 1, stdout); + } + + // Inside the pulse => if state changed, it's a 1, if it stayed, it's a 0 + if (validPos == 1) { + printf((ch == prev)?"0":"1"); + } else { // validPos == 0 + // If 0/1 does not change => INVALID, unless it stays 0, which indicates end of signal + if (ch == prev) { + if (ch == '0') { + insideZeroes = true; + zeroes = true; + printf("\n"); + } else { + printf("?"); + } + } + } + // Switch validPos: + validPos = (validPos + 1) % 2; + prev = ch; + } + printf("\r\n"); +}