| 
									
										
										
										
											2022-12-04 10:17:02 -05:00
										 |  |  | #include "getfile.h"
 | 
					
						
							|  |  |  | #include <QDir>
 | 
					
						
							|  |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <stdlib.h>
 | 
					
						
							|  |  |  | #include <math.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-08 18:58:10 -05:00
										 |  |  | extern qint16 id[2*60*96000]; | 
					
						
							| 
									
										
										
										
											2022-12-04 10:17:02 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | void getfile(QString fname, bool xpol, int dbDgrd) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int npts=2*56*96000; | 
					
						
							|  |  |  |   if(xpol) npts=2*npts; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Degrade S/N by dbDgrd dB -- for tests only!!
 | 
					
						
							|  |  |  |   float dgrd=0.0; | 
					
						
							|  |  |  |   if(dbDgrd<0) dgrd = 23.0*sqrt(pow(10.0,-0.1*(double)dbDgrd) - 1.0); | 
					
						
							|  |  |  |   float fac=23.0/sqrt(dgrd*dgrd + 23.0*23.0); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   memset(id,0,2*npts); | 
					
						
							|  |  |  |   char name[80]; | 
					
						
							|  |  |  |   strcpy(name,fname.toLocal8Bit()); | 
					
						
							|  |  |  |   FILE* fp=fopen(name,"rb"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if(fp != NULL) { | 
					
						
							|  |  |  |     auto n = fread(&datcom_.fcenter,sizeof(datcom_.fcenter),1,fp); | 
					
						
							| 
									
										
										
										
											2023-01-24 14:43:29 -05:00
										 |  |  | //    qDebug() << "aa0" << sizeof(datcom_.fcenter) << n << datcom_.fcenter;
 | 
					
						
							| 
									
										
										
										
											2022-12-04 10:17:02 -05:00
										 |  |  |     n = fread(id,2,npts,fp); | 
					
						
							|  |  |  |     Q_UNUSED (n); | 
					
						
							|  |  |  |     int j=0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if(dbDgrd<0) { | 
					
						
							|  |  |  |       for(int i=0; i<npts; i+=2) { | 
					
						
							|  |  |  |         datcom_.d4[j++]=fac*((float)id[i] + dgrd*gran()); | 
					
						
							|  |  |  |         datcom_.d4[j++]=fac*((float)id[i+1] + dgrd*gran()); | 
					
						
							| 
									
										
										
										
											2022-12-12 18:52:45 -05:00
										 |  |  | //        if(!xpol) j+=2;               //Skip over d4(3,x) and d4(4,x)
 | 
					
						
							| 
									
										
										
										
											2022-12-04 10:17:02 -05:00
										 |  |  |       } | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       for(int i=0; i<npts; i+=2) { | 
					
						
							|  |  |  |         datcom_.d4[j++]=(float)id[i]; | 
					
						
							|  |  |  |         datcom_.d4[j++]=(float)id[i+1]; | 
					
						
							| 
									
										
										
										
											2022-12-12 18:52:45 -05:00
										 |  |  | //        if(!xpol) j+=2;               //Skip over d4(3,x) and d4(4,x)
 | 
					
						
							| 
									
										
										
										
											2022-12-04 10:17:02 -05:00
										 |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     fclose(fp); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     datcom_.ndiskdat=1; | 
					
						
							|  |  |  |     int nfreq=(int)datcom_.fcenter; | 
					
						
							| 
									
										
										
										
											2022-12-11 08:35:28 -05:00
										 |  |  |     if(nfreq!=144 and nfreq != 432 and nfreq != 1296) datcom_.fcenter=1296.080; | 
					
						
							| 
									
										
										
										
											2022-12-04 10:17:02 -05:00
										 |  |  |     int i0=fname.indexOf(".tf2"); | 
					
						
							|  |  |  |     if(i0<0) i0=fname.indexOf(".iq"); | 
					
						
							|  |  |  |     datcom_.nutc=0; | 
					
						
							|  |  |  |     if(i0>0) { | 
					
						
							|  |  |  |       datcom_.nutc=100*fname.mid(i0-4,2).toInt() + fname.mid(i0-2,2).toInt(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void savetf2(QString fname, bool xpol) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int npts=2*56*96000; | 
					
						
							|  |  |  |   if(xpol) npts=2*npts; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   qint16* buf=(qint16*)malloc(2*npts); | 
					
						
							|  |  |  |   char name[80]; | 
					
						
							|  |  |  |   strcpy(name,fname.toLocal8Bit()); | 
					
						
							|  |  |  |   FILE* fp=fopen(name,"wb"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if(fp != NULL) { | 
					
						
							|  |  |  |     fwrite(&datcom_.fcenter,sizeof(datcom_.fcenter),1,fp); | 
					
						
							|  |  |  |     int j=0; | 
					
						
							|  |  |  |     for(int i=0; i<npts; i+=2) { | 
					
						
							|  |  |  |       buf[i]=(qint16)datcom_.d4[j++]; | 
					
						
							|  |  |  |       buf[i+1]=(qint16)datcom_.d4[j++]; | 
					
						
							| 
									
										
										
										
											2022-12-12 18:52:45 -05:00
										 |  |  | //      if(!xpol) j+=2;               //Skip over d4(3,x) and d4(4,x)
 | 
					
						
							| 
									
										
										
										
											2022-12-04 10:17:02 -05:00
										 |  |  |     } | 
					
						
							|  |  |  |     fwrite(buf,2,npts,fp); | 
					
						
							|  |  |  |     fclose(fp); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   free(buf); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Generate gaussian random float with mean=0 and std_dev=1 */ | 
					
						
							|  |  |  | float gran() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   float fac,rsq,v1,v2; | 
					
						
							|  |  |  |   static float gset; | 
					
						
							|  |  |  |   static int iset; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if(iset){ | 
					
						
							|  |  |  |     /* Already got one */ | 
					
						
							|  |  |  |     iset = 0; | 
					
						
							|  |  |  |     return gset; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   /* Generate two evenly distributed numbers between -1 and +1
 | 
					
						
							|  |  |  |    * that are inside the unit circle | 
					
						
							|  |  |  |    */ | 
					
						
							|  |  |  |   do { | 
					
						
							|  |  |  |     v1 = 2.0 * (float)rand() / RAND_MAX - 1; | 
					
						
							|  |  |  |     v2 = 2.0 * (float)rand() / RAND_MAX - 1; | 
					
						
							|  |  |  |     rsq = v1*v1 + v2*v2; | 
					
						
							|  |  |  |   } while(rsq >= 1.0 || rsq == 0.0); | 
					
						
							|  |  |  |   fac = sqrt(-2.0*log(rsq)/rsq); | 
					
						
							|  |  |  |   gset = v1*fac; | 
					
						
							|  |  |  |   iset++; | 
					
						
							|  |  |  |   return v2*fac; | 
					
						
							|  |  |  | } |