提交 19707bf4 编写于 作者: M manjaro

syn is not good

上级 402d1229
...@@ -30,7 +30,8 @@ std::atomic<int> curr_deal = 0; ...@@ -30,7 +30,8 @@ std::atomic<int> curr_deal = 0;
//Sample rate in Hz //Sample rate in Hz
double sprate = 240000 ; double sprate = 240000 ;
std::atomic<bool> syn = false; const int searchRange = 1001;
std::atomic<int> syn = searchRange/10;
//消费者线程,for rx //消费者线程,for rx
void dealer(); void dealer();
int runRecieve() int runRecieve()
...@@ -173,7 +174,7 @@ int runRecieve() ...@@ -173,7 +174,7 @@ int runRecieve()
memcpy(dest, src , copyto * sizeof(SPTYPE) * 2 ); memcpy(dest, src , copyto * sizeof(SPTYPE) * 2 );
total_red = copyto; total_red = copyto;
curr_active = 1 - curr_active; curr_active = 1 - curr_active;
if (!syn) if (syn>3)
{ {
rx_stream_cmd.stream_mode = UHD_STREAM_MODE_STOP_CONTINUOUS; rx_stream_cmd.stream_mode = UHD_STREAM_MODE_STOP_CONTINUOUS;
UHD_DO(uhd_rx_streamer_issue_stream_cmd(rx_streamer, &rx_stream_cmd)); UHD_DO(uhd_rx_streamer_issue_stream_cmd(rx_streamer, &rx_stream_cmd));
...@@ -184,7 +185,6 @@ int runRecieve() ...@@ -184,7 +185,6 @@ int runRecieve()
} }
rx_stream_cmd.stream_mode = UHD_STREAM_MODE_START_CONTINUOUS; rx_stream_cmd.stream_mode = UHD_STREAM_MODE_START_CONTINUOUS;
UHD_DO(uhd_rx_streamer_issue_stream_cmd(rx_streamer, &rx_stream_cmd)); UHD_DO(uhd_rx_streamer_issue_stream_cmd(rx_streamer, &rx_stream_cmd));
} }
} }
} }
...@@ -200,31 +200,33 @@ int runRecieve() ...@@ -200,31 +200,33 @@ int runRecieve()
} }
void runDeal() void runDeal()
{ {
const int DealEnd = READ_BUF_SIZE - WAVSIZE; const int DealEnd = READ_BUF_SIZE - WAVSIZE;
const int steps = 201; float (*cross[searchRange])[2][2] ;
float (*cross[steps])[2][2] ; for (int i=0;i<searchRange;++i)
for (int i=0;i<steps;++i)
cross[i] = new float[DealEnd][2][2]; cross[i] = new float[DealEnd][2][2];
float (*judge[steps])[2] ; float (*judge[searchRange])[2] ;
for (int i=0;i<steps;++i) for (int i=0;i<searchRange;++i)
judge[i] = new float[DealEnd][2]; judge[i] = new float[DealEnd][2];
float (*freq_mv[steps])[2]; float (*freq_mv[searchRange])[2];
for (int i=0;i<steps;++i) for (int i=0;i<searchRange;++i)
freq_mv[i] = new float[DealEnd][2]; freq_mv[i] = new float[DealEnd][2];
float (*sig[steps])[2] ; float (*sig[searchRange])[2] ;
for (int i=0;i<steps;++i) for (int i=0;i<searchRange;++i)
sig[i] = new float[DealEnd][2]; sig[i] = new float[DealEnd][2];
const float pi = 3.1415927; const float pi = 3.1415927;
for (int df = 0;df<steps;++df)
#pragma omp parallel for
for (int df = 0;df<searchRange;++df)
{ {
float f = (df-steps/2)*50; float f = (df-searchRange/2.0)*10;
for (int pv = 0;pv<DealEnd;++pv) for (int pv = 0;pv<DealEnd;++pv)
{ {
float t = pv / sprate; float t = pv / sprate;
...@@ -232,7 +234,7 @@ void runDeal() ...@@ -232,7 +234,7 @@ void runDeal()
freq_mv[df][pv][1] = sin(2*pi*f*t); freq_mv[df][pv][1] = sin(2*pi*f*t);
} }
} }
int startDF = 0, endDF = steps; int startDF =0, endDF = searchRange;
while (!stop_signal_called) { while (!stop_signal_called) {
if ((int)curr_active==(int)curr_deal) if ((int)curr_active==(int)curr_deal)
{ {
...@@ -244,8 +246,9 @@ void runDeal() ...@@ -244,8 +246,9 @@ void runDeal()
fprintf(stderr,"Dealing %d\n",deal); fprintf(stderr,"Dealing %d\n",deal);
float maxAbs = 0; float maxAbs = 0;
int maxDF = 2; int maxDF = 2;
int stp = syn;
#pragma omp parallel for #pragma omp parallel for
for (int df = startDF;df<endDF;++df) for (int df = startDF;df<endDF;df+=stp)
{ {
//xorr //xorr
#pragma omp simd #pragma omp simd
...@@ -294,25 +297,31 @@ void runDeal() ...@@ -294,25 +297,31 @@ void runDeal()
printf ("MaxDF=%d\n",maxDF); printf ("MaxDF=%d\n",maxDF);
for (size_t i=0;i<DealEnd;++i) for (size_t i=0;i<DealEnd;++i)
{ {
if (judge[maxDF][i][0] >= 1000 || judge[maxDF][i][1] >= 1000 ) if (judge[maxDF][i][0] >= 5000 || judge[maxDF][i][1] >= 5000 )
{ {
if (judge[maxDF][i][0] * 8 < judge[maxDF][i][1]) if (judge[maxDF][i][0] * 32 < judge[maxDF][i][1])
{ {
printf("%lu:0=%f, 1=%f, 1\n",i,judge[maxDF][i][0],judge[maxDF][i][1]); printf("%lu:0=%f, 1=%f, 1\n",i,judge[maxDF][i][0],judge[maxDF][i][1]);
fflush(stdout); fflush(stdout);
i+=WAVSIZE; i+=WAVSIZE;
startDF = (maxDF - 2)<0?0:(maxDF - 2); startDF = (maxDF - stp*2)<0?0:(maxDF - stp*2);
endDF = (maxDF + 2)>steps?steps:((maxDF + 2)); endDF = (maxDF + stp*2)>searchRange?searchRange:((maxDF + stp*2));
syn = true; if (syn > 3)
syn = (endDF - startDF)/10;
if (syn<1)
syn = 1;
} }
else if (judge[maxDF][i][1] * 8 < judge[maxDF][i][0]) else if (judge[maxDF][i][1] * 32 < judge[maxDF][i][0])
{ {
printf("%lu:0=%f, 1=%f, 0\n",i,judge[maxDF][i][0],judge[maxDF][i][1]); printf("%lu:0=%f, 1=%f, 0\n",i,judge[maxDF][i][0],judge[maxDF][i][1]);
fflush(stdout); fflush(stdout);
i+=WAVSIZE; i+=WAVSIZE;
startDF = (maxDF - 2)<0?0:(maxDF - 2); startDF = (maxDF - stp*2)<0?0:(maxDF - stp*2);
endDF = (maxDF + 2)>steps?steps:((maxDF + 2)); endDF = (maxDF + stp*2)>searchRange?searchRange:((maxDF + stp*2));
syn = true; if (syn > 3)
syn = (endDF - startDF)/10;
if (syn<1)
syn = 1;
} }
} }
...@@ -320,7 +329,7 @@ void runDeal() ...@@ -320,7 +329,7 @@ void runDeal()
//判决 //判决
curr_deal = 1-deal; curr_deal = 1-deal;
} }
for (int i=0;i<steps;++i) for (int i=0;i<searchRange;++i)
{ {
delete [] cross[i]; delete [] cross[i];
delete [] judge[i]; delete [] judge[i];
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册