Better scheme for displaying QRA65 sync results.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@7561 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Joe Taylor 2017-02-10 16:38:19 +00:00
parent f72fc0d7a3
commit 3c7e20b05b
7 changed files with 74 additions and 49 deletions

View File

@ -88,7 +88,7 @@ subroutine multimode_decoder(ss,id2,params,nfsample)
if(params%nmode.eq.4 .or. params%nmode.eq.65) open(14,file=trim(temp_dir)// &
'/avemsg.txt',status='unknown')
if(params%nmode.eq.164) open(17,file=trim(temp_dir)//'/red.dat', &
access='stream',status='unknown')
status='unknown')
if(params%nmode.eq.4) then
jz=52*nfsample

View File

@ -117,8 +117,8 @@ subroutine sync64(c0,nf1,nf2,nfqso,ntol,mode64,emedelay,dtx,f0,jpk,sync, &
enddo
s0a=s0a+2.0
write(17) ia,ib,s0a(ia:ib) !Save data for red curve
close(17)
! write(17) ia,ib,s0a(ia:ib) !Save data for red curve
! close(17)
nskip=50
call lorentzian(s0a(ia+nskip:ib-nskip),iz-2*nskip,a)
@ -137,18 +137,29 @@ subroutine sync64(c0,nf1,nf2,nfqso,ntol,mode64,emedelay,dtx,f0,jpk,sync, &
rms2=sqrt(sq/40.0)
sync2=10.0*log10(a(2)/rms2)
! do i=1,iz-2*nskip
! x=i
! z=(x-a(3))/(0.5*a(4))
! yfit=a(1)
! if(abs(z).lt.3.0) then
! d=1.0 + z*z
! yfit=a(1) + a(2)*(1.0/d - 0.1)
! endif
! j=i+ia+49
! write(76,1110) j*df3,s0a(j),yfit
!1110 format(3f10.3)
! enddo
slimit=6.0
rewind 17
write(17,1110) 0.0,0.0
rewind 17
! rewind 76
do i=2,iz-2*nskip-1,3
x=i
z=(x-a(3))/(0.5*a(4))
yfit=a(1)
if(abs(z).lt.3.0) then
d=1.0 + z*z
yfit=a(1) + a(2)*(1.0/d - 0.1)
endif
j=i+ia+49
freq=j*df3
ss=(s0a(j-1)+s0a(j)+s0a(j+1))/3.0
if(ss.gt.slimit) write(17,1110) freq,ss
1110 format(3f10.3)
! write(76,1110) freq,ss,yfit
enddo
flush(17)
close(17)
! flush(76)
return
end subroutine sync64

View File

@ -2554,6 +2554,8 @@ void MainWindow::readFromStdout() //readFromStdout
bool bAvgMsg=false;
int navg=0;
if(t.indexOf("<DecodeFinished>") >= 0) {
if(m_mode=="QRA64") m_wideGraph->drawRed(0,0);
/*
if(m_mode=="QRA64") {
char name[512];
QString fname=m_config.temp_dir ().absoluteFilePath ("red.dat");
@ -2570,6 +2572,7 @@ void MainWindow::readFromStdout() //readFromStdout
}
}
*/
m_bDecoded = t.mid (20).trimmed ().toInt () > 0;
if(!m_diskData) killFileTimer.start (3*1000*m_TRperiod/4); //Kill in 45 s
decodeDone ();
@ -4401,7 +4404,8 @@ void MainWindow::on_actionQRA64_triggered()
ui->sbSubmode->setValue(m_nSubMode);
ui->actionInclude_averaging->setEnabled(false);
ui->actionInclude_correlation->setEnabled(false);
QString fname {QDir::toNativeSeparators(m_config.temp_dir ().absoluteFilePath ("red.dat"))};
m_wideGraph->setRedFile(fname);
QFile f(m_appDir + "/old_qra_sync");
if(f.exists() and !m_bQRAsyncWarned) {
MessageBox::warning_message (this, tr ("*** WARNING *** "),

View File

@ -3,6 +3,8 @@
#include <QDebug>
#include "commons.h"
#include "moc_plotter.cpp"
#include <fstream>
#include <iostream>
#define MAX_SCREENSIZE 2048
@ -131,39 +133,6 @@ void CPlotter::draw(float swide[], bool bScroll, bool bRed)
m_fMax=FreqfromX(iz);
m_line++;
if(m_mode=="QRA64" and bRed) {
double df_qra64=4000.0/(7*2304);
int j0,j1;
int k=0;
float smax,y3max=0;
float y3[MAX_SCREENSIZE];
for(int i=1; i<iz; i++) {
j0=FreqfromX(i-1)/df_qra64;
j1=FreqfromX(i)/df_qra64;
smax=0.0;
for(int jj=j0; jj<=j1; jj++) {
if(dec_data.sred[jj]>smax) smax=dec_data.sred[jj];
}
y3[i]=smax;
if(smax>y3max)y3max=smax;
}
float fac=0.8/qMax(y3max,10.0f);
for(int i=1; i<iz; i++) {
if(FreqfromX(i)>=m_ia*df_qra64 and FreqfromX(i)<m_ib*df_qra64) {
y2=fac*y3[i];
LineBuf2[k].setX(i);
LineBuf2[k].setY(int(m_h2*(0.9-y2)));
k++;
}
}
painter2D.drawPolyline(LineBuf,jtop);
painter2D.setPen(Qt::red);
painter2D.drawPolyline(LineBuf2,k);
ktop=k;
update(); //trigger a new paintEvent
return;
}
if(bScroll) {
flat4_(swide,&iz,&m_Flatten);
flat4_(&dec_data.savg[j0],&jz,&m_Flatten);
@ -262,6 +231,34 @@ void CPlotter::draw(float swide[], bool bScroll, bool bRed)
x1=XfromFreq(m_rxFreq+750);
painter2D.drawText(x1-4,y,"73");
}
if(bRed) {
std::ifstream f;
f.open(m_redFile.toLatin1());
if(f) {
int x,y;
float freq,sync;
float slimit=6.0;
QPen pen0(Qt::red,1);
painter1.setPen(pen0);
for(int i=0; i<99999; i++) {
f >> freq >> sync;
if(f.eof()) break;
x=XfromFreq(freq);
y=(sync-slimit)*3.0;
if(y>0) {
if(y>15.0) y=15.0;
if(x>=0 and x<=m_w) {
painter1.setPen(pen0);
painter1.drawLine(x,0,x,y);
}
}
}
f.close();
}
// m_bDecodeFinished=false;
}
update(); //trigger a new paintEvent
m_bScaleOK=true;
}
@ -732,3 +729,8 @@ void CPlotter::setVHF(bool bVHF)
{
m_bVHF=bVHF;
}
void CPlotter::setRedFile(QString fRed)
{
m_redFile=fRed;
}

View File

@ -84,6 +84,7 @@ public:
bool Reference() const {return m_bReference;}
void drawRed(int ia, int ib, float swide[]);
void setVHF(bool bVHF);
void setRedFile(QString fRed);
signals:
void freezeDecode1(int n);
@ -133,6 +134,7 @@ private:
QString m_mode;
QString m_modeTx;
QString m_rxBand;
QString m_redFile;
bool m_Running;
bool m_paintEventBusy;

View File

@ -551,3 +551,8 @@ void WideGraph::on_sbPercent2dPlot_valueChanged(int n)
m_Percent2DScreen=n;
ui->widePlot->SetPercent2DScreen(n);
}
void WideGraph::setRedFile(QString fRed)
{
ui->widePlot->setRedFile(fRed);
}

View File

@ -48,6 +48,7 @@ public:
void setWSPRtransmitted();
void drawRed(int ia, int ib);
void setVHF(bool bVHF);
void setRedFile(QString fRed);
signals:
void freezeDecode2(int n);