int main (int argc, char ** argv) { w=windowcf_create(SPECTRUM_FFT_LENGTH); wchA = windowcf_create(TRACK_LENGTH); wchB = windowcf_create(TRACK_LENGTH); wchC = windowcf_create(TRACK_LENGTH); wchA_filtered = windowcf_create(TRACK_LENGTH); wchB_filtered = windowcf_create(TRACK_LENGTH); wchC_filtered = windowcf_create(TRACK_LENGTH); wmag_buffer = windowf_create(TRACK_LENGTH); nco = nco_crcf_create(LIQUID_NCO); std::cout << "hydromath daemon is beginning..." << std::endl; std::cout << "NOTE: if this is symhydromath you must pass in a matfile" << std::endl; std::cout << argv[1] << std::endl; shm_init(); shm_getg(hydrophones_results_track, shm_results_track); shm_getg(hydrophones_results_spectrum, shm_results_spectrum); //shm_results_track.tracked_ping_count=0; shm_results_track.tracked_ping_time=0; if (argc > 1) { udp_init(argv[1]); } else { udp_init(""); } //std::thread track_thread(direction_loop); // //std::thread spectrum_thread(spectrum_loop); track_sample_idx = 0; while (loop(&spt) == 0) { shm_getg(hydrophones_settings, shm_settings); for (int i = 0; i < 3*CHANNEL_DEPTH; i+=3) { windowcf_push(w, std::complex<float>(spt.data[i+1],0)); //This uses channel B windowcf_push(wchA, std::complex<float>(spt.data[i],0)); windowcf_push(wchB, std::complex<float>(spt.data[i+1],0)); windowcf_push(wchC, std::complex<float>(spt.data[i+2],0)); } current_sample_count+=CHANNEL_DEPTH; do_spectrum(); do_track(); } printf("loop done %li =ci\n",current_sample_count/CHANNEL_DEPTH); return 0; }
static void simulate_mappoints (void) { int xx, yy; shuffle_mappoint_array (); for (yy = 0; yy < WORLD_SIDE_LEN; yy++) { /* indirection to rand array to stop lots of linear effects */ int y = mappoint_array_y[yy]; for (xx = 0; xx < WORLD_SIDE_LEN; xx++) { int x = mappoint_array_x[xx]; short grp = MP_GROUP(x,y); if (grp == GROUP_USED || grp == GROUP_BARE) continue; switch (grp) { case GROUP_TRACK: do_track (x, y); break; case GROUP_RAIL: do_rail (x, y); break; case GROUP_ROAD: do_road (x, y); break; case GROUP_ORGANIC_FARM: do_organic_farm (x, y); break; case GROUP_MARKET: do_market (x, y); break; case GROUP_RESIDENCE_LL: do_residence (x, y); break; case GROUP_RESIDENCE_ML: do_residence (x, y); break; case GROUP_RESIDENCE_HL: do_residence (x, y); break; case GROUP_RESIDENCE_LH: do_residence (x, y); break; case GROUP_RESIDENCE_MH: do_residence (x, y); break; case GROUP_RESIDENCE_HH: do_residence (x, y); break; case GROUP_POWER_LINE: do_power_line (x, y); break; case GROUP_SOLAR_POWER: do_power_source (x, y); break; case GROUP_SUBSTATION: do_power_substation (x, y); break; case GROUP_COALMINE: do_coalmine (x, y); break; case GROUP_COAL_POWER: do_power_source_coal (x, y); break; case GROUP_INDUSTRY_L: do_industry_l (x, y); break; case GROUP_INDUSTRY_H: do_industry_h (x, y); break; case GROUP_COMMUNE: do_commune (x, y); break; case GROUP_OREMINE: do_oremine (x, y); break; case GROUP_PORT: do_port (x, y); break; case GROUP_TIP: do_tip (x, y); break; case GROUP_PARKLAND: do_parkland (x, y); break; case GROUP_UNIVERSITY: do_university (x, y); break; case GROUP_RECYCLE: do_recycle (x, y); break; case GROUP_HEALTH: do_health_centre (x, y); break; case GROUP_ROCKET: do_rocket_pad (x, y); break; case GROUP_WINDMILL: do_windmill (x, y); break; case GROUP_MONUMENT: do_monument (x, y); break; case GROUP_SCHOOL: do_school (x, y); break; case GROUP_BLACKSMITH: do_blacksmith (x, y); break; case GROUP_MILL: do_mill (x, y); break; case GROUP_POTTERY: do_pottery (x, y); break; case GROUP_FIRESTATION: do_firestation (x, y); break; case GROUP_CRICKET: do_cricket (x, y); break; case GROUP_FIRE: do_fire (x, y); break; case GROUP_SHANTY: do_shanty (x, y); break; } } } }