##// END OF EJS Templates
converge and snrthreshold corrections
imanay -
r1661:0dbcef06f74b
parent child
Show More
@@ -1422,14 +1422,15 class SpectralMoments(Operation):
1422 def run(self, dataOut, proc_type=0):
1422 def run(self, dataOut, proc_type=0):
1423
1423
1424 absc = dataOut.abscissaList[:-1]
1424 absc = dataOut.abscissaList[:-1]
1425 noise = dataOut.noise
1425 #noise = dataOut.noise
1426 nChannel = dataOut.data_pre[0].shape[0]
1426 nChannel = dataOut.data_pre[0].shape[0]
1427 data_param = numpy.zeros((nChannel, 4 + proc_type*3, dataOut.data_pre[0].shape[2]))
1427 nHei = dataOut.data_pre[0].shape[2]
1428 data_param = numpy.zeros((nChannel, 4 + proc_type*3, nHei))
1428
1429
1429 if proc_type == 1:
1430 if proc_type == 1:
1430 fwindow = numpy.zeros(absc.size) + 1
1431 fwindow = numpy.zeros(absc.size) + 1
1431 #b=64
1432 b=64
1432 b=16
1433 #b=16
1433 fwindow[0:absc.size//2 - b] = 0
1434 fwindow[0:absc.size//2 - b] = 0
1434 fwindow[absc.size//2 + b:] = 0
1435 fwindow[absc.size//2 + b:] = 0
1435 type1 = 1 # moments calculation
1436 type1 = 1 # moments calculation
@@ -1457,9 +1458,11 class SpectralMoments(Operation):
1457
1458
1458 if proc_type == 1:
1459 if proc_type == 1:
1459 dataOut.moments = data_param[:,1:,:]
1460 dataOut.moments = data_param[:,1:,:]
1460 dataOut.data_dop = data_param[:,0]
1461 #dataOut.data_dop = data_param[:,0]
1462 dataOut.data_dop = data_param[:,2]
1461 dataOut.data_width = data_param[:,1]
1463 dataOut.data_width = data_param[:,1]
1462 dataOut.data_snr = data_param[:,2]
1464 # dataOut.data_snr = data_param[:,2]
1465 dataOut.data_snr = data_param[:,0]
1463 dataOut.data_pow = data_param[:,6] # to compare with type0 proccessing
1466 dataOut.data_pow = data_param[:,6] # to compare with type0 proccessing
1464 dataOut.spcpar=numpy.stack((dataOut.data_dop,dataOut.data_width,dataOut.data_snr, data_param[:,3], data_param[:,4],data_param[:,5]),axis=2)
1467 dataOut.spcpar=numpy.stack((dataOut.data_dop,dataOut.data_width,dataOut.data_snr, data_param[:,3], data_param[:,4],data_param[:,5]),axis=2)
1465
1468
@@ -1630,7 +1633,7 class SpectralMoments(Operation):
1630 if (smooth is None): smooth = 0
1633 if (smooth is None): smooth = 0
1631 if (type1 is None): type1 = 0
1634 if (type1 is None): type1 = 0
1632 if (fwindow is None): fwindow = numpy.zeros(oldfreq.size) + 1
1635 if (fwindow is None): fwindow = numpy.zeros(oldfreq.size) + 1
1633 if (snrth is None): snrth = -3
1636 if (snrth is None): snrth = -20.0
1634 if (dc is None): dc = 0
1637 if (dc is None): dc = 0
1635 if (aliasing is None): aliasing = 0
1638 if (aliasing is None): aliasing = 0
1636 if (oldfd is None): oldfd = 0
1639 if (oldfd is None): oldfd = 0
@@ -1779,6 +1782,7 class SpectralMoments(Operation):
1779
1782
1780 gaussfn = __curvefit_koki(spec[xvalid], a, ww[xvalid])
1783 gaussfn = __curvefit_koki(spec[xvalid], a, ww[xvalid])
1781 a = gaussfn[1]
1784 a = gaussfn[1]
1785 converge = gaussfn[2]
1782
1786
1783 xvalid = numpy.arange(np)
1787 xvalid = numpy.arange(np)
1784 spec2 = __GAUSSWINFIT1(a)
1788 spec2 = __GAUSSWINFIT1(a)
@@ -1787,7 +1791,7 class SpectralMoments(Operation):
1787 power = a[0] * np
1791 power = a[0] * np
1788 fd = a[1]
1792 fd = a[1]
1789 sigma_fd = gaussfn[3][1]
1793 sigma_fd = gaussfn[3][1]
1790 snr = max(power/ (max(a[3],n0) * len(oldxvalid)), 1e-20)
1794 snr = max(power/ (max(a[3],n0) * len(oldxvalid)) * converge, 1e-20)
1791 w = numpy.abs(a[2])
1795 w = numpy.abs(a[2])
1792 n1 = max(a[3], n0)
1796 n1 = max(a[3], n0)
1793
1797
@@ -1804,7 +1808,8 class SpectralMoments(Operation):
1804 vec_power[ind] = power # to compare with type 0 proccessing
1808 vec_power[ind] = power # to compare with type 0 proccessing
1805
1809
1806 if type1==1:
1810 if type1==1:
1807 return numpy.vstack((vec_fd, vec_w, vec_snr, vec_n1, vec_fp, vec_sigma_fd, vec_power))
1811 #return numpy.vstack((vec_fd, vec_w, vec_snr, vec_n1, vec_fp, vec_sigma_fd, vec_power))
1812 return numpy.vstack((vec_snr, vec_w, vec_fd, vec_n1, vec_fp, vec_sigma_fd, vec_power)) # snr and fd exchanged to compare doppler of both types
1808 else:
1813 else:
1809 return numpy.vstack((vec_snr, vec_power, vec_fd, vec_w))
1814 return numpy.vstack((vec_snr, vec_power, vec_fd, vec_w))
1810
1815
@@ -1837,7 +1842,7 class SpectralMoments(Operation):
1837 stdv = numpy.sqrt(SUMSQ/J - numpy.power(SUM/J,2))
1842 stdv = numpy.sqrt(SUMSQ/J - numpy.power(SUM/J,2))
1838 return RNOISE, stdv
1843 return RNOISE, stdv
1839
1844
1840 def __get_noise1(self, power, fft_avg, TALK=1):
1845 def __get_noise1(self, power, fft_avg, TALK=0):
1841 '''
1846 '''
1842 Rutina para cálculo de ruido por alturas(n0). Similar a IDL
1847 Rutina para cálculo de ruido por alturas(n0). Similar a IDL
1843 '''
1848 '''
General Comments 0
You need to be logged in to leave comments. Login now