From a787650ee360d20d514a1368363c3f344badcfbb Mon Sep 17 00:00:00 2001 From: drowe67 Date: Tue, 1 May 2012 04:26:16 +0000 Subject: [PATCH] fdmdv_get_test_bits & fdmdv_mod working, can rx on Octave demod OK git-svn-id: https://svn.code.sf.net/p/freetel/code@387 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2-dev/octave/README_fdmdv.txt | 10 +++ codec2-dev/src/Makefile.am | 5 +- codec2-dev/src/Makefile.in | 20 ++++-- codec2-dev/src/fdmdv.c | 4 +- codec2-dev/src/fdmdv_demod.c | 4 +- codec2-dev/src/fdmdv_get_test_bits.c | 100 +++++++++++++++++++++++++++ codec2-dev/src/fdmdv_mod.c | 4 +- 7 files changed, 137 insertions(+), 10 deletions(-) create mode 100644 codec2-dev/src/fdmdv_get_test_bits.c diff --git a/codec2-dev/octave/README_fdmdv.txt b/codec2-dev/octave/README_fdmdv.txt index 8adae6db..459801cc 100644 --- a/codec2-dev/octave/README_fdmdv.txt +++ b/codec2-dev/octave/README_fdmdv.txt @@ -41,6 +41,16 @@ TODO [ ] maybe in ascii art [ ] blog posts(s) [ ] Codec 2 web page update +[ ] examples of various combinations of fdmdv demos + $ ./fdmdv_get_test_bits test.c2 1400 + $ ./fdmdv_mod test.c2 test.raw + $ play -r 8000 -s -2 test.raw + + Two seconds of test frame data out of sound device: + $ ./fdmdv_get_test_bits - 2800 | ./fdmdv_mod - - | play -t raw -r 8000 -s -2 - + +[ ] PAPR idea + + automatically weak phases to reduce PAPR, e.g. slow variations in freq... Tests diff --git a/codec2-dev/src/Makefile.am b/codec2-dev/src/Makefile.am index 96586716..a2230685 100644 --- a/codec2-dev/src/Makefile.am +++ b/codec2-dev/src/Makefile.am @@ -122,7 +122,7 @@ libcodec2_la_LDFLAGS = $(LIBS) library_includedir = $(prefix)/include library_include_HEADERS = codec2.h -bin_PROGRAMS = c2demo c2enc c2dec c2sim fdmdv_mod fdmdv_demod +bin_PROGRAMS = c2demo c2enc c2dec c2sim fdmdv_get_test_bits fdmdv_mod fdmdv_demod c2demo_SOURCES = c2demo.c c2demo_LDADD = $(lib_LTLIBRARIES) @@ -140,6 +140,9 @@ c2sim_SOURCES = c2sim.c c2sim_LDADD = $(lib_LTLIBRARIES) c2sim_LDFLAGS = $(LIBS) +fdmdv_get_test_bits_SOURCES = fdmdv_get_test_bits.c fdmdv.c fft.c kiss_fft.c +fdmdv_get_test_bits_LDFLAGS = $(LIBS) + fdmdv_mod_SOURCES = fdmdv_mod.c fdmdv.c fft.c kiss_fft.c fdmdv_mod_LDFLAGS = $(LIBS) diff --git a/codec2-dev/src/Makefile.in b/codec2-dev/src/Makefile.in index bc5269d6..8e3e2d79 100644 --- a/codec2-dev/src/Makefile.in +++ b/codec2-dev/src/Makefile.in @@ -40,7 +40,8 @@ build_triplet = @build@ host_triplet = @host@ noinst_PROGRAMS = generate_codebook$(EXEEXT) genlspdtcb$(EXEEXT) bin_PROGRAMS = c2demo$(EXEEXT) c2enc$(EXEEXT) c2dec$(EXEEXT) \ - c2sim$(EXEEXT) fdmdv_mod$(EXEEXT) fdmdv_demod$(EXEEXT) + c2sim$(EXEEXT) fdmdv_get_test_bits$(EXEEXT) fdmdv_mod$(EXEEXT) \ + fdmdv_demod$(EXEEXT) subdir = src DIST_COMMON = $(library_include_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in @@ -91,6 +92,10 @@ am_fdmdv_demod_OBJECTS = fdmdv_demod.$(OBJEXT) fdmdv.$(OBJEXT) \ fft.$(OBJEXT) kiss_fft.$(OBJEXT) octave.$(OBJEXT) fdmdv_demod_OBJECTS = $(am_fdmdv_demod_OBJECTS) fdmdv_demod_LDADD = $(LDADD) +am_fdmdv_get_test_bits_OBJECTS = fdmdv_get_test_bits.$(OBJEXT) \ + fdmdv.$(OBJEXT) fft.$(OBJEXT) kiss_fft.$(OBJEXT) +fdmdv_get_test_bits_OBJECTS = $(am_fdmdv_get_test_bits_OBJECTS) +fdmdv_get_test_bits_LDADD = $(LDADD) am_fdmdv_mod_OBJECTS = fdmdv_mod.$(OBJEXT) fdmdv.$(OBJEXT) \ fft.$(OBJEXT) kiss_fft.$(OBJEXT) fdmdv_mod_OBJECTS = $(am_fdmdv_mod_OBJECTS) @@ -114,11 +119,12 @@ LINK = $(LIBTOOL) --tag=CC --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libcodec2_la_SOURCES) $(c2dec_SOURCES) $(c2demo_SOURCES) \ $(c2enc_SOURCES) $(c2sim_SOURCES) $(fdmdv_demod_SOURCES) \ - $(fdmdv_mod_SOURCES) generate_codebook.c genlspdtcb.c + $(fdmdv_get_test_bits_SOURCES) $(fdmdv_mod_SOURCES) \ + generate_codebook.c genlspdtcb.c DIST_SOURCES = $(libcodec2_la_SOURCES) $(c2dec_SOURCES) \ $(c2demo_SOURCES) $(c2enc_SOURCES) $(c2sim_SOURCES) \ - $(fdmdv_demod_SOURCES) $(fdmdv_mod_SOURCES) \ - generate_codebook.c genlspdtcb.c + $(fdmdv_demod_SOURCES) $(fdmdv_get_test_bits_SOURCES) \ + $(fdmdv_mod_SOURCES) generate_codebook.c genlspdtcb.c library_includeHEADERS_INSTALL = $(INSTALL_HEADER) HEADERS = $(library_include_HEADERS) ETAGS = etags @@ -321,6 +327,8 @@ c2dec_LDFLAGS = $(LIBS) c2sim_SOURCES = c2sim.c c2sim_LDADD = $(lib_LTLIBRARIES) c2sim_LDFLAGS = $(LIBS) +fdmdv_get_test_bits_SOURCES = fdmdv_get_test_bits.c fdmdv.c fft.c kiss_fft.c +fdmdv_get_test_bits_LDFLAGS = $(LIBS) fdmdv_mod_SOURCES = fdmdv_mod.c fdmdv.c fft.c kiss_fft.c fdmdv_mod_LDFLAGS = $(LIBS) fdmdv_demod_SOURCES = fdmdv_demod.c fdmdv.c fft.c kiss_fft.c octave.c @@ -437,6 +445,9 @@ c2sim$(EXEEXT): $(c2sim_OBJECTS) $(c2sim_DEPENDENCIES) fdmdv_demod$(EXEEXT): $(fdmdv_demod_OBJECTS) $(fdmdv_demod_DEPENDENCIES) @rm -f fdmdv_demod$(EXEEXT) $(LINK) $(fdmdv_demod_LDFLAGS) $(fdmdv_demod_OBJECTS) $(fdmdv_demod_LDADD) $(LIBS) +fdmdv_get_test_bits$(EXEEXT): $(fdmdv_get_test_bits_OBJECTS) $(fdmdv_get_test_bits_DEPENDENCIES) + @rm -f fdmdv_get_test_bits$(EXEEXT) + $(LINK) $(fdmdv_get_test_bits_LDFLAGS) $(fdmdv_get_test_bits_OBJECTS) $(fdmdv_get_test_bits_LDADD) $(LIBS) fdmdv_mod$(EXEEXT): $(fdmdv_mod_OBJECTS) $(fdmdv_mod_DEPENDENCIES) @rm -f fdmdv_mod$(EXEEXT) $(LINK) $(fdmdv_mod_LDFLAGS) $(fdmdv_mod_OBJECTS) $(fdmdv_mod_LDADD) $(LIBS) @@ -459,6 +470,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/c2sim.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdmdv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdmdv_demod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdmdv_get_test_bits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdmdv_mod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fft.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/generate_codebook.Po@am__quote@ diff --git a/codec2-dev/src/fdmdv.c b/codec2-dev/src/fdmdv.c index 51348920..f0501dde 100644 --- a/codec2-dev/src/fdmdv.c +++ b/codec2-dev/src/fdmdv.c @@ -427,7 +427,9 @@ void fdm_upconvert(COMP tx_fdm[], COMP tx_baseband[NC+1][M], COMP phase_tx[], CO FDMDV modulator, take a frame of FDMDV_BITS_PER_FRAME bits and generates a frame of FDMDV_SAMPLES_PER_FRAME modulated symbols. - Sync bit is returned to aid alignment of your next frame. + Sync bit is returned to aid alignment of your next frame. It is the + sync_bit (pilot bit) value that will be used for the next frame of + mosulatedsamples. \*---------------------------------------------------------------------------*/ diff --git a/codec2-dev/src/fdmdv_demod.c b/codec2-dev/src/fdmdv_demod.c index 996d2fea..d91715dc 100644 --- a/codec2-dev/src/fdmdv_demod.c +++ b/codec2-dev/src/fdmdv_demod.c @@ -42,9 +42,9 @@ #define BITS_PER_CODEC_FRAME (2*FDMDV_BITS_PER_FRAME) #define BYTES_PER_CODEC_FRAME (BITS_PER_CODEC_FRAME/8) -/* lof of information we want to sump to Octave */ +/* lof of information we want to dump to Octave */ -#define MAX_FRAMES 50*60 +#define MAX_FRAMES 50*60 /* 1 minute at 50 symbols/s */ void dump_to_octave(struct FDMDV *fdmdv, FILE *f); diff --git a/codec2-dev/src/fdmdv_get_test_bits.c b/codec2-dev/src/fdmdv_get_test_bits.c new file mode 100644 index 00000000..e3120e93 --- /dev/null +++ b/codec2-dev/src/fdmdv_get_test_bits.c @@ -0,0 +1,100 @@ +/*---------------------------------------------------------------------------*\ + + FILE........: fdmdv_get_test_bits.c + AUTHOR......: David Rowe + DATE CREATED: 1 May 2012 + + Generates a file of packed test bits, useful for input to fdmdv_mod. + +\*---------------------------------------------------------------------------*/ + + +/* + Copyright (C) 2012 David Rowe + + All rights reserved. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License version 2, as + published by the Free Software Foundation. This program is + distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, see . +*/ + +#include +#include +#include +#include +#include +#include + +#include "fdmdv.h" + +#define BITS_PER_CODEC_FRAME (2*FDMDV_BITS_PER_FRAME) +#define BYTES_PER_CODEC_FRAME (BITS_PER_CODEC_FRAME/8) + +int main(int argc, char *argv[]) +{ + FILE *fout; + struct FDMDV *fdmdv; + char packed_bits[BYTES_PER_CODEC_FRAME]; + int tx_bits[2*FDMDV_BITS_PER_FRAME]; + int n, i, bit, byte; + int numBits, nCodecFrames; + + if (argc < 3) { + printf("usage: %s OutputBitFile numBits\n", argv[0]); + printf("e.g %s test.c2 1400\n", argv[0]); + exit(1); + } + + if (strcmp(argv[1], "-") == 0) fout = stdout; + else if ( (fout = fopen(argv[1],"wb")) == NULL ) { + fprintf(stderr, "Error opening output bit file: %s: %s.\n", + argv[1], strerror(errno)); + exit(1); + } + + numBits = atoi(argv[2]); + nCodecFrames = numBits/BITS_PER_CODEC_FRAME; + + fdmdv = fdmdv_create(); + + for(n=0; n