首次上传
This commit is contained in:
1 parent
133fe739ed
commit
07e0cac3ac
71 files changed
+23545
No files matched your search
@@ -0,0 +1,50 @@
|
||||
#include "doa_algorithms.hpp"
|
||||
|
||||
#include <fstream>
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
using namespace esp32_doa;
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc < 3 || argc > 6) {
|
||||
std::cerr << "usage: doa_cli <srp|normmusic> <matrix.txt> [sample_rate] [nfft]\n"
|
||||
" doa_cli mvdr <matrix.txt> <angle> [sample_rate] [nfft]\n";
|
||||
return 2;
|
||||
}
|
||||
try {
|
||||
std::ifstream input(argv[2]);
|
||||
if (!input) throw std::runtime_error("cannot open input matrix");
|
||||
int samples = 0, channels = 0;
|
||||
input >> samples >> channels;
|
||||
Config config;
|
||||
config.channels = channels;
|
||||
const std::string command = argv[1];
|
||||
if (command == "mvdr") {
|
||||
if (argc < 4) throw std::runtime_error("mvdr requires an angle");
|
||||
if (argc >= 5) config.sample_rate = std::stoi(argv[4]);
|
||||
if (argc >= 6) config.nfft = std::stoi(argv[5]);
|
||||
} else {
|
||||
if (argc >= 4) config.sample_rate = std::stoi(argv[3]);
|
||||
if (argc >= 5) config.nfft = std::stoi(argv[4]);
|
||||
}
|
||||
config.hop = config.nfft / 2;
|
||||
std::vector<double> audio(static_cast<std::size_t>(samples) * channels);
|
||||
for (double &value : audio)
|
||||
if (!(input >> value)) throw std::runtime_error("matrix has too few values");
|
||||
std::cout << std::setprecision(17);
|
||||
if (command == "mvdr") {
|
||||
const auto result = beamform(audio, samples, config, std::stod(argv[3]));
|
||||
for (double value : result.audio) std::cout << value << '\n';
|
||||
} else {
|
||||
const auto result = estimate(audio, samples, config, command);
|
||||
std::cout << "{\"angle_degrees\":" << result.angle_degrees
|
||||
<< ",\"peak_sharpness\":" << result.peak_sharpness << "}\n";
|
||||
}
|
||||
} catch (const std::exception &error) {
|
||||
std::cerr << "error: " << error.what() << '\n';
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user