Adjustable start frequency for waterfall.

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3502 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Joe Taylor 2013-07-25 16:48:10 +00:00
parent 88c73582a0
commit 18f1119b1a
9 changed files with 85 additions and 55 deletions

16
in.dat
View File

@ -1,16 +0,0 @@
35 36 22 8 31 11 14 55 20 36 55 13 24 15 56 38 16 28 61 58
15 26 45 8 41 53 37 57 59 60 29 29 41 46 44 35 52 61 24 26
16 20 53 35 2 6 9 27 47 28 57 6 15 9 16 10 56 9 63 46
9 15 3
74 61 44 233 29 245 254 64 119 64 250 111 38 145 53 29 140 194 119 99
55 86 48 110 142 95 48 120 61 66 252 252 245 88 62 41 124 249 246 68
250 249 65 64 140 142 88 190 237 90 240 52 79 216 55 31 112 135 66 44
99 57 68
54 61 26 5 13 60 3 56 30 58 57 4 16 43 28 43 6 61 13 19
56 8 4 9 45 32 9 7 14 52 4 38 40 27 3 26 51 54 40 29
36 63 34 43 3 48 36 49 46 30 8 20 40 59 29 28 17 11 8 19
11 63 5
38 25 35 8 28 0 0 60 60 25 0 31 28 52 14 24 9 30 18 54
49 55 48 15 27 54 26 22 30 27 1 1 4 31 35 29 23 2 2 27
0 1 25 32 21 84 28 19 5 60 2 27 15 9 39 23 42 12 29 17
16 50 49

View File

@ -35,7 +35,7 @@ QTextEdit* pShortcuts;
QTcpSocket* commanderSocket = new QTcpSocket(0); QTcpSocket* commanderSocket = new QTcpSocket(0);
QString rev="$Rev$"; QString rev="$Rev$";
QString Program_Title_Version=" WSJT-X v1.1, r" + rev.mid(6,4) + QString Program_Title_Version=" WSJT-X v1.1.1, r" + rev.mid(6,4) +
" by K1JT"; " by K1JT";
//-------------------------------------------------- MainWindow constructor //-------------------------------------------------- MainWindow constructor

View File

@ -15,7 +15,7 @@ CPlotter::CPlotter(QWidget *parent) : //CPlotter Constructor
setAttribute(Qt::WA_OpaquePaintEvent, false); setAttribute(Qt::WA_OpaquePaintEvent, false);
setAttribute(Qt::WA_NoSystemBackground, true); setAttribute(Qt::WA_NoSystemBackground, true);
m_StartFreq = 0; m_startFreq = 0;
m_nSpan=2; //used for FFT bins/pixel m_nSpan=2; //used for FFT bins/pixel
m_fSpan=(float)m_nSpan; m_fSpan=(float)m_nSpan;
m_hdivs = HORZ_DIVS; m_hdivs = HORZ_DIVS;
@ -83,12 +83,11 @@ void CPlotter::paintEvent(QPaintEvent *) // paintEvent()
m_paintEventBusy=false; m_paintEventBusy=false;
} }
void CPlotter::draw(float swide[], int i0) //draw() void CPlotter::draw(float swide[]) //draw()
{ {
int j,y2; int j,y2;
float y; float y;
m_i0=i0;
double gain = pow(10.0,0.05*(m_plotGain+7)); double gain = pow(10.0,0.05*(m_plotGain+7));
//move current data down one line (must do this before attaching a QPainter object) //move current data down one line (must do this before attaching a QPainter object)
@ -306,16 +305,15 @@ void CPlotter::MakeFrequencyStrs() //MakeFrequencyStrs
{ {
float freq; float freq;
for(int i=0; i<=m_hdivs; i++) { for(int i=0; i<=m_hdivs; i++) {
freq = m_StartFreq + i*m_freqPerDiv; freq = m_startFreq + i*m_freqPerDiv;
m_HDivText[i].setNum((int)freq); m_HDivText[i].setNum((int)freq);
// StartFreq += m_freqPerDiv;
} }
} }
int CPlotter::XfromFreq(float f) //XfromFreq() int CPlotter::XfromFreq(float f) //XfromFreq()
{ {
// float w = m_WaterfallPixmap.width(); // float w = m_WaterfallPixmap.width();
int x = int(m_w * (f - m_StartFreq)/m_fSpan + 0.5); int x = int(m_w * (f - m_startFreq)/m_fSpan + 0.5);
if(x<0 ) return 0; if(x<0 ) return 0;
if(x>m_w) return m_w; if(x>m_w) return m_w;
return x; return x;
@ -323,8 +321,7 @@ int CPlotter::XfromFreq(float f) //XfromFreq()
float CPlotter::FreqfromX(int x) //FreqfromX() float CPlotter::FreqfromX(int x) //FreqfromX()
{ {
// return float(1000.0 + x*m_binsPerPixel*m_fftBinWidth); return float(m_startFreq + x*m_binsPerPixel*m_fftBinWidth);
return float(x*m_binsPerPixel*m_fftBinWidth);
} }
void CPlotter::SetRunningState(bool running) //SetRunningState() void CPlotter::SetRunningState(bool running) //SetRunningState()
@ -352,16 +349,16 @@ int CPlotter::getPlotGain() //getPlotGain()
return m_plotGain; return m_plotGain;
} }
void CPlotter::SetStartFreq(quint64 f) //SetStartFreq() void CPlotter::setStartFreq(int f) //SetStartFreq()
{ {
m_StartFreq=f; m_startFreq=f;
// resizeEvent(NULL); resizeEvent(NULL);
DrawOverlay(); update();
} }
qint64 CPlotter::startFreq() //startFreq() int CPlotter::startFreq() //startFreq()
{ {
return m_StartFreq; return m_startFreq;
} }
int CPlotter::plotWidth(){return m_WaterfallPixmap.width();} int CPlotter::plotWidth(){return m_WaterfallPixmap.width();}

View File

@ -43,14 +43,14 @@ public:
qint32 m_binsPerPixel; qint32 m_binsPerPixel;
qint32 m_w; qint32 m_w;
void draw(float sw[], int i0); //Update the waterfall void draw(float sw[]); //Update the waterfall
void SetRunningState(bool running); void SetRunningState(bool running);
void setPlotZero(int plotZero); void setPlotZero(int plotZero);
int getPlotZero(); int getPlotZero();
void setPlotGain(int plotGain); void setPlotGain(int plotGain);
int getPlotGain(); int getPlotGain();
void SetStartFreq(quint64 f); void setStartFreq(int f);
qint64 startFreq(); int startFreq();
int plotWidth(); int plotWidth();
void setNSpan(int n); void setNSpan(int n);
void UpdateOverlay(); void UpdateOverlay();
@ -87,7 +87,6 @@ private:
void UTCstr(); void UTCstr();
int XfromFreq(float f); int XfromFreq(float f);
float FreqfromX(int x); float FreqfromX(int x);
qint64 RoundFreq(qint64 freq, int resolution);
QPixmap m_WaterfallPixmap; QPixmap m_WaterfallPixmap;
QPixmap m_2DPixmap; QPixmap m_2DPixmap;
@ -108,14 +107,11 @@ private:
double m_fftBinWidth; double m_fftBinWidth;
double m_dialFreq; double m_dialFreq;
qint64 m_StartFreq;
qint32 m_dBStepSize; qint32 m_dBStepSize;
qint32 m_FreqUnits; qint32 m_FreqUnits;
qint32 m_hdivs; qint32 m_hdivs;
qint32 m_line; qint32 m_line;
qint32 m_fSample; qint32 m_fSample;
qint32 m_i0;
qint32 m_xClick; qint32 m_xClick;
qint32 m_freqPerDiv; qint32 m_freqPerDiv;
qint32 m_nsps; qint32 m_nsps;
@ -128,6 +124,7 @@ private:
qint32 m_txFreq; qint32 m_txFreq;
qint32 m_fMin; qint32 m_fMin;
qint32 m_fMax; qint32 m_fMax;
qint32 m_startFreq;
char m_sutc[6]; char m_sutc[6];

View File

@ -5,22 +5,23 @@ F3 Display keyboard shortcuts
F4 Clear Dx Call and Dx Grid entries F4 Clear Dx Call and Dx Grid entries
Alt+F4 Exit program Alt+F4 Exit program
F5 Display special mouse commands F5 Display special mouse commands
F6 Open next in directory F6 Open next file in directory
Shift+F6 Decode all remaining files in directrory
F11 Move Rx frequency down 1 Hz F11 Move Rx frequency down 1 Hz
Ctrl+F11 Move Rx and Tx frequencies down 1 Hz Ctrl+F11 Move Rx and Tx frequencies down 1 Hz
F12 Move Rx frequency up 1 Hz F12 Move Rx frequency up 1 Hz
Ctrl+F12 Move Rx and Tx frequencies up 1 Hz Ctrl+F12 Move Rx and Tx frequencies up 1 Hz
Shift+F6 Decode remaining files in directory Alt+1-6 Set next transmission to this number on Tab 1
Alt+D Decode again at QSO frequency Alt+D Decode again at QSO frequency
Shift+D Full-bandwidth decode (both windows) Shift+D Full decode (both windows)
Alt+E Erase() Alt+E Erase
Ctrl+F Edit the free text message box Ctrl+F Edit the free text message box
Alt+G Generate standard messages Alt+G Generate standard messages
Alt+H Halt Tx() Alt+H Halt Tx
Ctrl+L Lookup callsign in database, generate standard messages Ctrl+L Lookup callsign in database, generate standard messages
Alt M Monitor() Alt M Monitor
Alt+N Enable Tx() Alt+N Enable Tx
Alt+Q Log QSO() Alt+Q Log QSO
Alt+S Stop() Alt+S Stop monitoring
Alt+T Tune Alt+T Tune
Alt+V Save the most recently completed *.wav file Alt+V Save the most recently completed *.wav file

View File

@ -49,6 +49,8 @@ WideGraph::WideGraph(QWidget *parent) :
ui->widePlot->setBinsPerPixel(nbpp); ui->widePlot->setBinsPerPixel(nbpp);
m_slope=settings.value("Slope",0.0).toDouble(); m_slope=settings.value("Slope",0.0).toDouble();
ui->slopeSpinBox->setValue(m_slope); ui->slopeSpinBox->setValue(m_slope);
ui->widePlot->setStartFreq(settings.value("StartFreq",0).toInt());
ui->fStartSpinBox->setValue(ui->widePlot->startFreq());
settings.endGroup(); settings.endGroup();
} }
@ -75,6 +77,7 @@ void WideGraph::saveSettings()
settings.setValue("Cumulative",ui->widePlot->m_bCumulative); settings.setValue("Cumulative",ui->widePlot->m_bCumulative);
settings.setValue("BinsPerPixel",ui->widePlot->binsPerPixel()); settings.setValue("BinsPerPixel",ui->widePlot->binsPerPixel());
settings.setValue("Slope",m_slope); settings.setValue("Slope",m_slope);
settings.setValue("StartFreq",ui->widePlot->startFreq());
settings.endGroup(); settings.endGroup();
} }
@ -100,16 +103,12 @@ void WideGraph::dataSink2(float s[], float df3, int ihsym,
for (int i=0; i<NSMAX; i++) for (int i=0; i<NSMAX; i++)
splot[i] /= n; //Normalize the average splot[i] /= n; //Normalize the average
n=0; n=0;
int i=int(ui->widePlot->startFreq()/df3 + 0.5);
// int w=ui->widePlot->plotWidth();
int i0=-1; //###
int i=i0;
int jz=5000.0/(nbpp*df3); int jz=5000.0/(nbpp*df3);
for (int j=0; j<jz; j++) { for (int j=0; j<jz; j++) {
float sum=0; float sum=0;
for (int k=0; k<nbpp; k++) { for (int k=0; k<nbpp; k++) {
i++; sum += splot[i++];
sum += splot[i];
} }
swide[j]=sum; swide[j]=sum;
} }
@ -123,7 +122,7 @@ void WideGraph::dataSink2(float s[], float df3, int ihsym,
} }
} }
m_ntr0=ntr; m_ntr0=ntr;
ui->widePlot->draw(swide,i0); ui->widePlot->draw(swide);
} }
} }
@ -312,3 +311,8 @@ void WideGraph::setDialFreq(double d)
m_dialFreq=d; m_dialFreq=d;
ui->widePlot->setDialFreq(d); ui->widePlot->setDialFreq(d);
} }
void WideGraph::on_fStartSpinBox_valueChanged(int n)
{
ui->widePlot->setStartFreq(n);
}

View File

@ -61,6 +61,7 @@ private slots:
void on_spec2dComboBox_currentIndexChanged(const QString &arg1); void on_spec2dComboBox_currentIndexChanged(const QString &arg1);
void on_fMinSpinBox_valueChanged(int n); void on_fMinSpinBox_valueChanged(int n);
void on_slopeSpinBox_valueChanged(double d); void on_slopeSpinBox_valueChanged(double d);
void on_fStartSpinBox_valueChanged(int n);
private: private:
double m_slope; double m_slope;

View File

@ -68,6 +68,50 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item>
<widget class="QSpinBox" name="fStartSpinBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>80</width>
<height>0</height>
</size>
</property>
<property name="suffix">
<string> Hz</string>
</property>
<property name="prefix">
<string>Start </string>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="singleStep">
<number>100</number>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Minimum</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>8</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item> <item>
<widget class="QSpinBox" name="freqSpanSpinBox"> <widget class="QSpinBox" name="freqSpanSpinBox">
<property name="sizePolicy"> <property name="sizePolicy">
@ -256,7 +300,7 @@
<widget class="QDoubleSpinBox" name="slopeSpinBox"> <widget class="QDoubleSpinBox" name="slopeSpinBox">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>60</width> <width>80</width>
<height>0</height> <height>0</height>
</size> </size>
</property> </property>

View File

@ -11,9 +11,11 @@ CONFIG += thread
TARGET = wsjtx TARGET = wsjtx
DESTDIR = ../wsjtx_install DESTDIR = ../wsjtx_install
#DESTDIR = ../qt5_install
VERSION = 1.1 VERSION = 1.1
TEMPLATE = app TEMPLATE = app
DEFINES = QT4 DEFINES = QT4
#DEFINES = QT5
win32 { win32 {
DEFINES += WIN32 DEFINES += WIN32