为每个文件创建不同采样率的一个时间参考

本文关键字:一个 时间 参考 采样率 文件创建 | 更新日期: 2023-09-27 18:21:08

我的程序读取多个文件,这些文件包含以不同速率采样的时间/值对。我试图使用具有最高采样率的文件作为所有采样率的时间刻度,并从最高采样率文件中输出一个具有唯一时间值的主文件。

每个文件包含时间/值对,如:

1,58

1.5,90

2154

2.5,34

这是我到目前为止的代码:

public void ReadAndWrite(string[] fileNames)
{
    var stopwatch = Stopwatch.StartNew();
    List<StreamReader> readers = fileNames.Select(f => new StreamReader(f)).ToList();
    try
    {
        using (StreamWriter writer = new StreamWriter(tbxOutputFile.Text))
        {
            string line = null;
            // For each measurement in max measurements
            for (int measNum = 0; measNum < numOfRows; measNum++)
            {                        
                // For each file's reader
                for (int i = 0; i < readers.Count; i++)
                {
                    // If line contains something, then add it to line
                    if ((line = readers[i].ReadLine()) != null)
                    {                           
                        // Process line and then write it to file
                        line = ProcessLine(line);
                        writer.Write(line);
                    }
                    else
                    {
                        writer.Write("");
                    }
                    // If it's not the last column, add delimiter
                    if (i < readers.Count - 1)
                        writer.Write(",");
                }
                writer.WriteLine();
                // Update labels
                int val = ((measNum + 1) * 100) / numOfRows;
                string newText = Convert.ToString("Progress: " + val + "% " + "     " + "Measurement #: " + (measNum + 1)
                    + " out of " + numOfRows); // running on worker thread
                this.Invoke((MethodInvoker)delegate
                {
                    // runs on UI thread
                    lblStatus.Text = newText;                            
                    progressBar1.Value = val;
                });
            }
        }
    }
    catch (Exception)
    {
        throw;
    }
    finally
    {
        foreach (var reader in readers)
        {
            reader.Close();
        }
    }
    MessageBox.Show("File successfully created! " + ''n' + "Elapsed time: " + 
        (stopwatch.ElapsedMilliseconds/1000) + " seconds", "Processing Complete");            
}

我想出了下面的伪代码(currentTime是来自每个文件的时间,uniqueTime是来自每次从最高采样文件读取的数组):

// if time value from individual file is same as uniqueTime
if currentTime == uniqueTime
{
    valueToWrite = curr_value // write the current value
}
else // currentTime is not same as uniqueTime
{
    valueToWrite = prev_value // write the previous value
}
timeToWrite = uniqueTime // always write the uniqueTime

执行此伪代码的最佳方式是什么,以便为所有不同的采样率创建唯一的时间参考?很抱歉,如果我的问题令人困惑,如果需要,我可以详细说明。

为每个文件创建不同采样率的一个时间参考

要明确这一点,您不希望在值发生的特定时间显示值,但希望在最高采样源的每个时间点为每个源显示一个值
这应该很简单。在伪代码中:

foreach (ValuePair val in highSampleRateValues) {
    var aggregatedTimePointData;
    aggregatedTimePointData.Add(val.Time, val.Value);
    foreach (ValuePair val2 in lowSampleRateValues) {
        var value = DetermineLatestEntryBackwardFrom(val.Time);
        aggregatedTimePointData.Add(value);
    }
}

通过这种方式,较高密度采样信号的采样率可以作为时钟,但由于来自其他源的值非常接近,但并不完全在记录的时间点上,因此会出现不准确的情况。如果你想减少这些不准确的地方,选择更高的采样率并做同样的事情。您可以随心所欲地接近实际时间点。