Skip to content
Snippets Groups Projects
Commit c2bfdae2 authored by spriyas's avatar spriyas
Browse files

updated SK test cases

parent a9374f14
Branches
Tags
No related merge requests found
#include "psrdada_cpp/common.hpp"
#include "psrdada_cpp/effelsberg/edd/test/SKTestVector.hpp"
#include "psrdada_cpp/effelsberg/edd/SKRfiReplacement.hpp"
#include "psrdada_cpp/effelsberg/edd/SpectralKurtosis.hpp"
#include "psrdada_cpp/effelsberg/edd/test/SKTestVector.hpp"
#include <gtest/gtest.h>
namespace psrdada_cpp {
......@@ -13,7 +14,20 @@ class SpectralKurtosisTester: public ::testing::Test
public:
SpectralKurtosisTester();
~SpectralKurtosisTester();
/**
* @brief creates SKTestVector class instance and generates test vector
*
*/
void test_vector_generation(std::size_t sample_size, std::size_t window_size, bool with_rfi,
float rfi_freq, float rfi_amp, const std::vector<int> &rfi_window_indices,
std::vector<std::complex<float>> &samples);
/**
* @brief creates SpectralKurtosis class instance and computes spectral kurtosis
*
*/
void sk_computation(std::size_t nch,std::size_t window_size,
const std::vector<std::complex<float>> &samples,
RFIStatistics &stat);
protected:
void SetUp() override;
void TearDown() override;
......
......@@ -22,66 +22,101 @@ void SpectralKurtosisTester::TearDown()
{
}
TEST_F(SpectralKurtosisTester, sk_window_size_chk)
void SpectralKurtosisTester::test_vector_generation(std::size_t sample_size, std::size_t window_size,
bool with_rfi, float rfi_freq, float rfi_amp,
const std::vector<int> &rfi_window_indices,
std::vector<std::complex<float>> &samples)
{
bool with_rfi = 0;
std::size_t sample_size = 2000;
std::size_t window_size = 150;
SKTestVector tv(sample_size, window_size, with_rfi);
std::vector<int> rfi_ind{};
SKTestVector tv(sample_size, window_size, with_rfi, rfi_freq, rfi_amp);
tv.generate_test_vector(rfi_window_indices, samples);
}
void SpectralKurtosisTester::sk_computation(std::size_t nch, std::size_t window_size,
const std::vector<std::complex<float>> &samples,
RFIStatistics &stat)
{
float sk_min = 0.8;
float sk_max = 1.2;
SpectralKurtosis sk(nch, window_size, sk_min, sk_max);
sk.compute_sk(samples, stat);
}
TEST_F(SpectralKurtosisTester, sk_window_size_check)
{
std::vector<int> rfi_window_indices{};
std::vector<std::complex<float>> samples;
tv.generate_test_vector(rfi_ind, samples);
std::size_t nch = 1;
SpectralKurtosis sk(nch, window_size);
test_vector_generation(4000, 150, 0, 0, 0, rfi_window_indices, samples);
RFIStatistics stat;
sk.compute_sk(samples, stat);
try{
sk_computation(1, 150, samples, stat);
FAIL() << "Expected std::runtime_error\n";
}
catch(std::runtime_error const & err){
EXPECT_EQ(err.what(), std::string("sample size is not a multiple of window_size. Give different window size\n"));
}
}
TEST_F(SpectralKurtosisTester, sk_withoutRFI)
{
bool with_rfi = 0;
std::size_t sample_size = 20000;
std::size_t window_size = 200;
SKTestVector tv(sample_size, window_size, with_rfi);
std::vector<int> rfi_ind{};
std::vector<int> rfi_window_indices{};
std::vector<std::complex<float>> samples;
tv.generate_test_vector(rfi_ind, samples); //generate test vector
std::size_t nch = 1;
float sk_min = 0.8;
float sk_max = 1.2;
SpectralKurtosis sk(nch, window_size, sk_min, sk_max);
test_vector_generation(40000, 400, 0, 0, 0, rfi_window_indices, samples);
RFIStatistics stat;
sk.compute_sk(samples, stat); //computing SK
sk_computation(1, 400, samples, stat);
float expected_rfi_fraction = 0;
EXPECT_EQ(expected_rfi_fraction, stat.rfi_fraction);
}
TEST_F(SpectralKurtosisTester, sk_withRFI)
{
std::vector<int> rfi_window_indices{3, 4, 6, 7, 8, 20, 30, 40};
std::vector<std::complex<float>> samples;
test_vector_generation(40000, 400, 1, 10, 1, rfi_window_indices, samples);
RFIStatistics stat;
sk_computation(1, 400, samples, stat);
float expected_rfi_fraction = rfi_window_indices.size()/float(40000/400);
EXPECT_EQ(expected_rfi_fraction, stat.rfi_fraction);
}
TEST_F(SpectralKurtosisTester, sk_replacement)
{
//Test vector
bool with_rfi = 1;
std::size_t sample_size = 40000;
std::size_t window_size = 400;
SKTestVector tv(sample_size, window_size, with_rfi);
std::vector<int> rfi_ind{1, 2, 5, 7, 9, 20, 30, 40};
float rfi_freq = 10;
float rfi_amp = 1;
SKTestVector tv(sample_size, window_size, with_rfi, rfi_freq, rfi_amp);
std::vector<int> rfi_window_indices{1, 2, 3, 4, 6, 7, 8, 9, 20, 30, 40};
std::vector<std::complex<float>> samples;
tv.generate_test_vector(rfi_ind, samples); //generating test vector
tv.generate_test_vector(rfi_window_indices, samples); //generating test vector
//SK
std::size_t nch = 1;
float sk_min = 0.8;
float sk_max = 1.2;
SpectralKurtosis sk(nch, window_size, sk_min, sk_max);
RFIStatistics stat;
SpectralKurtosis sk(nch, window_size, sk_min, sk_max);
sk.compute_sk(samples, stat); //computing SK
BOOST_LOG_TRIVIAL(info) <<"RFI status: ";
for(int ii = 0; ii< 10; ii++){
printf("RFI[%d] = %d\n", ii, stat.rfi_status[ii]);
}
float expected_rfi_fraction = rfi_window_indices.size()/float(40000/400);
EXPECT_EQ(expected_rfi_fraction, stat.rfi_fraction);
//RFI replacement
BOOST_LOG_TRIVIAL(info) <<"RFI replacement \n";
SKRfiReplacement rr(samples, stat.rfi_status);
rr.replace_rfi_data(samples);
//SK computation after RFI replacement
BOOST_LOG_TRIVIAL(info) <<"computing SK after RFI replacement.. \n";
sk.compute_sk(samples, stat); //computing SK
float expected_val_after_rfi_replacement = 0;
EXPECT_EQ(expected_val_after_rfi_replacement, stat.rfi_fraction);
}
} //test
} //edd
} //effelsberg
} //psrdada_cpp
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment