From 2deccb036280e0bc99316e360df9a8c6103524b8 Mon Sep 17 00:00:00 2001 From: Joe Taylor Date: Fri, 26 Oct 2012 14:03:43 +0000 Subject: [PATCH] Implement adding Tx audio noise via "TxSNR". git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@2693 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- WSJT-X_Quick_Start_Guide.docx | Bin 173604 -> 176010 bytes mainwindow.cpp | 9 ++++++- soundout.cpp | 45 ++++++++++++++++++++++------------ soundout.h | 6 +++-- wsjtx.iss | 4 ++- 5 files changed, 44 insertions(+), 20 deletions(-) diff --git a/WSJT-X_Quick_Start_Guide.docx b/WSJT-X_Quick_Start_Guide.docx index b452ca03706a29bce1c5b4df8294e67c62b985cc..b3ed855ea25064ccc9d1a224d3a5008e69545cde 100644 GIT binary patch delta 12050 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 T00~Nxp9+E0a7X2TRRRA8HJR-^ delta 9644 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 + double snr=t.mid(1,5).toDouble(); + if(snr>0.0 or snr < -50.0) snr=99.0; + soundOutThread.setTxSNR(snr); + qDebug() << t << snr; soundOutThread.start(QThread::HighPriority); } } @@ -1264,6 +1268,9 @@ void MainWindow::on_tx6_editingFinished() //tx6 edited { QString t=ui->tx6->text(); msgtype(t, ui->tx6); + double snr=t.mid(1,5).toDouble(); + if(snr>0.0 or snr < -50.0) snr=99.0; + soundOutThread.setTxSNR(snr); } void MainWindow::on_dxCallEntry_textChanged(const QString &t) //dxCall changed diff --git a/soundout.cpp b/soundout.cpp index 12024d068..c1b2a4285 100644 --- a/soundout.cpp +++ b/soundout.cpp @@ -12,12 +12,13 @@ extern double outputLatency; typedef struct //Parameters sent to or received from callback function { - int nsps; - int ntrperiod; - int ntxfreq; - bool txOK; - bool txMute; - bool bRestart; + double txsnrdb; + int nsps; + int ntrperiod; + int ntxfreq; + bool txOK; + bool txMute; + bool bRestart; } paUserData; //--------------------------------------------------------------- d2aCallback @@ -35,6 +36,8 @@ extern "C" int d2aCallback(const void *inputBuffer, void *outputBuffer, static double phi=0.0; static double dphi; static double freq; + static double snr; + static double fac; static int ic=0; static short int i2; @@ -44,27 +47,29 @@ extern "C" int d2aCallback(const void *inputBuffer, void *outputBuffer, int mstr = ms % (1000*udata->ntrperiod ); if(mstr<1000) return 0; ic=(mstr-1000)*12; -// qDebug() << "Start at:" << 0.001*mstr << udata->ntxfreq; udata->bRestart=false; } int isym=ic/udata->nsps; if(isym>=85) return 0; freq=udata->ntxfreq + itone[isym]*baud; dphi=twopi*freq/12000.0; -/* - if(ic<10000) qDebug() << "a" << ic << udata->nsps << itone[0] - << itone[1] << itone[2] << itone[3] << itone[4] - << itone[5] << itone[6] << itone[7] << itone[8] - << itone[9] << itone[10] << itone[11] << itone[12] - << itone[13] << itone[14] << itone[15] << itone[16]; - */ - //if(ic<10000) qDebug() << ic << isym << freq << dphi << phi << i2; + if(udata->txsnrdb < 0.0) { + snr=pow(10.0,0.05*(udata->txsnrdb-1.0)); + fac=3000.0; + if(snr>1.0) fac=3000.0/snr; + } - for(int i=0 ; itwopi) phi -= twopi; i2=32767.0*sin(phi); // i2 = 500.0*(i2/32767.0 + 5.0*gran()); //Add noise (tests only!) + if(udata->txsnrdb < 0.0) { + int i4=fac*(gran() + i2*snr/32768.0); + if(i4>32767) i4=32767; + if(i4<-32767) i4=-32767; + i2=i4; + } /* if(udata->txMute) i2=0; if(!udata->txOK) i2=0; @@ -97,6 +102,7 @@ void SoundOutThread::run() return; } + udata.txsnrdb=99.0; udata.nsps=m_nsps; udata.ntrperiod=m_TRperiod; udata.ntxfreq=m_txFreq; @@ -127,6 +133,7 @@ void SoundOutThread::run() qe = quitExecution; if (qe) break; + udata.txsnrdb=m_txsnrdb; udata.nsps=m_nsps; udata.ntrperiod=m_TRperiod; udata.ntxfreq=m_txFreq; @@ -154,3 +161,9 @@ void SoundOutThread::setTxFreq(int n) { m_txFreq=n; } + + +void SoundOutThread::setTxSNR(double snr) +{ + m_txsnrdb=snr; +} diff --git a/soundout.h b/soundout.h index 60f275f9c..16a6b5f93 100644 --- a/soundout.h +++ b/soundout.h @@ -27,16 +27,18 @@ public: void setOutputDevice(qint32 n); void setPeriod(int ntrperiod, int nsps); void setTxFreq(int n); + void setTxSNR(double snr); bool quitExecution; //If true, thread exits gracefully // Private members private: + double m_txsnrdb; //if < 0, add noise to Tx audio qint32 m_nDevOut; //Output device number - bool m_txOK; //Enable Tx audio - bool m_txMute; //Mute temporarily qint32 m_TRperiod; //T/R period (s) qint32 m_nsps; //Samples per symbol (at 12000 Hz) qint32 m_txFreq; + bool m_txOK; //Enable Tx audio + bool m_txMute; //Mute temporarily }; #endif diff --git a/wsjtx.iss b/wsjtx.iss index 525fb8a1b..9b5fd3e94 100644 --- a/wsjtx.iss +++ b/wsjtx.iss @@ -10,7 +10,9 @@ Source: "c:\Users\joe\wsjt\wsjtx_install\wsjtx.exe"; DestDir: "{app}" Source: "c:\Users\joe\wsjt\wsjtx_install\wsjt.ico"; DestDir: "{app}" Source: "c:\Users\joe\wsjt\wsjtx_install\afmhot.dat"; DestDir: "{app}"; Source: "c:\Users\joe\wsjt\wsjtx_install\blue.dat"; DestDir: "{app}"; -Source: "c:\Users\joe\wsjt\wsjtx_install\WSJT-X_Quick_Start_Guide.pdf"; DestDir: "{app}"; +Source: "c:\Users\joe\wsjt\wsjtx_install\met8.21"; DestDir: "{app}"; +Source: "c:\Users\joe\wsjt\wsjtx_install\CALL3.TXT"; DestDir: "{app}"; +Source: "c:\Users\joe\wsjt\wsjtx\WSJT-X_Quick_Start_Guide.pdf"; DestDir: "{app}"; Source: "c:\Users\joe\wsjt\QtSupport\*.dll"; DestDir: "{sys}"; Flags: onlyifdoesntexist Source: "c:\Users\joe\wsjt\wsjtx_install\save\000000_0000.wav"; DestDir: "{app}\save";