{"id":18340142,"url":"https://github.com/f33rni/qpsk-mod-demod-libs","last_synced_at":"2025-04-13T09:33:13.830Z","repository":{"id":198408086,"uuid":"700778536","full_name":"F33RNI/QPSK-mod-demod-libs","owner":"F33RNI","description":"C-libraries for QPSK modulation and demodulation","archived":false,"fork":false,"pushed_at":"2023-10-08T12:16:18.000Z","size":221,"stargazers_count":6,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T01:05:17.484Z","etag":null,"topics":["c","cmake","cpp","floating-point","qpsk","qpsk-demodulation","qpsk-modulation","shared-library"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/F33RNI.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-05T09:23:27.000Z","updated_at":"2025-03-23T23:54:32.000Z","dependencies_parsed_at":null,"dependency_job_id":"e2d7682c-5a2e-4baf-bf94-09bf53df3084","html_url":"https://github.com/F33RNI/QPSK-mod-demod-libs","commit_stats":null,"previous_names":["f33rni/qpsk-mod-demod-libs"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F33RNI%2FQPSK-mod-demod-libs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F33RNI%2FQPSK-mod-demod-libs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F33RNI%2FQPSK-mod-demod-libs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/F33RNI%2FQPSK-mod-demod-libs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/F33RNI","download_url":"https://codeload.github.com/F33RNI/QPSK-mod-demod-libs/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248690970,"owners_count":21146245,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","cmake","cpp","floating-point","qpsk","qpsk-demodulation","qpsk-modulation","shared-library"],"created_at":"2024-11-05T20:21:07.511Z","updated_at":"2025-04-13T09:33:13.801Z","avatar_url":"https://github.com/F33RNI.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QPSK-mod-demod-libs\nC-libraries for QPSK modulation and demodulation\n\n\u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"\u003e\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en-US\"\u003e\n\u003cbody\u003e\n\u003ctable class=\"directory\"\u003e\n\u003ctr id=\"row_0_\" class=\"even\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:0px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003cspan id=\"arr_0_\" class=\"arrow\" onclick=\"toggleFolder('0_')\"\u003e\u0026#9660;\u003c/span\u003e\u003cspan id=\"img_0_\" class=\"iconfopen\" onclick=\"toggleFolder('0_')\"\u003e\u0026#160;\u003c/span\u003e\u003ca class=\"el\" href=\"dir_d44c64559bbebec7f509842c48db8b23.html\" target=\"_self\"\u003einclude\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_0_0_\" class=\"odd\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"butterworth__filter_8h_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"butterworth__filter_8h.html\" target=\"_self\"\u003ebutterworth_filter.h\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eButterworth Filter implementation for filtering continues signal Original code from: \u003ca href=\"https://github.com/filoe/cscore\"\u003ehttps://github.com/filoe/cscore\u003c/a\u003e \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_0_1_\" class=\"even\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"bytes__symbols__converter_8h_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"bytes__symbols__converter_8h.html\" target=\"_self\"\u003ebytes_symbols_converter.h\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eMethods to convert array of bytes to symbols and back \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_0_2_\" class=\"odd\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"pll_8h_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"pll_8h.html\" target=\"_self\"\u003epll.h\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eNumerically-controlled Phase locked loop \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_0_3_\" class=\"even\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"qpsk__demodulator_8h_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"qpsk__demodulator_8h.html\" target=\"_self\"\u003eqpsk_demodulator.h\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eQPSK demodulator (decoder) \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_0_4_\" class=\"odd\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"qpsk__modulator_8h_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"qpsk__modulator_8h.html\" target=\"_self\"\u003eqpsk_modulator.h\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eQPSK modulator (encoder) \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_0_5_\" class=\"even\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"rrc__filter_8h_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"rrc__filter_8h.html\" target=\"_self\"\u003errc_filter.h\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eRoot raised cosine (RRC) filter implementation by Fern Lane for filtering continues signal \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_1_\" class=\"odd\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:0px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003cspan id=\"arr_1_\" class=\"arrow\" onclick=\"toggleFolder('1_')\"\u003e\u0026#9660;\u003c/span\u003e\u003cspan id=\"img_1_\" class=\"iconfopen\" onclick=\"toggleFolder('1_')\"\u003e\u0026#160;\u003c/span\u003e\u003ca class=\"el\" href=\"dir_68267d1309a1af8e8297ef4c3efbcdba.html\" target=\"_self\"\u003esrc\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_1_0_\" class=\"even\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"butterworth__filter_8c_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"butterworth__filter_8c.html\" target=\"_self\"\u003ebutterworth_filter.c\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eButterworth Filter implementation for filtering continues signal Original code from: \u003ca href=\"https://github.com/filoe/cscore\"\u003ehttps://github.com/filoe/cscore\u003c/a\u003e \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_1_1_\" class=\"odd\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"bytes__symbols__converter_8c_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"bytes__symbols__converter_8c.html\" target=\"_self\"\u003ebytes_symbols_converter.c\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eMethods to convert array of bytes to symbols and back \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_1_2_\" class=\"even\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"pll_8c_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"pll_8c.html\" target=\"_self\"\u003epll.c\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eNumerically-controlled Phase locked loop \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_1_3_\" class=\"odd\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"qpsk__demodulator_8c_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"qpsk__demodulator_8c.html\" target=\"_self\"\u003eqpsk_demodulator.c\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eQPSK demodulator (decoder) \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_1_4_\" class=\"even\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"qpsk__modulator_8c_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"qpsk__modulator_8c.html\" target=\"_self\"\u003eqpsk_modulator.c\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eQPSK modulator (encoder) \u003c/td\u003e\u003c/tr\u003e\n\u003ctr id=\"row_1_5_\" class=\"odd\"\u003e\u003ctd class=\"entry\"\u003e\u003cspan style=\"width:32px;display:inline-block;\"\u003e\u0026#160;\u003c/span\u003e\u003ca href=\"rrc__filter_8c_source.html\"\u003e\u003cspan class=\"icondoc\"\u003e\u003c/span\u003e\u003c/a\u003e\u003ca class=\"el\" href=\"rrc__filter_8c.html\" target=\"_self\"\u003errc_filter.c\u003c/a\u003e\u003c/td\u003e\u003ctd class=\"desc\"\u003eRoot raised cosine (RRC) filter implementation by Fern Lane for filtering continues signal \u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/div\u003e\u003c!-- directory --\u003e\n\u003c/div\u003e\u003c!-- contents --\u003e\n\u003c!-- start footer part --\u003e\n\u003chr class=\"footer\"/\u003e\u003caddress class=\"footer\"\u003e\u003csmall\u003e\nGenerated by\u0026#160;\u003ca href=\"https://www.doxygen.org/index.html\"\u003e\u003cimg class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/\u003e\u003c/a\u003e 1.9.8\n\u003c/small\u003e\u003c/address\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n\n----------\n\n\u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"\u003e\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en-US\"\u003e\n\u003cbody\u003e\n\u003ch2\u003eqpsk_modulator.c File Reference\u003c/h2\u003e\n\u003ctable class=\"memberdecls\"\u003e\n\u003ctr class=\"heading\"\u003e\u003ctd colspan=\"2\"\u003e\u003ch2 class=\"groupheader\"\u003e\u003ca id=\"func-members\" name=\"func-members\"\u003e\u003c/a\u003e\nFunctions\u003c/h2\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memitem:afefe355f4c9afc850c9bce987e9484aa\" id=\"r_afefe355f4c9afc850c9bce987e9484aa\"\u003e\u003ctd class=\"memItemLeft\" align=\"right\" valign=\"top\"\u003e\u003ca class=\"el\" href=\"structqpsk__modulator__s.html\"\u003eqpsk_modulator_s\u003c/a\u003e *\u0026#160;\u003c/td\u003e\u003ctd class=\"memItemRight\" valign=\"bottom\"\u003e\u003ca class=\"el\" href=\"qpsk__modulator_8c.html#afefe355f4c9afc850c9bce987e9484aa\"\u003eqpsk_modulator_init\u003c/a\u003e (float sample_rate, float carrier_frequency, float bandwidth, uint16_t halfcycles_per_symbol, float amplitude_peak)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memdesc:afefe355f4c9afc850c9bce987e9484aa\"\u003e\u003ctd class=\"mdescLeft\"\u003e\u0026#160;\u003c/td\u003e\u003ctd class=\"mdescRight\"\u003eInitializes QPSK demodulator.  \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"separator:afefe355f4c9afc850c9bce987e9484aa\"\u003e\u003ctd class=\"memSeparator\" colspan=\"2\"\u003e\u0026#160;\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memitem:a4e6b85ecc3cd2578c57a00fbfb7e53b3\" id=\"r_a4e6b85ecc3cd2578c57a00fbfb7e53b3\"\u003e\u003ctd class=\"memItemLeft\" align=\"right\" valign=\"top\"\u003euint32_t\u0026#160;\u003c/td\u003e\u003ctd class=\"memItemRight\" valign=\"bottom\"\u003e\u003ca class=\"el\" href=\"qpsk__modulator_8c.html#a4e6b85ecc3cd2578c57a00fbfb7e53b3\"\u003eqpsk_modulator_calculate_samples_chunk_length\u003c/a\u003e (\u003ca class=\"el\" href=\"structqpsk__modulator__s.html\"\u003eqpsk_modulator_s\u003c/a\u003e *qpsk_modulator, uint32_t symbols_chunk_length)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memdesc:a4e6b85ecc3cd2578c57a00fbfb7e53b3\"\u003e\u003ctd class=\"mdescLeft\"\u003e\u0026#160;\u003c/td\u003e\u003ctd class=\"mdescRight\"\u003eCalculates the size of the array of sample after modulation.  \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"separator:a4e6b85ecc3cd2578c57a00fbfb7e53b3\"\u003e\u003ctd class=\"memSeparator\" colspan=\"2\"\u003e\u0026#160;\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memitem:a55ab06a44f141345c8432c458d1b83f1\" id=\"r_a55ab06a44f141345c8432c458d1b83f1\"\u003e\u003ctd class=\"memItemLeft\" align=\"right\" valign=\"top\"\u003evoid\u0026#160;\u003c/td\u003e\u003ctd class=\"memItemRight\" valign=\"bottom\"\u003e\u003ca class=\"el\" href=\"qpsk__modulator_8c.html#a55ab06a44f141345c8432c458d1b83f1\"\u003eqpsk_modulator_modulate_chunk\u003c/a\u003e (\u003ca class=\"el\" href=\"structqpsk__modulator__s.html\"\u003eqpsk_modulator_s\u003c/a\u003e *qpsk_modulator, uint8_t *symbols_chunk, uint32_t symbols_chunk_length, float *samples_chunk, uint8_t debug_messages)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memdesc:a55ab06a44f141345c8432c458d1b83f1\"\u003e\u003ctd class=\"mdescLeft\"\u003e\u0026#160;\u003c/td\u003e\u003ctd class=\"mdescRight\"\u003eModulates chunk of symbols.  \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"separator:a55ab06a44f141345c8432c458d1b83f1\"\u003e\u003ctd class=\"memSeparator\" colspan=\"2\"\u003e\u0026#160;\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memitem:ac11ff20a1116dec36d9026d15b52fd36\" id=\"r_ac11ff20a1116dec36d9026d15b52fd36\"\u003e\u003ctd class=\"memItemLeft\" align=\"right\" valign=\"top\"\u003evoid\u0026#160;\u003c/td\u003e\u003ctd class=\"memItemRight\" valign=\"bottom\"\u003e\u003ca class=\"el\" href=\"qpsk__modulator_8c.html#ac11ff20a1116dec36d9026d15b52fd36\"\u003eqpsk_modulator_reset\u003c/a\u003e (\u003ca class=\"el\" href=\"structqpsk__modulator__s.html\"\u003eqpsk_modulator_s\u003c/a\u003e *qpsk_modulator)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memdesc:ac11ff20a1116dec36d9026d15b52fd36\"\u003e\u003ctd class=\"mdescLeft\"\u003e\u0026#160;\u003c/td\u003e\u003ctd class=\"mdescRight\"\u003eResets QPSK modulator to the initial state.  \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"separator:ac11ff20a1116dec36d9026d15b52fd36\"\u003e\u003ctd class=\"memSeparator\" colspan=\"2\"\u003e\u0026#160;\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memitem:aeaa7352b46e7c69ece94203ae7ba8832\" id=\"r_aeaa7352b46e7c69ece94203ae7ba8832\"\u003e\u003ctd class=\"memItemLeft\" align=\"right\" valign=\"top\"\u003evoid\u0026#160;\u003c/td\u003e\u003ctd class=\"memItemRight\" valign=\"bottom\"\u003e\u003ca class=\"el\" href=\"qpsk__modulator_8c.html#aeaa7352b46e7c69ece94203ae7ba8832\"\u003eqpsk_modulator_destroy\u003c/a\u003e (\u003ca class=\"el\" href=\"structqpsk__modulator__s.html\"\u003eqpsk_modulator_s\u003c/a\u003e *qpsk_modulator)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memdesc:aeaa7352b46e7c69ece94203ae7ba8832\"\u003e\u003ctd class=\"mdescLeft\"\u003e\u0026#160;\u003c/td\u003e\u003ctd class=\"mdescRight\"\u003eFrees all memory allocated by QPSK modulator.  \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"separator:aeaa7352b46e7c69ece94203ae7ba8832\"\u003e\u003ctd class=\"memSeparator\" colspan=\"2\"\u003e\u0026#160;\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\u003ca name=\"details\" id=\"details\"\u003e\u003c/a\u003e\u003ch2 class=\"groupheader\"\u003eDetailed Description\u003c/h2\u003e\n\u003cdiv class=\"textblock\"\u003e\u003cp\u003eQPSK modulator (encoder) \u003c/p\u003e\n\u003cdl class=\"section author\"\u003e\u003cdt\u003eAuthor\u003c/dt\u003e\u003cdd\u003eFern Lane \u003c/dd\u003e\u003c/dl\u003e\n\u003cdl class=\"section version\"\u003e\u003cdt\u003eVersion\u003c/dt\u003e\u003cdd\u003e1.0.0 \u003c/dd\u003e\u003c/dl\u003e\n\u003cdl class=\"section date\"\u003e\u003cdt\u003eDate\u003c/dt\u003e\u003cdd\u003e2023-09-26\u003c/dd\u003e\u003c/dl\u003e\n\u003cdl class=\"section copyright\"\u003e\u003cdt\u003eCopyright\u003c/dt\u003e\u003cdd\u003eCopyright (c) 2023\u003c/dd\u003e\u003c/dl\u003e\n\u003cp\u003eCopyright (C) 2023 Fern Lane, QPSK modulator / demodulator libraries Licensed under the GNU Affero General Public License, Version 3.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at \u003ca href=\"https://www.gnu.org/licenses/agpl-3.0.en.html\"\u003ehttps://www.gnu.org/licenses/agpl-3.0.en.html\u003c/a\u003e Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \u003c/p\u003e\n\n\u003cp class=\"definition\"\u003eDefinition in file \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html\"\u003eqpsk_modulator.c\u003c/a\u003e.\u003c/p\u003e\n\u003c/div\u003e\u003ch2 class=\"groupheader\"\u003eFunction Documentation\u003c/h2\u003e\n\u003ca id=\"a4e6b85ecc3cd2578c57a00fbfb7e53b3\" name=\"a4e6b85ecc3cd2578c57a00fbfb7e53b3\"\u003e\u003c/a\u003e\n\u003ch2 class=\"memtitle\"\u003e\u003cspan class=\"permalink\"\u003e\u003ca href=\"#a4e6b85ecc3cd2578c57a00fbfb7e53b3\"\u003e\u0026#9670;\u0026#160;\u003c/a\u003e\u003c/span\u003eqpsk_modulator_calculate_samples_chunk_length()\u003c/h2\u003e\n\n\u003cdiv class=\"memitem\"\u003e\n\u003cdiv class=\"memproto\"\u003e\n      \u003ctable class=\"memname\"\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"memname\"\u003euint32_t qpsk_modulator_calculate_samples_chunk_length \u003c/td\u003e\n          \u003ctd\u003e(\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003e\u003ca class=\"el\" href=\"structqpsk__modulator__s.html\"\u003eqpsk_modulator_s\u003c/a\u003e *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003eqpsk_modulator\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003euint32_t\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003esymbols_chunk_length\u003c/em\u003e\u0026#160;\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e)\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n\u003c/div\u003e\u003cdiv class=\"memdoc\"\u003e\n\n\u003cp\u003eCalculates the size of the array of sample after modulation. \u003c/p\u003e\n\u003cdl class=\"params\"\u003e\u003cdt\u003eParameters\u003c/dt\u003e\u003cdd\u003e\n  \u003ctable class=\"params\"\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003eqpsk_modulator\u003c/td\u003e\u003ctd\u003eQPSK modulator's struct \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003esymbols_chunk_length\u003c/td\u003e\u003ctd\u003enumber of symbols \u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\u003cdl class=\"section return\"\u003e\u003cdt\u003eReturns\u003c/dt\u003e\u003cdd\u003euint32_t number of samples \u003c/dd\u003e\u003c/dl\u003e\n\n\u003cp class=\"definition\"\u003eDefinition at line \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html#l00104\"\u003e104\u003c/a\u003e of file \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html\"\u003eqpsk_modulator.c\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ca id=\"aeaa7352b46e7c69ece94203ae7ba8832\" name=\"aeaa7352b46e7c69ece94203ae7ba8832\"\u003e\u003c/a\u003e\n\u003ch2 class=\"memtitle\"\u003e\u003cspan class=\"permalink\"\u003e\u003ca href=\"#aeaa7352b46e7c69ece94203ae7ba8832\"\u003e\u0026#9670;\u0026#160;\u003c/a\u003e\u003c/span\u003eqpsk_modulator_destroy()\u003c/h2\u003e\n\n\u003cdiv class=\"memitem\"\u003e\n\u003cdiv class=\"memproto\"\u003e\n      \u003ctable class=\"memname\"\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"memname\"\u003evoid qpsk_modulator_destroy \u003c/td\u003e\n          \u003ctd\u003e(\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003e\u003ca class=\"el\" href=\"structqpsk__modulator__s.html\"\u003eqpsk_modulator_s\u003c/a\u003e *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003eqpsk_modulator\u003c/em\u003e\u003c/td\u003e\u003ctd\u003e)\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n\u003c/div\u003e\u003cdiv class=\"memdoc\"\u003e\n\n\u003cp\u003eFrees all memory allocated by QPSK modulator. \u003c/p\u003e\n\u003cdl class=\"params\"\u003e\u003cdt\u003eParameters\u003c/dt\u003e\u003cdd\u003e\n  \u003ctable class=\"params\"\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003eqpsk_modulator\u003c/td\u003e\u003ctd\u003eQPSK modulator's struct \u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n\u003cp class=\"definition\"\u003eDefinition at line \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html#l00252\"\u003e252\u003c/a\u003e of file \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html\"\u003eqpsk_modulator.c\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ca id=\"afefe355f4c9afc850c9bce987e9484aa\" name=\"afefe355f4c9afc850c9bce987e9484aa\"\u003e\u003c/a\u003e\n\u003ch2 class=\"memtitle\"\u003e\u003cspan class=\"permalink\"\u003e\u003ca href=\"#afefe355f4c9afc850c9bce987e9484aa\"\u003e\u0026#9670;\u0026#160;\u003c/a\u003e\u003c/span\u003eqpsk_modulator_init()\u003c/h2\u003e\n\n\u003cdiv class=\"memitem\"\u003e\n\u003cdiv class=\"memproto\"\u003e\n      \u003ctable class=\"memname\"\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"memname\"\u003e\u003ca class=\"el\" href=\"structqpsk__modulator__s.html\"\u003eqpsk_modulator_s\u003c/a\u003e * qpsk_modulator_init \u003c/td\u003e\n          \u003ctd\u003e(\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003esample_rate\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003ecarrier_frequency\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003ebandwidth\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003euint16_t\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003ehalfcycles_per_symbol\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003eamplitude_peak\u003c/em\u003e\u0026#160;\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e)\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n\u003c/div\u003e\u003cdiv class=\"memdoc\"\u003e\n\n\u003cp\u003eInitializes QPSK demodulator. \u003c/p\u003e\n\u003cdl class=\"params\"\u003e\u003cdt\u003eParameters\u003c/dt\u003e\u003cdd\u003e\n  \u003ctable class=\"params\"\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003esample_rate\u003c/td\u003e\u003ctd\u003eSampling rate (in Hz) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003ecarrier_frequency\u003c/td\u003e\u003ctd\u003eCarrier frequency (in Hz) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003ebandwidth\u003c/td\u003e\u003ctd\u003eOutput signal required bandwidth (in Hz) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003ehalfcycles_per_symbol\u003c/td\u003e\u003ctd\u003eRate of symbols in carrier halfcycles (2 halfcycles = 1 full carrier wave cycle) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003eamplitude_peak\u003c/td\u003e\u003ctd\u003eAmplitude of modulated signal (peak value) \u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\u003cdl class=\"section return\"\u003e\u003cdt\u003eReturns\u003c/dt\u003e\u003cdd\u003eqpsk_modulator_s* QPSK modulator's struct \u003c/dd\u003e\u003c/dl\u003e\n\n\u003cp class=\"definition\"\u003eDefinition at line \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html#l00044\"\u003e44\u003c/a\u003e of file \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html\"\u003eqpsk_modulator.c\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ca id=\"a55ab06a44f141345c8432c458d1b83f1\" name=\"a55ab06a44f141345c8432c458d1b83f1\"\u003e\u003c/a\u003e\n\u003ch2 class=\"memtitle\"\u003e\u003cspan class=\"permalink\"\u003e\u003ca href=\"#a55ab06a44f141345c8432c458d1b83f1\"\u003e\u0026#9670;\u0026#160;\u003c/a\u003e\u003c/span\u003eqpsk_modulator_modulate_chunk()\u003c/h2\u003e\n\n\u003cdiv class=\"memitem\"\u003e\n\u003cdiv class=\"memproto\"\u003e\n      \u003ctable class=\"memname\"\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"memname\"\u003evoid qpsk_modulator_modulate_chunk \u003c/td\u003e\n          \u003ctd\u003e(\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003e\u003ca class=\"el\" href=\"structqpsk__modulator__s.html\"\u003eqpsk_modulator_s\u003c/a\u003e *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003eqpsk_modulator\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003euint8_t *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003esymbols_chunk\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003euint32_t\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003esymbols_chunk_length\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003esamples_chunk\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003euint8_t\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003edebug_messages\u003c/em\u003e\u0026#160;\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e)\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n\u003c/div\u003e\u003cdiv class=\"memdoc\"\u003e\n\n\u003cp\u003eModulates chunk of symbols. \u003c/p\u003e\n\u003cdl class=\"params\"\u003e\u003cdt\u003eParameters\u003c/dt\u003e\u003cdd\u003e\n  \u003ctable class=\"params\"\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003eqpsk_modulator\u003c/td\u003e\u003ctd\u003eQPSK modulator's struct \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003esymbols_chunk\u003c/td\u003e\u003ctd\u003eArray of symbols \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003esymbols_chunk_length\u003c/td\u003e\u003ctd\u003eLength of array of symbols \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003esamples_chunk\u003c/td\u003e\u003ctd\u003eAllocated array of samples (size must be qpsk_modulator_calculate_samples_chunk_length * sizeof(float)) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003edebug_messages\u003c/td\u003e\u003ctd\u003eEnable printf() debug messages (greatly affects performance) \u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n\u003cp class=\"definition\"\u003eDefinition at line \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html#l00120\"\u003e120\u003c/a\u003e of file \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html\"\u003eqpsk_modulator.c\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ca id=\"ac11ff20a1116dec36d9026d15b52fd36\" name=\"ac11ff20a1116dec36d9026d15b52fd36\"\u003e\u003c/a\u003e\n\u003ch2 class=\"memtitle\"\u003e\u003cspan class=\"permalink\"\u003e\u003ca href=\"#ac11ff20a1116dec36d9026d15b52fd36\"\u003e\u0026#9670;\u0026#160;\u003c/a\u003e\u003c/span\u003eqpsk_modulator_reset()\u003c/h2\u003e\n\n\u003cdiv class=\"memitem\"\u003e\n\u003cdiv class=\"memproto\"\u003e\n      \u003ctable class=\"memname\"\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"memname\"\u003evoid qpsk_modulator_reset \u003c/td\u003e\n          \u003ctd\u003e(\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003e\u003ca class=\"el\" href=\"structqpsk__modulator__s.html\"\u003eqpsk_modulator_s\u003c/a\u003e *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003eqpsk_modulator\u003c/em\u003e\u003c/td\u003e\u003ctd\u003e)\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n\u003c/div\u003e\u003cdiv class=\"memdoc\"\u003e\n\n\u003cp\u003eResets QPSK modulator to the initial state. \u003c/p\u003e\n\u003cdl class=\"params\"\u003e\u003cdt\u003eParameters\u003c/dt\u003e\u003cdd\u003e\n  \u003ctable class=\"params\"\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003eqpsk_modulator\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n\u003cp class=\"definition\"\u003eDefinition at line \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html#l00232\"\u003e232\u003c/a\u003e of file \u003ca class=\"el\" href=\"qpsk__modulator_8c_source.html\"\u003eqpsk_modulator.c\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c!-- contents --\u003e\n\u003c!-- start footer part --\u003e\n\u003chr class=\"footer\"/\u003e\u003caddress class=\"footer\"\u003e\u003csmall\u003e\nGenerated by\u0026#160;\u003ca href=\"https://www.doxygen.org/index.html\"\u003e\u003cimg class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/\u003e\u003c/a\u003e 1.9.8\n\u003c/small\u003e\u003c/address\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n\n----------\n\n\u003c!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"\u003e\n\u003chtml xmlns=\"http://www.w3.org/1999/xhtml\" lang=\"en-US\"\u003e\n\u003cbody\u003e\n\u003ch2\u003eqpsk_demodulator.c File Reference\u003c/h2\u003e\n\u003ctable class=\"memberdecls\"\u003e\n\u003ctr class=\"heading\"\u003e\u003ctd colspan=\"2\"\u003e\u003ch2 class=\"groupheader\"\u003e\u003ca id=\"func-members\" name=\"func-members\"\u003e\u003c/a\u003e\nFunctions\u003c/h2\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memitem:a0f1e99ba7cca738089a7fd994bde9163\" id=\"r_a0f1e99ba7cca738089a7fd994bde9163\"\u003e\u003ctd class=\"memItemLeft\" align=\"right\" valign=\"top\"\u003efloat\u0026#160;\u003c/td\u003e\u003ctd class=\"memItemRight\" valign=\"bottom\"\u003e\u003ca class=\"el\" href=\"qpsk__demodulator_8c.html#a0f1e99ba7cca738089a7fd994bde9163\"\u003eclampf\u003c/a\u003e (float value, float min, float max)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memdesc:a0f1e99ba7cca738089a7fd994bde9163\"\u003e\u003ctd class=\"mdescLeft\"\u003e\u0026#160;\u003c/td\u003e\u003ctd class=\"mdescRight\"\u003eClamps float value to a range.  \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"separator:a0f1e99ba7cca738089a7fd994bde9163\"\u003e\u003ctd class=\"memSeparator\" colspan=\"2\"\u003e\u0026#160;\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memitem:a86d0ddaa1add7df3aef1861d24a3ad3c\" id=\"r_a86d0ddaa1add7df3aef1861d24a3ad3c\"\u003e\u003ctd class=\"memItemLeft\" align=\"right\" valign=\"top\"\u003e\u003ca class=\"el\" href=\"structqpsk__demodulator__s.html\"\u003eqpsk_demodulator_s\u003c/a\u003e *\u0026#160;\u003c/td\u003e\u003ctd class=\"memItemRight\" valign=\"bottom\"\u003e\u003ca class=\"el\" href=\"qpsk__demodulator_8c.html#a86d0ddaa1add7df3aef1861d24a3ad3c\"\u003eqpsk_demodulator_init\u003c/a\u003e (float sample_rate, float lo_frequency, float bandwidth, uint16_t halfcycles_per_symbol, float carrier_start_threshold, float carrier_lost_threshold, float pll_lock_threshold, float pll_lock_time)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memdesc:a86d0ddaa1add7df3aef1861d24a3ad3c\"\u003e\u003ctd class=\"mdescLeft\"\u003e\u0026#160;\u003c/td\u003e\u003ctd class=\"mdescRight\"\u003eInitializes QPSK demodulator.  \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"separator:a86d0ddaa1add7df3aef1861d24a3ad3c\"\u003e\u003ctd class=\"memSeparator\" colspan=\"2\"\u003e\u0026#160;\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memitem:a573fffa237e23d74d49c40f2f5036094\" id=\"r_a573fffa237e23d74d49c40f2f5036094\"\u003e\u003ctd class=\"memItemLeft\" align=\"right\" valign=\"top\"\u003evoid\u0026#160;\u003c/td\u003e\u003ctd class=\"memItemRight\" valign=\"bottom\"\u003e\u003ca class=\"el\" href=\"qpsk__demodulator_8c.html#a573fffa237e23d74d49c40f2f5036094\"\u003eqpsk_demodulator_demodulate_chunk\u003c/a\u003e (\u003ca class=\"el\" href=\"structqpsk__demodulator__s.html\"\u003eqpsk_demodulator_s\u003c/a\u003e *qpsk_demodulator, float *samples_chunk, uint32_t samples_chunk_size, uint8_t *symbols_chunk, uint8_t debug_messages)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memdesc:a573fffa237e23d74d49c40f2f5036094\"\u003e\u003ctd class=\"mdescLeft\"\u003e\u0026#160;\u003c/td\u003e\u003ctd class=\"mdescRight\"\u003eDemodulates one chunk of samples into symbols.  \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"separator:a573fffa237e23d74d49c40f2f5036094\"\u003e\u003ctd class=\"memSeparator\" colspan=\"2\"\u003e\u0026#160;\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memitem:afe46e36ad5e955b810bbdc9c8c6c916f\" id=\"r_afe46e36ad5e955b810bbdc9c8c6c916f\"\u003e\u003ctd class=\"memItemLeft\" align=\"right\" valign=\"top\"\u003evoid\u0026#160;\u003c/td\u003e\u003ctd class=\"memItemRight\" valign=\"bottom\"\u003e\u003ca class=\"el\" href=\"qpsk__demodulator_8c.html#afe46e36ad5e955b810bbdc9c8c6c916f\"\u003eqpsk_demodulator_reset\u003c/a\u003e (\u003ca class=\"el\" href=\"structqpsk__demodulator__s.html\"\u003eqpsk_demodulator_s\u003c/a\u003e *qpsk_demodulator)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memdesc:afe46e36ad5e955b810bbdc9c8c6c916f\"\u003e\u003ctd class=\"mdescLeft\"\u003e\u0026#160;\u003c/td\u003e\u003ctd class=\"mdescRight\"\u003eResets QPSK demodulator to the initial state.  \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"separator:afe46e36ad5e955b810bbdc9c8c6c916f\"\u003e\u003ctd class=\"memSeparator\" colspan=\"2\"\u003e\u0026#160;\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memitem:aca396dc35954269f84fe6a3560b1272b\" id=\"r_aca396dc35954269f84fe6a3560b1272b\"\u003e\u003ctd class=\"memItemLeft\" align=\"right\" valign=\"top\"\u003evoid\u0026#160;\u003c/td\u003e\u003ctd class=\"memItemRight\" valign=\"bottom\"\u003e\u003ca class=\"el\" href=\"qpsk__demodulator_8c.html#aca396dc35954269f84fe6a3560b1272b\"\u003eqpsk_demodulator_destroy\u003c/a\u003e (\u003ca class=\"el\" href=\"structqpsk__demodulator__s.html\"\u003eqpsk_demodulator_s\u003c/a\u003e *qpsk_demodulator)\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"memdesc:aca396dc35954269f84fe6a3560b1272b\"\u003e\u003ctd class=\"mdescLeft\"\u003e\u0026#160;\u003c/td\u003e\u003ctd class=\"mdescRight\"\u003eFrees all memory allocated by QPSK demodulator.  \u003cbr /\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003ctr class=\"separator:aca396dc35954269f84fe6a3560b1272b\"\u003e\u003ctd class=\"memSeparator\" colspan=\"2\"\u003e\u0026#160;\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\u003ca name=\"details\" id=\"details\"\u003e\u003c/a\u003e\u003ch2 class=\"groupheader\"\u003eDetailed Description\u003c/h2\u003e\n\u003cdiv class=\"textblock\"\u003e\u003cp\u003eQPSK demodulator (decoder) \u003c/p\u003e\n\u003cdl class=\"section author\"\u003e\u003cdt\u003eAuthor\u003c/dt\u003e\u003cdd\u003eFern Lane \u003c/dd\u003e\u003c/dl\u003e\n\u003cdl class=\"section version\"\u003e\u003cdt\u003eVersion\u003c/dt\u003e\u003cdd\u003e1.0.0 \u003c/dd\u003e\u003c/dl\u003e\n\u003cdl class=\"section date\"\u003e\u003cdt\u003eDate\u003c/dt\u003e\u003cdd\u003e2023-09-26\u003c/dd\u003e\u003c/dl\u003e\n\u003cdl class=\"section copyright\"\u003e\u003cdt\u003eCopyright\u003c/dt\u003e\u003cdd\u003eCopyright (c) 2023\u003c/dd\u003e\u003c/dl\u003e\n\u003cp\u003eCopyright (C) 2023 Fern Lane, QPSK modulator / demodulator libraries Licensed under the GNU Affero General Public License, Version 3.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at \u003ca href=\"https://www.gnu.org/licenses/agpl-3.0.en.html\"\u003ehttps://www.gnu.org/licenses/agpl-3.0.en.html\u003c/a\u003e Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \u003c/p\u003e\n\n\u003cp class=\"definition\"\u003eDefinition in file \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html\"\u003eqpsk_demodulator.c\u003c/a\u003e.\u003c/p\u003e\n\u003c/div\u003e\u003ch2 class=\"groupheader\"\u003eFunction Documentation\u003c/h2\u003e\n\u003ca id=\"a0f1e99ba7cca738089a7fd994bde9163\" name=\"a0f1e99ba7cca738089a7fd994bde9163\"\u003e\u003c/a\u003e\n\u003ch2 class=\"memtitle\"\u003e\u003cspan class=\"permalink\"\u003e\u003ca href=\"#a0f1e99ba7cca738089a7fd994bde9163\"\u003e\u0026#9670;\u0026#160;\u003c/a\u003e\u003c/span\u003eclampf()\u003c/h2\u003e\n\n\u003cdiv class=\"memitem\"\u003e\n\u003cdiv class=\"memproto\"\u003e\n      \u003ctable class=\"memname\"\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"memname\"\u003efloat clampf \u003c/td\u003e\n          \u003ctd\u003e(\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003evalue\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003emin\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003emax\u003c/em\u003e\u0026#160;\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e)\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n\u003c/div\u003e\u003cdiv class=\"memdoc\"\u003e\n\n\u003cp\u003eClamps float value to a range. \u003c/p\u003e\n\u003cdl class=\"params\"\u003e\u003cdt\u003eParameters\u003c/dt\u003e\u003cdd\u003e\n  \u003ctable class=\"params\"\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003evalue\u003c/td\u003e\u003ctd\u003eValue to clamp \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003emin\u003c/td\u003e\u003ctd\u003eRange minimum value \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003emax\u003c/td\u003e\u003ctd\u003eRange maximum value \u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\u003cdl class=\"section return\"\u003e\u003cdt\u003eReturns\u003c/dt\u003e\u003cdd\u003efloat Clamped value \u003c/dd\u003e\u003c/dl\u003e\n\n\u003cp class=\"definition\"\u003eDefinition at line \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html#l00042\"\u003e42\u003c/a\u003e of file \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html\"\u003eqpsk_demodulator.c\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ca id=\"a573fffa237e23d74d49c40f2f5036094\" name=\"a573fffa237e23d74d49c40f2f5036094\"\u003e\u003c/a\u003e\n\u003ch2 class=\"memtitle\"\u003e\u003cspan class=\"permalink\"\u003e\u003ca href=\"#a573fffa237e23d74d49c40f2f5036094\"\u003e\u0026#9670;\u0026#160;\u003c/a\u003e\u003c/span\u003eqpsk_demodulator_demodulate_chunk()\u003c/h2\u003e\n\n\u003cdiv class=\"memitem\"\u003e\n\u003cdiv class=\"memproto\"\u003e\n      \u003ctable class=\"memname\"\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"memname\"\u003evoid qpsk_demodulator_demodulate_chunk \u003c/td\u003e\n          \u003ctd\u003e(\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003e\u003ca class=\"el\" href=\"structqpsk__demodulator__s.html\"\u003eqpsk_demodulator_s\u003c/a\u003e *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003eqpsk_demodulator\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003esamples_chunk\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003euint32_t\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003esamples_chunk_size\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003euint8_t *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003esymbols_chunk\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003euint8_t\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003edebug_messages\u003c/em\u003e\u0026#160;\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e)\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n\u003c/div\u003e\u003cdiv class=\"memdoc\"\u003e\n\n\u003cp\u003eDemodulates one chunk of samples into symbols. \u003c/p\u003e\n\u003cdl class=\"params\"\u003e\u003cdt\u003eParameters\u003c/dt\u003e\u003cdd\u003e\n  \u003ctable class=\"params\"\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003eqpsk_demodulator\u003c/td\u003e\u003ctd\u003eQPSK demodulator's struct \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003esamples_chunk\u003c/td\u003e\u003ctd\u003eAarray of samples \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003esamples_chunk_size\u003c/td\u003e\u003ctd\u003eLength of array of symbols \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003esymbols_chunk\u003c/td\u003e\u003ctd\u003eAllocated array of symbols (size equal to samples_chunk_size) 0xFF - no symbol decoded at current sample, 0b00, 0b01, 0b10, 0b11 - decoded symbols at specific samples \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003edebug_messages\u003c/td\u003e\u003ctd\u003eEnable printf() debug messages (greatly affects performance) \u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n\u003cp class=\"definition\"\u003eDefinition at line \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html#l00153\"\u003e153\u003c/a\u003e of file \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html\"\u003eqpsk_demodulator.c\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ca id=\"aca396dc35954269f84fe6a3560b1272b\" name=\"aca396dc35954269f84fe6a3560b1272b\"\u003e\u003c/a\u003e\n\u003ch2 class=\"memtitle\"\u003e\u003cspan class=\"permalink\"\u003e\u003ca href=\"#aca396dc35954269f84fe6a3560b1272b\"\u003e\u0026#9670;\u0026#160;\u003c/a\u003e\u003c/span\u003eqpsk_demodulator_destroy()\u003c/h2\u003e\n\n\u003cdiv class=\"memitem\"\u003e\n\u003cdiv class=\"memproto\"\u003e\n      \u003ctable class=\"memname\"\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"memname\"\u003evoid qpsk_demodulator_destroy \u003c/td\u003e\n          \u003ctd\u003e(\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003e\u003ca class=\"el\" href=\"structqpsk__demodulator__s.html\"\u003eqpsk_demodulator_s\u003c/a\u003e *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003eqpsk_demodulator\u003c/em\u003e\u003c/td\u003e\u003ctd\u003e)\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n\u003c/div\u003e\u003cdiv class=\"memdoc\"\u003e\n\n\u003cp\u003eFrees all memory allocated by QPSK demodulator. \u003c/p\u003e\n\u003cdl class=\"params\"\u003e\u003cdt\u003eParameters\u003c/dt\u003e\u003cdd\u003e\n  \u003ctable class=\"params\"\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003eqpsk_demodulator\u003c/td\u003e\u003ctd\u003eQPSK demodulator's struct \u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n\u003cp class=\"definition\"\u003eDefinition at line \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html#l00481\"\u003e481\u003c/a\u003e of file \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html\"\u003eqpsk_demodulator.c\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ca id=\"a86d0ddaa1add7df3aef1861d24a3ad3c\" name=\"a86d0ddaa1add7df3aef1861d24a3ad3c\"\u003e\u003c/a\u003e\n\u003ch2 class=\"memtitle\"\u003e\u003cspan class=\"permalink\"\u003e\u003ca href=\"#a86d0ddaa1add7df3aef1861d24a3ad3c\"\u003e\u0026#9670;\u0026#160;\u003c/a\u003e\u003c/span\u003eqpsk_demodulator_init()\u003c/h2\u003e\n\n\u003cdiv class=\"memitem\"\u003e\n\u003cdiv class=\"memproto\"\u003e\n      \u003ctable class=\"memname\"\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"memname\"\u003e\u003ca class=\"el\" href=\"structqpsk__demodulator__s.html\"\u003eqpsk_demodulator_s\u003c/a\u003e * qpsk_demodulator_init \u003c/td\u003e\n          \u003ctd\u003e(\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003esample_rate\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003elo_frequency\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003ebandwidth\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003euint16_t\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003ehalfcycles_per_symbol\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003ecarrier_start_threshold\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003ecarrier_lost_threshold\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003epll_lock_threshold\u003c/em\u003e, \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"paramkey\"\u003e\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003efloat\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003epll_lock_time\u003c/em\u003e\u0026#160;\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n          \u003ctd\u003e\u003c/td\u003e\n          \u003ctd\u003e)\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n\u003c/div\u003e\u003cdiv class=\"memdoc\"\u003e\n\n\u003cp\u003eInitializes QPSK demodulator. \u003c/p\u003e\n\u003cdl class=\"params\"\u003e\u003cdt\u003eParameters\u003c/dt\u003e\u003cdd\u003e\n  \u003ctable class=\"params\"\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003esample_rate\u003c/td\u003e\u003ctd\u003eSampling rate (in Hz) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003elo_frequency\u003c/td\u003e\u003ctd\u003eCarrier frequency (local oscillator) (in Hz) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003ebandwidth\u003c/td\u003e\u003ctd\u003eInput signal bandwidth (in Hz) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003ehalfcycles_per_symbol\u003c/td\u003e\u003ctd\u003eRate of symbols in carrier halfcycles (2 halfcycles = 1 full carrier wave cycle) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003ecarrier_start_threshold\u003c/td\u003e\u003ctd\u003eSignal must be above this threshold to start PLL locking and demodulating (in dBFS RMS) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003ecarrier_lost_threshold\u003c/td\u003e\u003ctd\u003eSignal must be below this threshold to stop PLL locking and demodulating (in dBFS RMS) \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003epll_lock_threshold\u003c/td\u003e\u003ctd\u003ePLL's input (IQ error) should't change during pll_lock_time more than this value \u003c/td\u003e\u003c/tr\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003epll_lock_time\u003c/td\u003e\u003ctd\u003ePLL's input (IQ error) should't change during this time (in seconds) more than pll_lock_threshold \u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\u003cdl class=\"section return\"\u003e\u003cdt\u003eReturns\u003c/dt\u003e\u003cdd\u003eqpsk_demodulator_s* QPSK demodulator's struct \u003c/dd\u003e\u003c/dl\u003e\n\n\u003cp class=\"definition\"\u003eDefinition at line \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html#l00061\"\u003e61\u003c/a\u003e of file \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html\"\u003eqpsk_demodulator.c\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003ca id=\"afe46e36ad5e955b810bbdc9c8c6c916f\" name=\"afe46e36ad5e955b810bbdc9c8c6c916f\"\u003e\u003c/a\u003e\n\u003ch2 class=\"memtitle\"\u003e\u003cspan class=\"permalink\"\u003e\u003ca href=\"#afe46e36ad5e955b810bbdc9c8c6c916f\"\u003e\u0026#9670;\u0026#160;\u003c/a\u003e\u003c/span\u003eqpsk_demodulator_reset()\u003c/h2\u003e\n\n\u003cdiv class=\"memitem\"\u003e\n\u003cdiv class=\"memproto\"\u003e\n      \u003ctable class=\"memname\"\u003e\n        \u003ctr\u003e\n          \u003ctd class=\"memname\"\u003evoid qpsk_demodulator_reset \u003c/td\u003e\n          \u003ctd\u003e(\u003c/td\u003e\n          \u003ctd class=\"paramtype\"\u003e\u003ca class=\"el\" href=\"structqpsk__demodulator__s.html\"\u003eqpsk_demodulator_s\u003c/a\u003e *\u0026#160;\u003c/td\u003e\n          \u003ctd class=\"paramname\"\u003e\u003cem\u003eqpsk_demodulator\u003c/em\u003e\u003c/td\u003e\u003ctd\u003e)\u003c/td\u003e\n          \u003ctd\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n      \u003c/table\u003e\n\u003c/div\u003e\u003cdiv class=\"memdoc\"\u003e\n\n\u003cp\u003eResets QPSK demodulator to the initial state. \u003c/p\u003e\n\u003cdl class=\"params\"\u003e\u003cdt\u003eParameters\u003c/dt\u003e\u003cdd\u003e\n  \u003ctable class=\"params\"\u003e\n    \u003ctr\u003e\u003ctd class=\"paramname\"\u003eqpsk_demodulator\u003c/td\u003e\u003ctd\u003eQPSK demodulator's struct \u003c/td\u003e\u003c/tr\u003e\n  \u003c/table\u003e\n  \u003c/dd\u003e\n\u003c/dl\u003e\n\n\u003cp class=\"definition\"\u003eDefinition at line \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html#l00449\"\u003e449\u003c/a\u003e of file \u003ca class=\"el\" href=\"qpsk__demodulator_8c_source.html\"\u003eqpsk_demodulator.c\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c!-- contents --\u003e\n\u003c!-- start footer part --\u003e\n\u003chr class=\"footer\"/\u003e\u003caddress class=\"footer\"\u003e\u003csmall\u003e\nGenerated by\u0026#160;\u003ca href=\"https://www.doxygen.org/index.html\"\u003e\u003cimg class=\"footer\" src=\"doxygen.svg\" width=\"104\" height=\"31\" alt=\"doxygen\"/\u003e\u003c/a\u003e 1.9.8\n\u003c/small\u003e\u003c/address\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff33rni%2Fqpsk-mod-demod-libs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ff33rni%2Fqpsk-mod-demod-libs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ff33rni%2Fqpsk-mod-demod-libs/lists"}