Ejemplo n.º 1
0
		public BatCallViewModel(BatNodeLog log, BatCall batCall, int index)
		{
			Index = index;
			_log = log;
			_batCall = batCall;
			_fftAnalyzer = new FftAnalyzer(2, 5);
		}
Ejemplo n.º 2
0
        public void Recalculate(BatCall call)
        {
            FftResult fftResult = Analyze(call);

            call.DcOffset = fftResult.DcOffset;
            uint maxPeak      = 0;
            int  maxPeakIndex = -1;

            foreach (int peakIndex in fftResult.Peaks)
            {
                uint peakValue = fftResult.FftData[peakIndex];
                if (peakValue > maxPeak)
                {
                    maxPeak      = peakValue;
                    maxPeakIndex = peakIndex;
                }
            }
            if ((maxPeakIndex >= 0) && (maxPeak > 10))
            {
                call.MaxFrequency = (uint)Math.Round(maxPeakIndex * 0.451);
            }
            else
            {
                call.Enabled = false;
            }
        }
Ejemplo n.º 3
0
        public FftResult Analyze(BatCall call)
        {
            FftResult result = new FftResult();

            result.FftData  = BuildFft(call);
            result.DcOffset = result.FftData[0];

            result.Peaks = GetPeaks(result.FftData).Select(p => p.Key).ToArray();
            return(result);
        }
Ejemplo n.º 4
0
		public FftResult Analyze(BatCall call)
		{
			FftResult result = new FftResult();

			result.FftData = BuildFft(call);
			result.DcOffset = result.FftData[0];

			result.Peaks = GetPeaks(result.FftData).Select(p => p.Key).ToArray();
			return result;
		}
Ejemplo n.º 5
0
        public uint[] BuildFft(BatCall call)
        {
            byte[] data = call.FftData;

            uint[] fft = new uint[data.Length / 2];
            for (int i = 0; i < data.Length / 2; i++)
            {
                fft[i] = BitConverter.ToUInt16(data, i * 2);
            }
            return(fft);
        }
Ejemplo n.º 6
0
		public uint[] BuildFft(BatCall call)
		{
			byte[] data = call.FftData;

			uint[] fft = new uint[data.Length / 2];
			for (int i = 0; i < data.Length / 2; i++)
			{
				fft[i] = BitConverter.ToUInt16(data, i * 2);
			}
			return fft;
		}
Ejemplo n.º 7
0
		private void ReadCallRecord(BatNodeLog log, BinaryReader reader)
		{
			BatCall call = new BatCall();

			call.Duration = reader.ReadUInt32();
			call.StartTimeMs = reader.ReadUInt32();
			call.ClippedSamples = reader.ReadUInt16();
			call.MaxPower = reader.ReadUInt16();
			call.MissedSamples = reader.ReadUInt16();

			call.FftData = reader.ReadBytes(512);
			AnalyzeFftData(call);

			log.Calls.Add(call);
		}
Ejemplo n.º 8
0
        private void ReadCallRecordV1(BatNodeLog log, BinaryReader reader)
        {
            BatCall call = new BatCall();

            call.Duration       = reader.ReadUInt32();
            call.StartTimeMs    = reader.ReadUInt32();
            call.ClippedSamples = reader.ReadUInt16();
            call.MaxPower       = reader.ReadUInt16();
            call.MissedSamples  = reader.ReadUInt16();

            call.FftData = reader.ReadBytes(512);

            if (call.Duration > 100000)
            {
                call.Enabled = false;
            }
            AnalyzeFftData(call);

            log.Calls.Add(call);
        }
Ejemplo n.º 9
0
		private void AnalyzeFftData(BatCall call)
		{
			FftResult fftResult = _fftAnalyzer.Analyze(call);
			call.DcOffset = (uint)fftResult.DcOffset;
			uint maxPeak = 0;
			int maxPeakIndex = -1;
			foreach (int peakIndex in fftResult.Peaks)
			{
				uint peakValue = fftResult.FftData[peakIndex];
				if (peakValue > maxPeak)
				{
					maxPeak = peakValue;
					maxPeakIndex = peakIndex;
				}
			}
			if (maxPeakIndex >= 0 && maxPeak > 10)
			{
				call.MaxFrequency = (uint)(maxPeakIndex / 2);
			}
			else
			{
				call.Enabled = false;
			}
		}
Ejemplo n.º 10
0
 private void AnalyzeFftData(BatCall call)
 {
     //_fftAnalyzer.Recalculate(call);
 }