|
@@ -15,6 +15,7 @@
|
|
const double PI_=3.14159265358979323846;
|
|
const double PI_=3.14159265358979323846;
|
|
|
|
|
|
int voxel_num = 3;
|
|
int voxel_num = 3;
|
|
|
|
+//double phase_range = 0;
|
|
double phase_range = PI_/2;
|
|
double phase_range = PI_/2;
|
|
double phase_init = 0.0;
|
|
double phase_init = 0.0;
|
|
|
|
|
|
@@ -23,7 +24,7 @@ double noise_ratio = 1e8;
|
|
|
|
|
|
// B0=1.5T freq=64Mhz, period = 15.6 ns
|
|
// B0=1.5T freq=64Mhz, period = 15.6 ns
|
|
double period_ms = 15.6/1000/1000; //ms
|
|
double period_ms = 15.6/1000/1000; //ms
|
|
-double total_periods = 10;
|
|
|
|
|
|
+double total_periods = 2000;
|
|
int rf_samples_per_period = 20;
|
|
int rf_samples_per_period = 20;
|
|
// double period_ms = 10; //ms
|
|
// double period_ms = 10; //ms
|
|
// double total_periods = 2;
|
|
// double total_periods = 2;
|
|
@@ -32,6 +33,7 @@ int rf_samples_per_period = 20;
|
|
//double T2s_scale = 0.01; //ms # need to be 10ms
|
|
//double T2s_scale = 0.01; //ms # need to be 10ms
|
|
//double T2s_min = T2s_scale/1000.0; //
|
|
//double T2s_min = T2s_scale/1000.0; //
|
|
double T2s_scale = period_ms*total_periods; //ms # need to be 10ms
|
|
double T2s_scale = period_ms*total_periods; //ms # need to be 10ms
|
|
|
|
+template<class T> inline T pow2(const T value) {return value*value;}
|
|
|
|
|
|
|
|
|
|
int main(int argc, char *argv[]) {
|
|
int main(int argc, char *argv[]) {
|
|
@@ -39,16 +41,36 @@ int main(int argc, char *argv[]) {
|
|
int rank;
|
|
int rank;
|
|
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
|
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
|
try {
|
|
try {
|
|
- std::cout<<"Runing .... "<<std::endl;
|
|
|
|
|
|
+ //std::cout<<"Runing .... "<<std::endl;
|
|
jade::SubPopulation sub_population; // Optimizer.
|
|
jade::SubPopulation sub_population; // Optimizer.
|
|
mri::GeneratorRF generator_rf;
|
|
mri::GeneratorRF generator_rf;
|
|
generator_rf.SetVoxels(voxel_num, phase_init, phase_range, T2s_scale);
|
|
generator_rf.SetVoxels(voxel_num, phase_init, phase_range, T2s_scale);
|
|
generator_rf.SetTimer(total_periods, period_ms, rf_samples_per_period);
|
|
generator_rf.SetTimer(total_periods, period_ms, rf_samples_per_period);
|
|
generator_rf.RandomizeVoxels();
|
|
generator_rf.RandomizeVoxels();
|
|
std::vector<double> signal_rf, magnitude_rf, phase_rf;
|
|
std::vector<double> signal_rf, magnitude_rf, phase_rf;
|
|
|
|
+ std::vector<double> mag_sin, mag_cos;
|
|
generator_rf.EvaluateSignal(signal_rf);
|
|
generator_rf.EvaluateSignal(signal_rf);
|
|
|
|
+ generator_rf.EvaluateDemodulated(mag_sin,mag_cos);
|
|
auto timesteps = generator_rf.GetTimesteps();
|
|
auto timesteps = generator_rf.GetTimesteps();
|
|
- std::cout<< timesteps.size() <<std::endl;
|
|
|
|
|
|
+ mri::LockIn lock_in;
|
|
|
|
+ std::vector<double> avg_sin, avg_cos;
|
|
|
|
+ lock_in.Analyse(signal_rf, period_ms, timesteps,
|
|
|
|
+ rf_samples_per_period, avg_sin, avg_cos);
|
|
|
|
+ for (unsigned long i = 0; i<timesteps.size(); ++i) {
|
|
|
|
+ if (i > static_cast<unsigned long>(rf_samples_per_period)*2)
|
|
|
|
+ std::cout << timesteps[i] << "\t"
|
|
|
|
+ << signal_rf[i] << "\t"
|
|
|
|
+ // << mul_sin[i] << "\t"
|
|
|
|
+ // << mul_cos[i] << "\t"
|
|
|
|
+ // << std::sqrt(pow2(mag_sin[i])+pow2(mag_cos[i]))
|
|
|
|
+ // /std::sqrt(pow2(avg_sin[i])+pow2(avg_cos[i])) << "\t"
|
|
|
|
+ << std::sqrt(pow2(mag_sin[i])+pow2(mag_cos[i])) << "\t"
|
|
|
|
+ << 2.0*std::sqrt(pow2(avg_sin[i])+pow2(avg_cos[i])) << "\t"
|
|
|
|
+ << avg_sin[i] << "\t"
|
|
|
|
+ << avg_cos[i]
|
|
|
|
+ << std::endl;
|
|
|
|
+ }
|
|
|
|
+ //std::cout<< timesteps.size() <<std::endl;
|
|
// for (auto value:signal_rf){
|
|
// for (auto value:signal_rf){
|
|
// std::cout << value <<std::endl;
|
|
// std::cout << value <<std::endl;
|
|
// }
|
|
// }
|