public BatCallViewModel(BatNodeLog log, BatCall batCall, int index) { Index = index; _log = log; _batCall = batCall; _fftAnalyzer = new FftAnalyzer(2, 5); }
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; } }
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); }
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; }
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); }
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; }
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); }
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); }
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; } }
private void AnalyzeFftData(BatCall call) { //_fftAnalyzer.Recalculate(call); }