gnss-sdr 코드 판독(5)
작자 위챗 공중번호: 소위성
운영 체제: Windows 10
이 편은 전편에 이어졌지만 필연적인 연락은 없었다. 전편의 주소:
https://blog.csdn.net/eaglesoars/article/details/81074063
1、Gnss_Synchro
오늘 Gnss를 보면...Synchro 클래스는 신호 처리 모듈에 필요한 정보를 포함합니다.
이 클래스는 gnss-sdr/src/core/systemparameters/gnss_synchro.h에서 정의된 내용:
class Gnss_Synchro
{
public:
// Satellite and signal info
char System; //!< Set by Channel::set_signal(Gnss_Signal gnss_signal)
char Signal[3]; //!< Set by Channel::set_signal(Gnss_Signal gnss_signal)
unsigned int PRN; //!< Set by Channel::set_signal(Gnss_Signal gnss_signal)
int Channel_ID; //!< Set by Channel constructor
// Acquisition
double Acq_delay_samples; //!< Set by Acquisition processing block
double Acq_doppler_hz; //!< Set by Acquisition processing block
unsigned long int Acq_samplestamp_samples; //!< Set by Acquisition processing block
bool Flag_valid_acquisition; //!< Set by Acquisition processing block
//Tracking
long int fs; //!< Set by Tracking processing block
double Prompt_I; //!< Set by Tracking processing block
double Prompt_Q; //!< Set by Tracking processing block
double CN0_dB_hz; //!< Set by Tracking processing block
double Carrier_Doppler_hz; //!< Set by Tracking processing block
double Carrier_phase_rads; //!< Set by Tracking processing block
double Code_phase_samples; //!< Set by Tracking processing block
unsigned long int Tracking_sample_counter; //!< Set by Tracking processing block
이 매개 변수들은 모두 각자의 신호 처리 모듈에 값을 부여한다.
그러나 이 클래스에서 가장 중요한 것은 하나의 함수를 실현하는 것이다.
template
void serialize(Archive& ar, const unsigned int version)
{
if (version)
{
};
// Satellite and signal info
ar& System;
ar& Signal;
ar& PRN;
ar& Channel_ID;
ar& Acq_delay_samples;
ar& Acq_doppler_hz;
ar& Acq_samplestamp_samples;
ar& Flag_valid_acquisition;
//Tracking
ar& fs;
ar& Prompt_I;
ar& Prompt_Q;
ar& CN0_dB_hz;
ar& Carrier_Doppler_hz;
ar& Carrier_phase_rads;
ar& Code_phase_samples;
ar& Tracking_sample_counter;
ar& Flag_valid_symbol_output;
ar& correlation_length_ms;
//Telemetry Decoder
ar& Flag_valid_word;
ar& TOW_at_current_symbol_ms;
// Observables
ar& Pseudorange_m;
ar& RX_time;
ar& Flag_valid_pseudorange;
ar& interp_TOW_ms;
}
};
동지들, 이 매개 변수들은 모두 위의 그 모듈에 첨부해야 하는 매개 변수라는 것을 발견했습니까?여기에 그것을 적어 두면 사실은 서열화이다.
서열화는 하나의 클래스의 대상을 파일에 저장하거나 네트워크를 통해 보내기 위해 2진 바이트 흐름이나 다른 형식의 표시 등으로 만들 수 있다.
어떻게 보내나요, gnss-sdr/src/core/monitor/gnsssynchro_udp_sink.cc중
bool Gnss_Synchro_Udp_Sink::write_gnss_synchro(std::vector stocks)
{
std::ostringstream archive_stream;
boost::archive::binary_oarchive oa{archive_stream};
oa << stocks;
std::string outbound_data = archive_stream.str();
for (auto endpoint : endpoints)
{
socket.open(endpoint.protocol(), error);
socket.connect(endpoint, error);
try
{
socket.send(boost::asio::buffer(outbound_data));
}
catch (boost::system::system_error const& e)
{
return false;
}
}
return true;
}
그중의
std::ostringstream archive_stream;
boost::archive::binary_oarchive oa{archive_stream};
oa << stocks;
std::string outbound_data = archive_stream.str();
socket.send(boost::asio::buffer(outbound_data));
모두 표준적인 수단으로 stocks류를 하나의 ostringstream 흐름에 서열화하는 것이다.
그렇다면 이 흐름에서 데이터를 어떻게 복구할 것인가에 대해 표준 방법을 제시한다.
std::vector stocks2;
std::istringstream is(content);
boost::archive::binary_iarchive ia(is);
ia >> stocks2;// string , 。
2、Gnss_Synchro_Udp_Sink
이런 종류의 목적은 바로 Gnss를Synchro 레코드의 매개변수는 UDP 방식으로 전송됩니다.
gnss-sdr/src/core/monitor/gnss_synchro_udp_sink.h
3、gnss_synchro_monitor
모니터 디렉터리에 클래스가 하나 더 있습니다.gnsssynchro_모니터, 우선,gr:::sync 에서 계승block의 종류, 혈통이 순수하고 뿌리가 붉다.
class gnss_synchro_monitor : public gr::sync_block
gr::sync_block은gr::block에서 계승되어 1:1로 선택할 수 있는history를 실현했습니다.입력과 출력의 속도를 알았으니 어떤 간소화는 가능하다.실현자의 관점에서 보면general 이 아닌work() 방법을 정의했다work().
work () ninput 생략items 매개 변수, consume 증가each ()가 호출됩니다.
gnss_synchro_monitor::gnss_synchro_monitor(unsigned int n_channels,
int output_rate_ms,
int udp_port,
std::vector<:string> udp_addresses) : gr::sync_block("gnss_synchro_monitor",
gr::io_signature::make(n_channels, n_channels, sizeof(Gnss_Synchro)),
gr::io_signature::make(0, 0, 0))
{
d_output_rate_ms = output_rate_ms;
d_nchannels = n_channels;
udp_sink_ptr = std::unique_ptr(new Gnss_Synchro_Udp_Sink(udp_addresses, udp_port));
}
이 클래스는 먼저 동기화 모듈을 만들었는데'gnss synchro monitor'라고 합니다. 이 안에 있는 파라미터는udp 라는 것을 기억하세요.port, 그리고 아까 말씀드렸던 Gnss 를 호출했습니다.Synchro_Udp_Sink.
int gnss_synchro_monitor::work(int noutput_items, gr_vector_const_void_star& input_items,
gr_vector_void_star& output_items __attribute__((unused)))
{
const Gnss_Synchro** in = reinterpret_cast(&input_items[0]); // Get the input buffer pointer
for (int epoch = 0; epoch < noutput_items; epoch++)
{
// ############ 1. READ PSEUDORANGES ####
for (unsigned int i = 0; i < d_nchannels; i++)
{
//if (in[i][epoch].Flag_valid_pseudorange)
// {
// }
//todo: send the gnss_synchro objects
std::vector stocks;
stocks.push_back(in[i][epoch]);
udp_sink_ptr->write_gnss_synchro(stocks);
}
}
return noutput_items;
}
이 모듈에는work 방법이 있는데, 주로noutputitems 개 GnssSynchro는 모두 서열화를 통해 발송되며, 그중 각noutputitems에는 d 도 포함되어 있습니다nchannels 채널.
이 몇 가지 관계를 보면
(1)gnss_synchro_모니터는 신호 처리 모듈로 공사 전체이다.
(2)Gnss_Synchro는 정보 수집을 담당합니다.
(3)Gnss_Synchro_Udp_Sink는 정보를 서열화하여 보냈다.
https://www.cnblogs.com/moon1992/p/5424677.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio 2019의 C++/CLI에서 출력되는 바이너리 경로 변경Visual C++ 프로젝트에서는 디폴트로 솔루션과 같은 계층에 플랫폼의 폴더( Win32 라든지 x64 라든지)나 구성 폴더( Debug 라든지 Release 라든지)가 만들어지지만, 여러가지 구성을 바꾸고 있으면...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.