diff options
author | eb <eb@221aa14e-8319-0410-a670-987f0aec2ac5> | 2007-01-13 05:37:03 +0000 |
---|---|---|
committer | eb <eb@221aa14e-8319-0410-a670-987f0aec2ac5> | 2007-01-13 05:37:03 +0000 |
commit | 87afa6ff1bb26acf3cd8a2c37a11fd44e655d314 (patch) | |
tree | 98262a4234efe859de1e0b24f94de9f050d52416 | |
parent | cbe1628f2eb1a1a3c8b0b96a3b1334a039074def (diff) |
Moved gr-radar out of trunk for now. Needs portability cleanup.
Not to mention some functionality...
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@4258 221aa14e-8319-0410-a670-987f0aec2ac5
29 files changed, 0 insertions, 2399 deletions
diff --git a/gr-radar/AUTHORS b/gr-radar/AUTHORS deleted file mode 100644 index ee4560a55d..0000000000 --- a/gr-radar/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Eric Blossom <eb@comsec.com> diff --git a/gr-radar/ChangeLog b/gr-radar/ChangeLog deleted file mode 100644 index 4f066df09b..0000000000 --- a/gr-radar/ChangeLog +++ /dev/null @@ -1,20 +0,0 @@ -# -# Copyright 2005 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio 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 General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# diff --git a/gr-radar/Makefile.am b/gr-radar/Makefile.am deleted file mode 100644 index bba83a103a..0000000000 --- a/gr-radar/Makefile.am +++ /dev/null @@ -1,25 +0,0 @@ -# -# Copyright 2005 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio 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 General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -include $(top_srcdir)/Makefile.common - -SUBDIRS = src doc -DIST_SUBDIRS = src doc diff --git a/gr-radar/doc/Makefile.am b/gr-radar/doc/Makefile.am deleted file mode 100644 index e69de29bb2..0000000000 --- a/gr-radar/doc/Makefile.am +++ /dev/null diff --git a/gr-radar/src/Makefile.am b/gr-radar/src/Makefile.am deleted file mode 100644 index 79b2172910..0000000000 --- a/gr-radar/src/Makefile.am +++ /dev/null @@ -1,22 +0,0 @@ -# -# Copyright 2004 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio 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 General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -SUBDIRS = lib python diff --git a/gr-radar/src/lib/Makefile.am b/gr-radar/src/lib/Makefile.am deleted file mode 100644 index ef178e3376..0000000000 --- a/gr-radar/src/lib/Makefile.am +++ /dev/null @@ -1,107 +0,0 @@ -# -# Copyright 2004,2005 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio 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 General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -include $(top_srcdir)/Makefile.common - -# Install this stuff so that it ends up as the gnuradio.radar module -# This usually ends up at: -# ${prefix}/lib/python${python_version}/site-packages/gnuradio - -ourpythondir = $(grpythondir) -ourlibdir = $(grpyexecdir) - -INCLUDES = $(STD_DEFINES_AND_INCLUDES) $(PYTHON_CPPFLAGS) - -SWIGPYTHONARGS = $(SWIGPYTHONFLAGS) $(STD_DEFINES_AND_INCLUDES) - -ALL_IFILES = \ - $(LOCAL_IFILES) \ - $(NON_LOCAL_IFILES) - -NON_LOCAL_IFILES = \ - $(GNURADIO_I) - - -LOCAL_IFILES = - - -# These files are built by SWIG. The first is the C++ glue. -# The second is the python wrapper that loads the _howto shared library -# and knows how to call our extensions. - -BUILT_SOURCES = - -lib_LTLIBRARIES = libradar.la - -libradar_la_SOURCES = \ - time_series.h \ - time_series.cc \ - simulation.h \ - simulation.cc - -# magic flags -libradar_la_LDFLAGS = $(NO_UNDEFINED) -avoid-version - -# link the libraray against the c++ standard library -libradar_la_LIBADD = \ - -lstdc++ - -bin_PROGRAMS = \ - xambi \ - eb-xambi \ - sim-airplane \ - sim-airplane2 - -xambi_SOURCES = xambi.cc -xambi_LDADD = libradar.la $(GNURADIO_CORE_LIBS) - -eb_xambi_SOURCES = eb-xambi.cc -eb_xambi_LDADD = libradar.la $(GNURADIO_CORE_LIBS) - -sim_airplane_SOURCES = sim-airplane.cc -sim_airplane_LDADD = libradar.la $(GNURADIO_CORE_LIBS) - -sim_airplane2_SOURCES = sim-airplane2.cc -sim_airplane2_LDADD = libradar.la $(GNURADIO_CORE_LIBS) - -# This gets howto.py installed in the right place -# ourpython_PYTHON = - - -#howto.cc howto.py: howto.i $(ALL_IFILES) -# $(SWIG) $(SWIGPYTHONARGS) -module howto -o howto.cc $< - -# These headers get installed in ${prefix}/include/gnuradio -grinclude_HEADERS = - - -# These swig headers get installed in ${prefix}/include/gnuradio/swig -swiginclude_HEADERS = \ - $(LOCAL_IFILES) - - -MOSTLYCLEANFILES = $(BUILT_SOURCES) *.pyc - - -# Don't distribute output of swig -dist-hook: - @for file in $(BUILT_SOURCES); do echo $(RM) $(distdir)/$$file; done - @for file in $(BUILT_SOURCES); do $(RM) $(distdir)/$$file; done diff --git a/gr-radar/src/lib/eb-xambi.cc b/gr-radar/src/lib/eb-xambi.cc deleted file mode 100644 index 32d30f003c..0000000000 --- a/gr-radar/src/lib/eb-xambi.cc +++ /dev/null @@ -1,291 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio 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 General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#include <iostream> -#include <string> -#include <fstream> -#include <unistd.h> -#include <stdlib.h> -#include <getopt.h> -#include <boost/scoped_array.hpp> -#include <gr_complex.h> -#include <gr_fxpt_nco.h> -#include "time_series.h" - - -gr_complex -complex_conj_dotprod(const gr_complex *a, const gr_complex *b, unsigned n) -{ - gr_complex acc = 0; - for (unsigned i = 0; i < n; i++) - acc += a[i] * conj(b[i]); - - return acc; -} - -/*! - * \brief frequency translate src by normalized_freq - * - * \param dst destination - * \param src source - * \param n length of src and dst in samples - * \param normalized_freq [-1/2, +1/2] - */ -void -freq_xlate(gr_complex *dst, const gr_complex *src, unsigned n, float normalized_freq) -{ - gr_fxpt_nco nco; - nco.set_freq(2 * M_PI * normalized_freq); - - for (unsigned int i = 0; i < n; i++){ - gr_complex phasor(nco.cos(), nco.sin()); - dst[i] = src[i] * phasor; - nco.step(); - } -} - -inline void -write_float(FILE *output, float x) -{ - fwrite(&x, sizeof(x), 1, output); -} - - -// write 8-float header -static void -write_header (FILE *output, float ndoppler_bins, float min_doppler, float max_doppler) -{ - write_float(output, ndoppler_bins); - write_float(output, min_doppler); - write_float(output, max_doppler); - write_float(output, 0); - write_float(output, 0); - write_float(output, 0); - write_float(output, 0); - write_float(output, 0); -} - - -void -main_loop(FILE *output, time_series &ref_ts, time_series &scat0_ts, - unsigned nranges, unsigned correlation_window_size, - float min_doppler, float max_doppler, int ndoppler_bins) -{ - fprintf(stderr, "ndoppler_bins = %10d\n", ndoppler_bins); - fprintf(stderr, "min_doppler = %10f\n", min_doppler); - fprintf(stderr, "max_doppler = %10f\n", max_doppler); - - // float scale_factor = 1.0/correlation_window_size; // FIXME, not sure this is right - float scale_factor = 1.0; // FIXME, not sure this is right - - boost::scoped_array<gr_complex> shifted(new gr_complex[correlation_window_size]); - - // gr_complex shifted[correlation_window_size]; // doppler shifted reference - - float doppler_incr = 0; - if (ndoppler_bins == 1){ - min_doppler = 0; - max_doppler = 0; - } - else - doppler_incr = (max_doppler - min_doppler) / (ndoppler_bins - 1); - - write_header(output, ndoppler_bins, min_doppler, max_doppler); - - unsigned long long ro = 0; // reference offset - unsigned long long so = 0; // scatter offset - - for (unsigned int n = 0; n < nranges; n++){ - if (0){ - fprintf(stdout, "n = %6d\n", n); - fprintf(stdout, "ro = %6lld\n", ro); - fprintf(stdout, "so = %6lld\n", so); - } - const gr_complex *ref = (const gr_complex *) ref_ts.seek(ro, correlation_window_size); - const gr_complex *scat0 = (const gr_complex *) scat0_ts.seek(so, correlation_window_size); - if (ref == 0 || scat0 == 0) - return; - - for (int nd = 0; nd < ndoppler_bins; nd++){ - float fdop = min_doppler + doppler_incr * nd; - //fprintf(stderr, "fdop = %10g\n", fdop); - freq_xlate(&shifted[0], ref, correlation_window_size, fdop); // generated doppler shifted reference - - gr_complex ccor = complex_conj_dotprod(&shifted[0], scat0, correlation_window_size); - float out = norm(ccor) * scale_factor; - - // fprintf(output, "%12g\n", out); - write_float(output, out); - } - - so += 1; - } -} - -static void -usage(const char *argv0) -{ - const char *progname; - const char *t = std::strrchr(argv0, '/'); - if (t != 0) - progname = t + 1; - else - progname = argv0; - - fprintf(stderr, "usage: %s [options] ref_file scatter_file\n", progname); - fprintf(stderr, " -o OUTPUT_FILENAME [default=eb-xambi.out]\n"); - fprintf(stderr, " -m MIN_RANGE [default=0]\n"); - fprintf(stderr, " -M MAX_RANGE [default=300]\n"); - fprintf(stderr, " -w CORRELATION_WINDOW_SIZE [default=2500]\n"); - fprintf(stderr, " -s NSAMPLES_TO_SKIP [default=0]\n"); - fprintf(stderr, " -d max_doppler (normalized: [0, +1/2)) [default=.0012]\n"); - fprintf(stderr, " -n ndoppler_bins [default=31]\n"); -} - -int -main(int argc, char **argv) -{ - int ch; - int min_range = 0; - int max_range = 300; - const char *ref_filename = 0; - const char *scatter_filename = 0; - const char *output_filename = "eb-xambi.out"; - unsigned int correlation_window_size = 2500; - long long int nsamples_to_skip = 0; - double max_doppler = 0.0012; - int ndoppler_bins = 31; - - - while ((ch = getopt(argc, argv, "m:M:ho:w:s:d:n:")) != -1){ - switch (ch){ - case 'm': - min_range = strtol(optarg, 0, 0); - break; - - case 'M': - max_range = strtol(optarg, 0, 0); - break; - - case 'w': - correlation_window_size = strtol(optarg, 0, 0); - if (correlation_window_size <= 1){ - usage(argv[0]); - fprintf(stderr, " correlation_window_size must be >= 1\n"); - exit(1); - } - break; - - case 'o': - output_filename = optarg; - break; - - case 's': - nsamples_to_skip = (long long) strtod(optarg, 0); - if (nsamples_to_skip < 0){ - usage(argv[0]); - fprintf(stderr, " nsamples_to_skip must be >= 0\n"); - exit(1); - } - break; - - case 'd': - max_doppler = strtod(optarg, 0); - if (max_doppler < 0 || max_doppler >= 0.5){ - usage(argv[0]); - fprintf(stderr, " max_doppler must be in [0, 0.5)\n"); - exit(1); - } - break; - - case 'n': - ndoppler_bins = strtol(optarg, 0, 0); - if (ndoppler_bins < 1){ - usage(argv[0]); - fprintf(stderr, " ndoppler_bins must >= 1\n"); - exit(1); - } - break; - - case '?': - case 'h': - default: - usage(argv[0]); - exit(1); - } - } // while getopt - - if (argc - optind != 2){ - usage(argv[0]); - exit(1); - } - - if (max_range < min_range){ - usage(argv[0]); - fprintf(stderr, " max_range must be >= min_range\n"); - exit(1); - } - unsigned int nranges = max_range - min_range + 1; - - ref_filename = argv[optind++]; - scatter_filename = argv[optind++]; - - FILE *output = fopen(output_filename, "wb"); - if (output == 0){ - perror(output_filename); - exit(1); - } - - unsigned long long ref_starting_offset = 0; - unsigned long long scatter_starting_offset = 0; - - if (min_range < 0){ - ref_starting_offset = -min_range; - scatter_starting_offset = 0; - } - else { - ref_starting_offset = 0; - scatter_starting_offset = min_range; - } - - ref_starting_offset += nsamples_to_skip; - scatter_starting_offset += nsamples_to_skip; - - try { - time_series ref(sizeof(gr_complex), ref_filename, ref_starting_offset, 0); - time_series scat0(sizeof(gr_complex), scatter_filename, scatter_starting_offset, 0); - - main_loop(output, ref, scat0, nranges, correlation_window_size, - -max_doppler, max_doppler, ndoppler_bins); - } - catch (std::string &s){ - std::cerr << s << std::endl; - exit(1); - } - - return 0; -} - diff --git a/gr-radar/src/lib/gen_run b/gr-radar/src/lib/gen_run deleted file mode 100755 index 8b9549e7be..0000000000 --- a/gr-radar/src/lib/gen_run +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env python - -import sys - -def main(): - window = 25000 - #window = 250000 - max_range = 99 - gifs = [] - for t in range(0, 241, 5): - sim_fn = "sim.%04d" % (t,) - xref_fn = "xref.%04d" % (t,) - ppm_fn = "i.%04d.ppm" % (t,) - gif_fn = "i.%04d.gif" % (t,) - gifs.append(gif_fn) - - sys.stdout.write("./sim-airplane2 rfm -o %s -S %d\n" % (sim_fn, t)) - sys.stdout.write("./eb-xambi -o %s -M %d -w %d -d 0.0002 rfm %s\n" % ( - xref_fn, max_range, window, sim_fn)) - sys.stdout.write("./plot_xambi_tool.m %s %s\n" % (xref_fn, ppm_fn)) - sys.stdout.write("convert -resize 800%% %s %s\n" % (ppm_fn, gif_fn)) - - sys.stdout.write("gifsicle -d 50 %s >animated.gif\n" % (' '.join(gifs))) - -if __name__ == '__main__': - main() diff --git a/gr-radar/src/lib/plot_rd.m b/gr-radar/src/lib/plot_rd.m deleted file mode 100644 index 166da020e5..0000000000 --- a/gr-radar/src/lib/plot_rd.m +++ /dev/null @@ -1,38 +0,0 @@ -filename="xambi.out" - -ambdata=read_float_binary(filename); - -fftsize=512 -nranges = prod(size(ambdata))/fftsize - -ambdata=reshape(ambdata,fftsize,nranges); -% ambdata=fftshift(ambdata,1); - -% colormap(cool(256)); -colormap(rainbow(256)); - -d = 10*log10(ambdata); -min(min(d)) -max(max(d)) -imagesc(d, 2.0); - - - - - - - - - - - - - - - - - - - - - diff --git a/gr-radar/src/lib/plot_xambi.m b/gr-radar/src/lib/plot_xambi.m deleted file mode 100755 index 62088597bf..0000000000 --- a/gr-radar/src/lib/plot_xambi.m +++ /dev/null @@ -1,15 +0,0 @@ -function plot_xambi(amb) - [nr, nc] = size(amb); - ndoppler_bins = nr - nranges = nc - - %colormap(cool(256)); - %colormap(rainbow(256)); - colormap(gray(1024)); - - %d = 10*log10(amb); - d = amb; - min(min(d)) - max(max(d)) - imagesc(d, 4.0); -endfunction; diff --git a/gr-radar/src/lib/plot_xambi_to_file.m b/gr-radar/src/lib/plot_xambi_to_file.m deleted file mode 100755 index 973d112a13..0000000000 --- a/gr-radar/src/lib/plot_xambi_to_file.m +++ /dev/null @@ -1,17 +0,0 @@ -function plot_xambi_to_file(amb, filename) - [nr, nc] = size(amb); - ndoppler_bins = nr - nranges = nc - - %colormap(cool(256)); - %colormap(rainbow(256)); - colormap(gray(1024)); - - %d = 10*log10(amb); - d = amb; - min(min(d)) - max(max(d)) - b = imagesc(d, 4.0); - saveimage(filename, b, "ppm") - -endfunction; diff --git a/gr-radar/src/lib/plot_xambi_tool.m b/gr-radar/src/lib/plot_xambi_tool.m deleted file mode 100755 index 508db28664..0000000000 --- a/gr-radar/src/lib/plot_xambi_tool.m +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env octave - -xambi_filename = argv{1}; -ppm_filename = argv{2}; - -a = read_xambi(xambi_filename); -plot_xambi_to_file(a, ppm_filename); - diff --git a/gr-radar/src/lib/sim-airplane.cc b/gr-radar/src/lib/sim-airplane.cc deleted file mode 100644 index 24f3f9d8d4..0000000000 --- a/gr-radar/src/lib/sim-airplane.cc +++ /dev/null @@ -1,299 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio 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 General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <iostream> -#include <string> -#include <fstream> -#include <unistd.h> -#include <stdlib.h> -#include <gr_complex.h> -#include <getopt.h> -#include <gr_misc.h> -#include <limits> -#include <gr_fxpt_nco.h> -#include "time_series.h" -#include "simulation.h" - -static const double C = 3e8; // sped of light, m/s - - -// ------------------------------------------------------------------------ - -class delay_line { - std::vector<gr_complex> d_z; - const int d_mask; - int d_newest; -public: - delay_line(unsigned int max_delay) - : d_z(gr_rounduppow2(max_delay)), d_mask(d_z.size()-1), d_newest(0) - { - } - - void - push_item(gr_complex x) - { - d_newest = (d_newest - 1) & d_mask; - d_z[d_newest] = x; - } - - gr_complex - ref_item(int delay) const - { - return d_z[(d_newest + delay) & d_mask]; - } -}; - -// ------------------------------------------------------------------------ - -class my_sim : public simulation -{ - FILE *d_output; - time_series &d_ref; - unsigned long long d_pos; // position in time series - delay_line d_z; - dyn_object *d_tx; // transmitter (not moving) - dyn_object *d_rx0; // receiver (not moving) - dyn_object *d_ac0; // aircraft (linear motion) - gr_fxpt_nco d_nco0; - - double d_baseline; // length of baseline in meters - double d_last_slant_range; - double d_range_bin; // meters/range_bin - float d_tx_lambda; // wavelength of tx signals in meters - float d_sample_rate; - float d_gain; // linear scale factor - -public: - my_sim(FILE *output, time_series &ref, double timestep, float sample_rate, - double tx_freq, double gain_db); - ~my_sim(); - - bool update(); - bool run(long long nsteps); - - bool write_output(gr_complex x) - { - return fwrite(&x, sizeof(x), 1, d_output) == 1; - } -}; - -my_sim::my_sim(FILE *output, time_series &ref, double timestep, - float sample_rate, double tx_freq, double gain_db) - : simulation(timestep), - d_output(output), d_ref(ref), d_pos(0), d_z(1024), - d_range_bin(C * timestep), d_tx_lambda(C/tx_freq), - d_sample_rate(sample_rate), d_gain(exp10(gain_db/10)) -{ - d_tx = new dyn_object(point(0,0), point(0,0), "Tx"); - d_rx0 = new dyn_object(point(45e3,0), point(0,0), "Rx0"); - - //float aircraft_speed = 135; // meters/sec (~ 300 miles/hr) - float aircraft_speed = 350; // meters/sec (~ 750 miles/hr) - float aircraft_angle = 250 * M_PI/180; - //point aircraft_pos = point(55e3, 20e3); - point aircraft_pos = point(55e3-5.54e3, 20e3-15.23e3); - d_ac0 = new dyn_object(aircraft_pos, - point(aircraft_speed * cos(aircraft_angle), - aircraft_speed * sin(aircraft_angle)), - "Ac0"); - add_object(d_tx); - add_object(d_rx0); - add_object(d_ac0); - - d_baseline = dyn_object::distance(*d_tx, *d_rx0); - d_last_slant_range = - dyn_object::distance(*d_tx, *d_ac0) + dyn_object::distance(*d_ac0, *d_rx0); -} - -my_sim::~my_sim() -{ -} - -bool -my_sim::update() -{ - // std::cout << *d_ac0 << std::endl; - - // compute slant_range and slant_range' - double slant_range = - dyn_object::distance(*d_tx, *d_ac0) + dyn_object::distance(*d_ac0, *d_rx0); // meters - double delta_slant_range = slant_range - d_last_slant_range; - d_last_slant_range = slant_range; - double deriv_slant_range_wrt_time = delta_slant_range / timestep(); // m/sec - - // fprintf(stdout, "%10.3f\t%10.3f\n", slant_range, deriv_slant_range_wrt_time); - - // grab new item from input and insert it into delay line - const gr_complex *in = (const gr_complex *) d_ref.seek(d_pos++, 1); - if (in == 0) - return false; - d_z.push_item(*in); - - // FIXME, may want to interpolate between two bins. - int int_delay = lrint((slant_range - d_baseline) / d_range_bin); - - gr_complex x = d_z.ref_item(int_delay); - - x = x * d_gain; // scale amplitude (this includes everything: RCS, antenna gain, losses, etc...) - - // compute doppler and apply it - float f_doppler = -deriv_slant_range_wrt_time / d_tx_lambda; - fprintf(stdout, "f_dop: %10.3f\n", f_doppler); - - d_nco0.set_freq(f_doppler / d_sample_rate); - gr_complex phasor(d_nco0.cos(), d_nco0.sin()); - // x = x * phasor; - d_nco0.step(); - - write_output(x); - - return simulation::update(); // run generic update -} - -bool -my_sim::run(long long nsteps) -{ - //fprintf(stdout, "<%12.2f, %12.2f>\n", d_ac0->pos().x(), d_ac0->pos().y()); - //std::cout << *d_ac0 << std::endl; - bool ok = simulation::run(nsteps); - //std::cout << *d_ac0 << std::endl; - //fprintf(stdout, "<%12.2f, %12.2f>\n", d_ac0->pos().x(), d_ac0->pos().y()); - return ok; -} - -// ------------------------------------------------------------------------ - -static void -usage(const char *argv0) -{ - const char *progname; - const char *t = std::strrchr(argv0, '/'); - if (t != 0) - progname = t + 1; - else - progname = argv0; - - fprintf(stderr, "usage: %s [options] ref_file\n", progname); - fprintf(stderr, " -o OUTPUT_FILENAME [default=sim.dat]\n"); - fprintf(stderr, " -n NSAMPLES_TO_PRODUCE [default=+inf]\n"); - fprintf(stderr, " -s NSAMPLES_TO_SKIP [default=0]\n"); - fprintf(stderr, " -g reflection gain in dB (should be <= 0) [default=0]\n"); - fprintf(stderr, " -f transmitter freq in Hz [default=100MHz]\n"); - fprintf(stderr, " -r sample rate in Hz [default=250kHz]\n"); -} - -int -main(int argc, char **argv) -{ - int ch; - const char *output_filename = "sim.dat"; - const char *ref_filename = 0; - long long int nsamples_to_skip = 0; - long long int nsamples_to_produce = std::numeric_limits<long long int>::max(); - double sample_rate = 250e3; - double gain_db = 0; - double tx_freq = 100e6; - - while ((ch = getopt(argc, argv, "o:s:n:g:f:")) != -1){ - switch (ch){ - case 'o': - output_filename = optarg; - break; - - case 's': - nsamples_to_skip = (long long) strtod(optarg, 0); - if (nsamples_to_skip < 0){ - usage(argv[0]); - fprintf(stderr, " nsamples_to_skip must be >= 0\n"); - exit(1); - } - break; - - case 'n': - nsamples_to_produce = (long long) strtod(optarg, 0); - if (nsamples_to_produce < 0){ - usage(argv[0]); - fprintf(stderr, " nsamples_to_produce must be >= 0\n"); - exit(1); - } - break; - - case 'g': - gain_db = strtod(optarg, 0); - break; - - case 'f': - tx_freq = strtod(optarg, 0); - break; - - case 'r': - sample_rate = strtod(optarg, 0); - break; - - case '?': - case 'h': - default: - usage(argv[0]); - exit(1); - } - } // while getopt - - if (argc - optind != 1){ - usage(argv[0]); - exit(1); - } - - ref_filename = argv[optind++]; - - double timestep = 1.0/sample_rate; - - - FILE *output = fopen(output_filename, "wb"); - if (output == 0){ - perror(output_filename); - exit(1); - } - - unsigned long long ref_starting_offset = 0; - ref_starting_offset += nsamples_to_skip; - - try { - time_series ref(sizeof(gr_complex), ref_filename, ref_starting_offset, 0); - - my_sim simulator(output, ref, timestep, sample_rate, tx_freq, gain_db); - simulator.run(nsamples_to_produce); - } - catch (std::string &s){ - std::cerr << s << std::endl; - exit(1); - } - - return 0; -} - diff --git a/gr-radar/src/lib/sim-airplane2.cc b/gr-radar/src/lib/sim-airplane2.cc deleted file mode 100644 index fd140fb40c..0000000000 --- a/gr-radar/src/lib/sim-airplane2.cc +++ /dev/null @@ -1,375 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio 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 General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef _GNU_SOURCE -#define _GNU_SOURCE -#endif - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <iostream> -#include <string> -#include <fstream> -#include <unistd.h> -#include <stdlib.h> -#include <gr_complex.h> -#include <getopt.h> -#include <gr_misc.h> -#include <limits> -#include <gr_fxpt_nco.h> -#include "time_series.h" -#include "simulation.h" - -static const double C = 3e8; // sped of light, m/s - - -// ------------------------------------------------------------------------ - -class delay_line { - std::vector<gr_complex> d_z; - const int d_mask; - int d_newest; -public: - delay_line(unsigned int max_delay) - : d_z(gr_rounduppow2(max_delay)), d_mask(d_z.size()-1), d_newest(0) - { - } - - void - push_item(gr_complex x) - { - d_newest = (d_newest - 1) & d_mask; - d_z[d_newest] = x; - } - - gr_complex - ref_item(int delay) const - { - return d_z[(d_newest + delay) & d_mask]; - } -}; - -// ------------------------------------------------------------------------ - -class aux_state { -public: - dyn_object *d_obj; - double d_last_slant_range; - gr_fxpt_nco d_nco; - - aux_state(dyn_object *obj) : d_obj(obj) {} -}; - -// ------------------------------------------------------------------------ - -class my_sim : public simulation -{ - FILE *d_output; - time_series &d_ref; - unsigned long long d_pos; // position in time series - delay_line d_z; - dyn_object *d_tx; // transmitter (not moving) - dyn_object *d_rx0; // receiver (not moving) - std::vector<aux_state*> d_target; - - double d_baseline; // length of baseline in meters - double d_range_bin; // meters/range_bin - float d_tx_lambda; // wavelength of tx signals in meters - float d_sample_rate; - float d_gain; // linear scale factor - - void adjust_for_start_time(double start_time); - - bool write_output(gr_complex x) - { - return fwrite(&x, sizeof(x), 1, d_output) == 1; - } - -public: - my_sim(FILE *output, time_series &ref, double timestep, float sample_rate, - double start_time, double tx_freq, double gain_db); - ~my_sim(); - - bool update(); - bool run(long long nsteps); -}; - - -my_sim::my_sim(FILE *output, time_series &ref, double timestep, - float sample_rate, double start_time, - double tx_freq, double gain_db) - : simulation(timestep), - d_output(output), d_ref(ref), d_pos(0), d_z(1024), - d_range_bin(C * timestep), d_tx_lambda(C/tx_freq), - d_sample_rate(sample_rate), d_gain(exp10(gain_db/10)) -{ - d_tx = new dyn_object(point(0,0), point(0,0), "Tx"); - d_rx0 = new dyn_object(point(45e3,0), point(0,0), "Rx0"); - - add_object(d_tx); - add_object(d_rx0); - d_baseline = dyn_object::distance(*d_tx, *d_rx0); - - { - // add targets - float aircraft_speed; - float aircraft_angle; - point aircraft_pos; - dyn_object *ac; - - // target 1 - aircraft_speed = 135; // m/s - aircraft_angle = 240 * M_PI/180; - aircraft_pos = point(55e3, 20e3); - - ac = new dyn_object(aircraft_pos, - point(aircraft_speed * cos(aircraft_angle), - aircraft_speed * sin(aircraft_angle)), - "Ac0"); - add_object(ac); - d_target.push_back(new aux_state(ac)); - - // target 2 - aircraft_speed = 350; // m/s - aircraft_angle = 0 * M_PI/180; - aircraft_pos = point(-20e3, 60e3); - - ac = new dyn_object(aircraft_pos, - point(aircraft_speed * cos(aircraft_angle), - aircraft_speed * sin(aircraft_angle)), - "Ac1"); - add_object(ac); - d_target.push_back(new aux_state(ac)); - } - - adjust_for_start_time(start_time); - - for (unsigned i = 0; i < d_target.size(); i++) - d_target[i]->d_last_slant_range = - (dyn_object::distance(*d_tx, *d_target[i]->d_obj) - + dyn_object::distance(*d_target[i]->d_obj, *d_rx0)); - -} - -my_sim::~my_sim() -{ -} - -void -my_sim::adjust_for_start_time(double start_time) -{ - for (unsigned i = 0; i < d_obj.size(); i++){ - // Adjust initial starting positions depending on simulation - // start time. FIXME Assumes velocity is constant - point p = d_obj[i]->pos(); - point v = d_obj[i]->vel(); - p.set_x(p.x() + v.x() * start_time); - p.set_y(p.y() + v.y() * start_time); - d_obj[i]->set_pos(p); - } -} - -bool -my_sim::update() -{ - // std::cout << *d_ac0 << std::endl; - - // grab new item from input and insert it into delay line - const gr_complex *in = (const gr_complex *) d_ref.seek(d_pos++, 1); - if (in == 0) - return false; - d_z.push_item(*in); - - gr_complex s = 0; // output sample - // FIXME ought to add in attenuated direct path input - - - // for each target, compute slant_range and slant_range' - - for (unsigned i = 0; i < d_target.size(); i++){ - aux_state *t = d_target[i]; - - double slant_range = - (dyn_object::distance(*d_tx, *t->d_obj) - + dyn_object::distance(*t->d_obj, *d_rx0)); // meters - - double delta_slant_range = slant_range - t->d_last_slant_range; - t->d_last_slant_range = slant_range; - double deriv_slant_range_wrt_time = delta_slant_range / timestep(); // m/sec - - //fprintf(stdout, "%10.3f\t%10.3f\n", slant_range, deriv_slant_range_wrt_time); - - // FIXME, may want to interpolate between two bins. - int int_delay = lrint((slant_range - d_baseline) / d_range_bin); - - gr_complex x = d_z.ref_item(int_delay); - - // scale amplitude (this includes everything: RCS, antenna gain, losses, etc...) - x = x * d_gain; - - if (1){ - // compute doppler and apply it - float f_doppler = -deriv_slant_range_wrt_time / d_tx_lambda; - - t->d_nco.set_freq(f_doppler / d_sample_rate); - gr_complex phasor(t->d_nco.cos(), t->d_nco.sin()); - x = x * phasor; - t->d_nco.step(); - } - - s += x; // add in this target's contribution - } - - write_output(s); - - return simulation::update(); // run generic update -} - -bool -my_sim::run(long long nsteps) -{ - //fprintf(stdout, "<%12.2f, %12.2f>\n", d_ac0->pos().x(), d_ac0->pos().y()); - //std::cout << *d_ac0 << std::endl; - bool ok = simulation::run(nsteps); - //std::cout << *d_ac0 << std::endl; - //fprintf(stdout, "<%12.2f, %12.2f>\n", d_ac0->pos().x(), d_ac0->pos().y()); - return ok; -} - -// ------------------------------------------------------------------------ - -static void -usage(const char *argv0) -{ - const char *progname; - const char *t = std::strrchr(argv0, '/'); - if (t != 0) - progname = t + 1; - else - progname = argv0; - - fprintf(stderr, "usage: %s [options] ref_file\n", progname); - fprintf(stderr, " -o OUTPUT_FILENAME [default=sim.dat]\n"); - fprintf(stderr, " -n NSAMPLES_TO_PRODUCE [default=+inf]\n"); - fprintf(stderr, " -s NSAMPLES_TO_SKIP [default=0]\n"); - fprintf(stderr, " -g reflection gain in dB (should be <= 0) [default=0]\n"); - fprintf(stderr, " -f transmitter freq in Hz [default=100MHz]\n"); - fprintf(stderr, " -r sample rate in Hz [default=250kHz]\n"); - fprintf(stderr, " -S simulation start time in seconds [default=0]\n"); -} - -int -main(int argc, char **argv) -{ - int ch; - const char *output_filename = "sim.dat"; - const char *ref_filename = 0; - long long int nsamples_to_skip = 0; - long long int nsamples_to_produce = std::numeric_limits<long long int>::max(); - double sample_rate = 250e3; - double gain_db = 0; - double tx_freq = 100e6; - double start_time = 0; - - while ((ch = getopt(argc, argv, "o:s:n:g:f:S:")) != -1){ - switch (ch){ - case 'o': - output_filename = optarg; - break; - - case 's': - nsamples_to_skip = (long long) strtod(optarg, 0); - if (nsamples_to_skip < 0){ - usage(argv[0]); - fprintf(stderr, " nsamples_to_skip must be >= 0\n"); - exit(1); - } - break; - - case 'n': - nsamples_to_produce = (long long) strtod(optarg, 0); - if (nsamples_to_produce < 0){ - usage(argv[0]); - fprintf(stderr, " nsamples_to_produce must be >= 0\n"); - exit(1); - } - break; - - case 'g': - gain_db = strtod(optarg, 0); - break; - - case 'f': - tx_freq = strtod(optarg, 0); - break; - - case 'r': - sample_rate = strtod(optarg, 0); - break; - - case 'S': - start_time = strtod(optarg, 0); - break; - - case '?': - case 'h': - default: - usage(argv[0]); - exit(1); - } - } // while getopt - - if (argc - optind != 1){ - usage(argv[0]); - exit(1); - } - - ref_filename = argv[optind++]; - - double timestep = 1.0/sample_rate; - - - FILE *output = fopen(output_filename, "wb"); - if (output == 0){ - perror(output_filename); - exit(1); - } - - unsigned long long ref_starting_offset = 0; - ref_starting_offset += nsamples_to_skip; - - try { - time_series ref(sizeof(gr_complex), ref_filename, ref_starting_offset, 0); - - my_sim simulator(output, ref, timestep, sample_rate, start_time, - tx_freq, gain_db); - simulator.run(nsamples_to_produce); - } - catch (std::string &s){ - std::cerr << s << std::endl; - exit(1); - } - - return 0; -} - diff --git a/gr-radar/src/lib/simulation.cc b/gr-radar/src/lib/simulation.cc deleted file mode 100644 index f880d79d82..0000000000 --- a/gr-radar/src/lib/simulation.cc +++ /dev/null @@ -1,89 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio 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 General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "simulation.h" - -bool -dyn_object::update(double delta_t) -{ - double new_x = pos().x() + delta_t * vel().x(); - double new_y = pos().y() + delta_t * vel().y(); - set_pos(point(new_x, new_y)); - return true; -} - -simulation::~simulation() -{ - for (unsigned i = 0; i < d_obj.size(); i++){ - delete d_obj[i]; - d_obj[i] = 0; - } -} - -bool -simulation::update() -{ - bool ok = true; - for (unsigned i = 0; i < d_obj.size(); i++){ - ok &= d_obj[i]->update(d_timestep); - } - d_now += d_timestep; - return ok; -} - -bool -simulation::run(long long nsteps) -{ - for (long long i = 0; i < nsteps; i++) - if (!update()) - return false; - - return true; -} - -void -simulation::add_object(dyn_object *obj) -{ - d_obj.push_back(obj); -} - -// ---------------------------------------------------------------- - -std::ostream& operator<<(std::ostream& out, const dyn_object& o) -{ - out << "<" << o.name() - << " pos: " << o.pos() - << " vel: " << o.vel() - << ">"; - return out; -} - -std::ostream& operator<<(std::ostream& out, const point& p) -{ - out << "(" << p.x() << ", " << p.y() << ")"; - return out; -} - diff --git a/gr-radar/src/lib/simulation.h b/gr-radar/src/lib/simulation.h deleted file mode 100644 index ae06e33be2..0000000000 --- a/gr-radar/src/lib/simulation.h +++ /dev/null @@ -1,116 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio 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 General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifndef INCLUDED_SIMULATION_H -#define INCLUDED_SIMULATION_H - -#include <string> -#include <cmath> -#include <vector> -#include <iostream> - - -class point { - double d_x, d_y; -public: - point(double x = 0, double y = 0) : d_x(x), d_y(y) {} - - double x() const { return d_x; } - double y() const { return d_y; } - - void set_x(double x) { d_x = x; } - void set_y(double y) { d_y = y; } - - static point - add(const point &p1, const point &p2) - { - return point(p1.x() + p2.x(), - p1.y() + p2.y()); - } - - static point - sub(const point &p1, const point &p2) - { - return point(p1.x() - p2.x(), p1.y() - p2.y()); - } - - static double - distance(const point &p1, const point &p2) - { - point d = point::sub(p1, p2); - return std::sqrt(d.x()*d.x() + d.y()*d.y()); - } - -}; - - -class dyn_object { - point d_pos; - point d_vel; - std::string d_name; -public: - dyn_object(point pos=point(0,0), point vel=point(0,0), const std::string name="") - : d_pos(pos), d_vel(vel), d_name(name) {} - - virtual ~dyn_object() {} - - point pos() const { return d_pos; } - point vel() const { return d_vel; } - std::string name() const { return d_name; } - - void set_pos(point pos) { d_pos = pos; } - void set_vel(point vel) { d_vel = vel; } - - virtual bool update(double delta_t); - - static double - distance(const dyn_object &o1, const dyn_object &o2) - { - return point::distance(o1.pos(), o2.pos()); - } - -}; - - -class simulation { - double d_timestep; - double d_now; -protected: - std::vector<dyn_object *> d_obj; - -public: - simulation(double timestep = 1.0, double now = 0.0) - : d_timestep(timestep), d_now(now) {} - virtual ~simulation(); - virtual bool update(); - virtual bool run(long long nsteps); - - void add_object(dyn_object *obj); - double now() const { return d_now; } - double timestep() const { return d_timestep; } -}; - -std::ostream& operator<<(std::ostream& out, const dyn_object& o); -std::ostream& operator<<(std::ostream& out, const point& p); - -#endif /* INCLUDED_SIMULATION_H */ - diff --git a/gr-radar/src/lib/time_series.cc b/gr-radar/src/lib/time_series.cc deleted file mode 100644 index 62740b0ac4..0000000000 --- a/gr-radar/src/lib/time_series.cc +++ /dev/null @@ -1,100 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio 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 General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "time_series.h" -#include <sys/mman.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <unistd.h> -#include <iostream> - -#ifndef O_LARGEFILE -#define O_LARGEFILE 0 -#endif - - -time_series::time_series(size_t itemsize, const std::string filename, - unsigned long long starting_offset, - long long nsamples_to_process) - : d_itemsize(itemsize), d_filename(filename), d_fd(-1), - d_start(starting_offset), d_buffer(0) -{ - if ((d_fd = open(d_filename.c_str(), O_RDONLY | O_LARGEFILE, 0660)) == -1){ - perror(d_filename.c_str()); - throw std::string("open failed: ") + d_filename; - } - - struct stat statbuf; - if (fstat(d_fd, &statbuf) == -1){ - perror(d_filename.c_str()); - throw std::string("fstat failed: ") + d_filename; - } - d_filesize = statbuf.st_size; - d_limit = d_filesize / d_itemsize; - - if (d_start > d_limit){ - std::string s = std::string("d_start > filesize: ") + d_filename; - std::cerr << s - << " d_start " << d_start - << " d_limit " << d_limit << std::endl; - throw s; - } - - if (nsamples_to_process > 0) - if ((d_start + nsamples_to_process) < d_limit) - d_limit = d_start + nsamples_to_process; - - d_buffer = mmap(0, d_filesize, PROT_READ, MAP_SHARED, d_fd, 0); - if (d_buffer == MAP_FAILED){ - perror("mmap"); - throw std::string("mmap failed: ") + d_filename; - } -} - -time_series::~time_series() -{ - munmap(d_buffer, d_filesize); - close(d_fd); -} - -const void * -time_series::seek(unsigned long long pos, unsigned long long blocksize) const -{ - if ((d_start + pos + blocksize) >= d_limit) - return 0; - - return (const void *)((char *)d_buffer + ((d_start + pos) * d_itemsize)); -} - -long long -time_series::nsamples_available(unsigned long long pos) const -{ - if ((d_start + pos) >= d_limit) - return 0; - - return d_limit - (d_start + pos); -} diff --git a/gr-radar/src/lib/time_series.h b/gr-radar/src/lib/time_series.h deleted file mode 100644 index b1b45f2816..0000000000 --- a/gr-radar/src/lib/time_series.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2005 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio 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 General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ -#ifndef INCLUDED_TIME_SERIES_H -#define INCLUDED_TIME_SERIES_H - -#include <string> - -/*! - * \brief Memory mapped input for complex time series data - * - * Inspired by "iqts" by John Sahr, Univ of Washington - */ - -class time_series { - size_t d_itemsize; // user specified item size - std::string d_filename; - int d_fd; // file descriptor - unsigned long long d_filesize; // in bytes - unsigned long long d_start; // in items - unsigned long long d_limit; // in items - void *d_buffer; // points to base of file - -public: - /*! - * \brief Create read-only mapped file accessor. - * \param item_size size of item in bytes - * \param filename name of file to open - * \param starting_offset offset in file in item_size units at which to start - * \param nsamples_to_process maximum number of samples to map in starting at \p start. -1 implies no limit. - * - * \throws string on error opening file, etc. - */ - time_series(size_t item_size, const std::string filename, - unsigned long long starting_offset=0, - long long nsamples_to_process=-1); - ~time_series(); - - /*! - * \brief Return a pointer to a buffer of data at file offset pos. - * - * \param pos offset from beginning of file in itemsize units. - * \param blocksize minimum size of returned buffer in itemsize units. - * - * "Seek" to pos in file and return a pointer to the data at that - * location. The returned pointer will have at least blocksize valid - * elements. Return 0 if pos is out of bounds, or if there isn't - * at least blocksize units available in the file. - */ - const void *seek(unsigned long long pos, unsigned long long blocksize) const; - - long long nsamples_available(unsigned long long pos) const; -}; - -#endif /* INCLUDED_TIME_SERIES_H */ diff --git a/gr-radar/src/lib/xambi.cc b/gr-radar/src/lib/xambi.cc deleted file mode 100644 index c7b02a8c1a..0000000000 --- a/gr-radar/src/lib/xambi.cc +++ /dev/null @@ -1,259 +0,0 @@ -/* -*- c++ -*- */ -/* - * Copyright 2006 Free Software Foundation, Inc. - * - * This file is part of GNU Radio - * - * GNU Radio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * GNU Radio 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 General Public License - * along with GNU Radio; see the file COPYING. If not, write to - * the Free Software Foundation, Inc., 51 Franklin Street, - * Boston, MA 02110-1301, USA. - */ - -#include <iostream> -#include <string> -#include <fstream> -#include <unistd.h> - -#include <gr_complex.h> -#include <gri_fft.h> -#include "time_series.h" - - -using namespace std; - -/*! - * \file xambi.cc driver for computation of cross ambiguity - * - * Based on ideas liberally lifted from a version of xambi.cc - * obtained from John Sahr, that identified these people as authors: - * John Sahr jdsahr@u.washington.edu - * Frank Lind flind@haystack.mit.edu - * Chucai "Cliff" Zhou - * Melissa Meyer mgmeyer@ee.washington.edu - * - * Extensively revised since then. - */ - -static int default_decimation = 40; -static int default_fftsize = 256; -static int default_naverages = 1000000; // infinite - -/// usage for the xambi program - -static void usage(char *argv0) -{ - cerr << "usage: xambi [opts] scatterfile" << endl; - cerr << " where [opts] are" << endl; - cerr << " -x reffilename : Required" << endl; - cerr << " -o outputfilename[=xambi.out] : create or overwrite" << endl; - cerr << " -a averages[=100000] : restart accumulation; 100000 = infinite" << endl; - cerr << " -d decimationfactor[=40]" << endl; - cerr << " -f fftsize[=256]" << endl; - cerr << " -r range[=0] : first range" << endl; - cerr << " -n nranges[=1] : range count" << endl; - cerr << " -S start[=0] : starting offset in file" << endl; - cerr << " -N nsamples[=inf] : # of samples to process" << endl; - cerr << " -v : increment verbosity" << endl; - cerr << " -h : be helpful" << endl; - cerr << endl; - cerr << "The reffile and scatterfile are native-endian binary complex<float>" << endl; - cerr << "and must be sampled at the same rate." << endl; - - exit(0); -} - -gr_complex -complex_dot_product(const gr_complex *xx, const gr_complex *yy, int nterms) -{ - gr_complex sum(0); - - for (int i = 0; i < nterms; i++) - sum += xx[i] * yy[i]; // FIXME? conj(yy[i]) - - return sum; -} - - -/// the main driver - -int -main(int argc, char *argv[]) -{ - char *ref_fname = 0; //< holds name of reference signal source - char *out_fname = 0; //< holds name of processed output - int decimation = default_decimation; - int range = 0; //< first range of range block - int nranges = 1; //< number of ranges of range block - int fftsize = default_fftsize; - int naverages = default_naverages; - int verbosity = 0; - int blocksize = 0; - int offset = 0; - unsigned long long starting_file_offset = 0; - unsigned long long nsamples_to_process = (unsigned long long) -1; - - int f; - - const gr_complex *x, *y; - const gr_complex *xx, *yy; - - int c; // used to process the command line - int r; // an index to count over ranges - int i; // an index to count through the time series - int a; - - while((c = getopt(argc,argv,"a:o:x:y:r:d:f:n:hvS:N:")) != EOF) { - switch(c) { - case 'x': ref_fname = optarg; break; - case 'o': out_fname = optarg; break; - case 'a': naverages = atoi(optarg); break; - case 'd': decimation = atoi(optarg); break; - case 'r': range = atoi(optarg); break; - case 'n': nranges = atoi(optarg); break; - case 'f': fftsize = atoi(optarg); break; - case 'S': starting_file_offset = strtoll(optarg, 0, 0); break; - case 'N': nsamples_to_process = strtoll(optarg, 0, 0); break; - case 'v': verbosity++; break; - case 'h': usage(argv[0]); break; - default: usage(argv[0]); break; - } - } - - // Wrapper for FFTW 1d forward FFT. N.B. output is not scaled by 1/fftsize - gri_fft_complex fft(fftsize, true); - gr_complex *fft_input = fft.get_inbuf(); - gr_complex *fft_output = fft.get_outbuf(); - - if(range < 0) { - cerr << "you specified -r " << range << "; must be non-negative (exit)" << endl; - exit(1); - } - - if(nranges < 1) { - cerr << "you specified -n " << nranges << "; must be positive (exit)" << endl; - exit(1); - } - - if(decimation < 1) { - cerr << "you specified -d " << decimation << "; must be positive (exit)" << endl; - exit(1); - } - - if(naverages < 1) { - cerr << "you specified -a " << naverages << "; must be positive (exit)" << endl; - exit(1); - } - - if(ref_fname == 0) { - cerr << "you must specify a reference signal with the -x option" << endl; - usage(argv[0]); - } - - if (optind >= argc) { - cerr << "you must specify a scattering signal after all other options" << endl; - usage(argv[0]); - } - - time_series X(sizeof(gr_complex), ref_fname, - starting_file_offset, nsamples_to_process); - - time_series Y(sizeof(gr_complex), argv[optind], - starting_file_offset, nsamples_to_process); // add more for interferometry ... - - float psd[fftsize*nranges]; - - if(out_fname == 0) { - char fname[200]; - snprintf(fname, sizeof(fname), "%s.out", "xambi"); - out_fname = fname; - } - - ofstream Z(out_fname); - - blocksize = fftsize*decimation + nranges; - offset = 0; - a = 0; - - // the fftsize is squared because we're using norm, not abs, - // when computing the psd - float scale_factor = 1.0 / (fftsize * fftsize); - - for(i = 0; i < nranges*fftsize; i++) - psd[i] = 0.0; - - - while(1){ // loop over data until exhausted. - if(verbosity > 1) { - cerr << " " << a; // write out the number of completed averages - cerr.flush(); - } - - x = (const gr_complex *) X.seek(offset, blocksize); - y = (const gr_complex *) Y.seek(offset + range, blocksize); - - if(!x || !y) // ran out of data; stop integrating - break; - - for(r = 0; r < nranges; r++) { // For Each Range ... - xx = x; - yy = y + r; - - for(f = 0; f < fftsize; f++) { // and for each Doppler bin ... - - // cross correlate and do a boxcar decimation - - fft_input[f] = complex_dot_product(xx, yy, decimation); - xx += decimation; - yy += decimation; - } - - fft.execute(); // input: fft_input; output: fft_output - - for(f = 0; f < fftsize; f++) { - psd[r*fftsize + f] += norm(fft_output[f]); - } - } // end range - - a++; - offset += fftsize * decimation; - - if(a >= naverages) { - if(verbosity > 0) - cerr << " dumping " << endl; - - for(i = 0; i < nranges*fftsize; i++) // normalize - psd[i] *= scale_factor; - - Z.write((const char *) psd, nranges*fftsize*sizeof(float)); - - for(i = 0; i < nranges*fftsize; i++) - psd[i] = 0.0; - - a = 0; - } - } - - if(verbosity > 1) - printf("\n"); - - if(a > 0) { - for(i = 0; i < nranges*fftsize; i++) // normalize - psd[i] *= scale_factor; - - Z.write((const char *) psd, nranges*fftsize*sizeof(float)); - } - - return 0; -} - diff --git a/gr-radar/src/python/Makefile.am b/gr-radar/src/python/Makefile.am deleted file mode 100644 index 1830010f18..0000000000 --- a/gr-radar/src/python/Makefile.am +++ /dev/null @@ -1,33 +0,0 @@ -# -# Copyright 2004 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio 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 General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -include $(top_srcdir)/Makefile.common - -EXTRA_DIST = run_tests.in - - -TESTS = \ - run_tests - - -noinst_PYTHON = \ - qa_nothing.py \ - usrp_rx_radar.py diff --git a/gr-radar/src/python/complex_to_short.py b/gr-radar/src/python/complex_to_short.py deleted file mode 100755 index 9c229d857b..0000000000 --- a/gr-radar/src/python/complex_to_short.py +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr, gru, eng_notation, optfir -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import os.path -import re - -class my_graph(gr.flow_graph): - def __init__(self): - gr.flow_graph.__init__(self) - - usage="%prog: [options] input_file output_file" - parser = OptionParser (option_class=eng_option, usage=usage) - (options, args) = parser.parse_args() - if len(args) != 2: - parser.print_help() - raise SystemExit, 1 - - input_filename = args[0] - output_filename = args[1] - - inf = gr.file_source(gr.sizeof_gr_complex, input_filename) - c2s = gr.complex_to_interleaved_short() - outf = gr.file_sink(gr.sizeof_short, output_filename) - self.connect(inf, c2s, outf) - - -if __name__ == '__main__': - try: - my_graph().run() - except KeyboardInterrupt: - pass diff --git a/gr-radar/src/python/fm_demod_file.py b/gr-radar/src/python/fm_demod_file.py deleted file mode 100755 index 64ec3b2a28..0000000000 --- a/gr-radar/src/python/fm_demod_file.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2005 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio 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 General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -""" -Demod FM signal in data collected for radar. -Input samples are complex baseband, 250kS/sec. -""" - -from gnuradio import gr, gru, blks, eng_notation -from gnuradio import audio -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import sys -import math - - -class my_graph(gr.flow_graph): - def __init__(self, input_filename, repeat): - gr.flow_graph.__init__(self) - - baseband_rate = 250e3 - audio_decim = 8 - audio_rate = int(baseband_rate // audio_decim) # output is at 31250 S/s - - src = gr.file_source(gr.sizeof_gr_complex, input_filename, repeat) - guts = blks.wfm_rcv(self, baseband_rate, audio_decim) - sink = audio.sink(audio_rate, "plughw:0,0") - self.connect(src, guts, sink) - -def main (): - usage = "usage: %prog [options] filename" - parser = OptionParser (option_class=eng_option, usage=usage) - parser.add_option ("-r", "--repeat", action="store_true", default=False) - (options, args) = parser.parse_args () - - if len (args) != 1: - parser.print_help () - sys.exit (1) - - try: - my_graph(args[0], options.repeat).run() - except KeyboardInterrupt: - pass - - -if __name__ == '__main__': - main () diff --git a/gr-radar/src/python/gen_fm_signal.py b/gr-radar/src/python/gen_fm_signal.py deleted file mode 100755 index dc4844bba8..0000000000 --- a/gr-radar/src/python/gen_fm_signal.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2005 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio 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 General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -from gnuradio import gr, gru, blks, eng_notation -from gnuradio import audio -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import sys -import math - - -class my_graph(gr.flow_graph): - def __init__(self, output_filename, tx_gain, nsamples): - gr.flow_graph.__init__(self) - - audio_rate = 31250 - baseband_rate = 250e3 - - src = gr.noise_source_f(gr.GR_GAUSSIAN, 1.0) - #src = gr.noise_source_f(gr.GR_GAUSSIAN, 0.5) - guts = blks.wfm_tx(self, audio_rate, baseband_rate) - amp = gr.multiply_const_cc(tx_gain) - head = gr.head(gr.sizeof_gr_complex, nsamples) - sink = gr.file_sink(gr.sizeof_gr_complex, output_filename) - self.connect(src, guts, amp, head, sink) - -def main (): - usage = "usage: %prog [options] output_filename" - parser = OptionParser (option_class=eng_option, usage=usage) - parser.add_option("-N", "--nsamples", type="eng_float", default=250000, - help="specify number of output samples to generate[=250000]") - parser.add_option("-g", "--tx-gain", type="eng_float", default=1.0, - help="specify transmitter gain[=1]") - (options, args) = parser.parse_args () - - if len (args) != 1: - parser.print_help () - sys.exit (1) - - try: - my_graph(args[0], options.tx_gain, int(options.nsamples)).run() - except KeyboardInterrupt: - pass - - -if __name__ == '__main__': - main () diff --git a/gr-radar/src/python/gen_random_signal.py b/gr-radar/src/python/gen_random_signal.py deleted file mode 100755 index 7f9fcad403..0000000000 --- a/gr-radar/src/python/gen_random_signal.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python -# -# Copyright 2005 Free Software Foundation, Inc. -# -# This file is part of GNU Radio -# -# GNU Radio is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# GNU Radio 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 General Public License -# along with GNU Radio; see the file COPYING. If not, write to -# the Free Software Foundation, Inc., 51 Franklin Street, -# Boston, MA 02110-1301, USA. -# - -from gnuradio import gr, gru, blks, eng_notation -from gnuradio import audio -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import sys -import math - - -class my_graph(gr.flow_graph): - def __init__(self, output_filename, tx_gain, nsamples): - gr.flow_graph.__init__(self) - - audio_rate = 31250 - baseband_rate = 250e3 - - src = gr.noise_source_c(gr.GR_GAUSSIAN, 1.0) - #src = gr.noise_source_f(gr.GR_GAUSSIAN, 0.5) - #guts = blks.wfm_tx(self, audio_rate, baseband_rate) - amp = gr.multiply_const_cc(tx_gain) - head = gr.head(gr.sizeof_gr_complex, nsamples) - sink = gr.file_sink(gr.sizeof_gr_complex, output_filename) - self.connect(src, amp, head, sink) - -def main (): - usage = "usage: %prog [options] output_filename" - parser = OptionParser (option_class=eng_option, usage=usage) - parser.add_option("-N", "--nsamples", type="eng_float", default=250000, - help="specify number of output samples to generate[=250000]") - parser.add_option("-g", "--tx-gain", type="eng_float", default=1.0, - help="specify transmitter gain[=1]") - (options, args) = parser.parse_args () - - if len (args) != 1: - parser.print_help () - sys.exit (1) - - try: - my_graph(args[0], options.tx_gain, int(options.nsamples)).run() - except KeyboardInterrupt: - pass - - -if __name__ == '__main__': - main () diff --git a/gr-radar/src/python/qa_nothing.py b/gr-radar/src/python/qa_nothing.py deleted file mode 100755 index e69de29bb2..0000000000 --- a/gr-radar/src/python/qa_nothing.py +++ /dev/null diff --git a/gr-radar/src/python/run_tests.in b/gr-radar/src/python/run_tests.in deleted file mode 100644 index 0c4ee6a307..0000000000 --- a/gr-radar/src/python/run_tests.in +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -# 1st parameter is absolute path to component source directory -# 2nd parameter is absolute path to component build directory -# 3rd parameter is path to Python QA directory - -@top_builddir@/run_tests.sh \ - @abs_top_srcdir@/gr-radar \ - @abs_top_builddir@/gr-radar \ - @srcdir@ diff --git a/gr-radar/src/python/signal_levels.py b/gr-radar/src/python/signal_levels.py deleted file mode 100755 index f21f7f8bc9..0000000000 --- a/gr-radar/src/python/signal_levels.py +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/env python - -import sys -from math import pi, log10 -from gnuradio.eng_notation import num_to_str - -def power_density(transmitted_power, distance): - """ - Estimate power density in Watts/meter. - Assume isotropic radiator (spherical radiation pattern). - - @param transmitted_power: Watts - @param distance: distance from transmitter in meters - - """ - return transmitted_power / (4 * pi * distance * distance) - - -def ratio_of_target_return_to_direct(Rl, Rt, Rr, rcs): - """ - Estimate relative strength of signal levels for direct and reflected - path in bistatic radar. Assume all antenna factors are constant, - and hence 'wash out'. Also assume that the antennas are isotropic - radiators (spherical radiation pattern). - - @param Rl: distance between Tx and Rx in meters - @param Rt: distance between Tx and target in meters - @param Rr: distance between Rx and target in meters - @param rcs: radar cross section in meters^2 - - @returns: ratio of reflected to direct in decibels - """ - Tx_power = 1 - direct_path_power_density = power_density(Tx_power, Rl) - power_at_target = power_density(Tx_power, Rt) * rcs - reflected_path_power_density = power_density(power_at_target, Rr) - return 10*log10(reflected_path_power_density / direct_path_power_density) - - -def print_header(f): - f.write(" Rl Rt Rr rcs dB\n") - f.write("-----------------------------------------\n") - -def print_result(f, Rl, Rt, Rr, rcs, dB): - f.write("%6sm %6sm %6sm %6s %6s\n" % tuple([num_to_str(x) for x in [Rl, Rt, Rr, rcs, dB]])) - -def calc_print(f, Rl, Rt, Rr, rcs): - print_result(f, Rl, Rt, Rr, rcs, ratio_of_target_return_to_direct(Rl, Rt, Rr, rcs)) - -def main(): - f = sys.stdout - print_header(f) - calc_print(f, 40e3, 100e3, 100e3, 10.0) - calc_print(f, 40e3, 80e3, 80e3, 10.0) - calc_print(f, 40e3, 40e3, 40e3, 10.0) - calc_print(f, 40e3, 40e3, 8e3, 10.0) - calc_print(f, 40e3, 60e3, 20e3, 10.0) - calc_print(f, 40e3, 20e3, 60e3, 10.0) - - -if __name__ == '__main__': - main() diff --git a/gr-radar/src/python/split_files.py b/gr-radar/src/python/split_files.py deleted file mode 100755 index a604c07793..0000000000 --- a/gr-radar/src/python/split_files.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr, gru, eng_notation, optfir -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import os.path -import re - -plot = None - -def split_filename(src_filename): - s = os.path.splitext(src_filename)[0] # drop extension - date, time, freq, dec, nchan = s.split('-') - return (date, time, freq, int(dec), int(nchan)) - - -def make_filename(date, time, freq, n, short_output): - if short_output: - return '-'.join((date, time, freq)) + '.s%02d' % (n,) - else: - return '-'.join((date, time, freq)) + '.c%02d' % (n,) - -class my_graph(gr.flow_graph): - - def __init__(self, src_filename, short_output): - """ - Deinterleave file, filter and decimate by 4, and write out - a separate file for each input channel. - - The input file is the raw output of nchannels of short USRP data. - That is, they are interleaved short I&Q for each channel. - """ - global plot - - gr.flow_graph.__init__(self) - - decim = 4 - - (date, time, freq, dec, nchan) = split_filename(src_filename) - - src = gr.file_source(gr.sizeof_short, src_filename) - - # convert stream of interleaved shorts to a stream of complex - s2c = gr.interleaved_short_to_complex() - - # deinterleave complexes into separate streams - deint = gr.deinterleave(gr.sizeof_gr_complex) - - self.connect(src, s2c, deint) - - taps = optfir.low_pass(1, # gain - 1, # sampling rate - 0.100, # passband cutoff - 0.125, # stopband cutoff - 0.01, # passband ripple (dB) - 70) # stopband atten (dB) - - print "len(taps) =", len(taps) - - #plot = gru.gnuplot_freqz(gru.freqz(taps, 1), 1) - #raw_input('Press Enter to continue: ') - - for n in xrange(nchan): - #df = gr.fft_filter_ccc(decim, taps) - df = gr.fir_filter_ccf(decim, taps) - self.connect((deint, n), df) - dst_filename = make_filename(date, time, freq, n, short_output) - if short_output: - c2s = gr.complex_to_interleaved_short() - dst = gr.file_sink(gr.sizeof_short, dst_filename) - self.connect(df, c2s, dst) - else: - dst = gr.file_sink(gr.sizeof_gr_complex, dst_filename) - self.connect(df, dst) - - -def split_1_file(filename, short_output): - my_graph(filename, short_output).run() - - -def main(): - usage="%prog: [options] file_to_split..." - parser = OptionParser (option_class=eng_option, usage=usage) - parser.add_option("-s", "--short", action="store_true", default=False, - help="short output if set, else complex") - (options, args) = parser.parse_args() - - for filename in args: - split_1_file(filename, options.short) - - -if __name__ == '__main__': - main() diff --git a/gr-radar/src/python/usrp_rx_radar.py b/gr-radar/src/python/usrp_rx_radar.py deleted file mode 100755 index e7c2da2c2e..0000000000 --- a/gr-radar/src/python/usrp_rx_radar.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/env python - -from gnuradio import gr, gru, eng_notation -from gnuradio import usrp -from gnuradio.eng_option import eng_option -from optparse import OptionParser -import usrp_dbid -import time -import os.path - - -def make_filename(dir, freq, decim, nchan, suffix): - t = time.strftime('%Y%m%d-%H%M%S') - f = 'R%s-%s-%d-%d.%s' % ( - t, eng_notation.num_to_str(freq), decim, nchan, suffix) - return os.path.join(dir, f) - -class radar_graph(gr.flow_graph): - - def __init__(self): - gr.flow_graph.__init__(self) - - parser = OptionParser (option_class=eng_option) - #parser.add_option("-S", "--subdev", type="subdev", default=(0, None), - # help="select USRP Rx side A or B (default=A)") - parser.add_option("-d", "--decim", type="int", default=64, - help="set fgpa decimation rate to DECIM (default=64)") - parser.add_option("-f", "--freq", type="eng_float", default=104.5e6, - help="set frequency to FREQ (default=104.5M)", metavar="FREQ") - parser.add_option("", "--gain0", type="eng_float", default=0, - help="set gain in dB (default 0)") - parser.add_option("", "--gain1", type="eng_float", default=11, - help="set gain in dB (default 11)") - parser.add_option("-F", "--filename", default=None) - parser.add_option("-D", "--dir", default=None) - (options, args) = parser.parse_args() - - if len(args) != 0: - parser.print_help() - sys.exit(1) - - if options.filename is None and options.dir is None: - sys.stderr.write('Must specify either -F FILENAME or -D DIR\n') - parser.print_help() - sys.exit(1) - - nchan = 2 - - # if filename was given, use it, otherwise build one. - if options.filename is None: - options.filename = make_filename(options.dir, options.freq, - options.decim, nchan, 'srd') - - self.u = usrp.source_s(0, options.decim, nchan, 0, 0) - self.subdev = self.u.db[0] - - if self.u.db[0][0].dbid() != usrp_dbid.BASIC_RX: - sys.stderr.write('This code requires a Basic Rx board on Side A\n') - sys.exit(1) - - # self.u.set_mux(usrp.determine_rx_mux_value(self.u, options.subdev)) - self.u.set_mux(gru.hexint(0xf0f0f1f0)) - - dst = gr.file_sink (gr.sizeof_short, options.filename) - self.connect (self.u, dst) - - self.subdev[0].set_gain(options.gain0) - self.subdev[1].set_gain(options.gain1) - self.set_freq(options.freq) - - - def set_freq(self, target_freq): - ok = True - for i in range(len(self.subdev)): - r = usrp.tune(self.u, i, self.subdev[i], target_freq) - if not r: - ok = False - print "set_freq: failed to set subdev[%d] freq to %f" % ( - i, target_freq) - - return ok - - -if __name__ == '__main__': - fg = radar_graph() - try: - fg.run() - except KeyboardInterrupt: - pass |