我正在使用.NET 4.5 / C#6.0开发应用程序,它从硬件设备获取测量数据,该设备也由我的应用程序配置。例如。我使用以下内容配置设备:
并且在我的原始数据的处理管道的末尾,我得到如下的字典,其中密钥是频率和值,例如,以dB为单位的幅度:
key =>值
10k => -3
11k => -3
12k => -3
13k => -3.5
14k => -4
15k => -5
16k => -6
17k => -7
18k => -8
19k => -10
20k => -12
这个字典会“在运行中”更新,因为设备会循环扫描这11个点 这些值一次显示在图表中,这没有问题,因为我只是在新点就绪时更新图表数据(我得到每个新点的事件),但我也有一个数据网格,用户可以显示手动输入点的值([值]表示手动输入),例如:
| A: f | B: mag(db)
Point 1 | [11 kHz] | -3 dB
Point 2 | [16.5 kHz] | -6.5 dB
Point 3 | 18.5 kHz | [-9.5 dB]
Point 1
很容易,因为它恰好击中一个测量点,但对于例如Point 2
用户在A列中手动输入16.5 kHz
,这意味着我需要为其旁边的两个测量点插入B列的值。
大约相同,但Point 3
的另一种方式:用户在B列中手动输入-9.5 dB
,因此我需要找到插值频率,此值将是插值结果。
注意 - 以下约束适用于Point 3
:
-3 dB
,它应该返回10 kHz
Point 2
Point 2
也有效),例如值> -3 dB
返回10 kHz
和值< -12 dB
返回20 kHz
是否有一些快速/优化的方式来获取Point 2
和Point 3
的这些值?
我只能想到每次手动输入值时迭代所有点,然后在每两个点之间进行插值,直到找到给定值。然后在更新其中一个相邻频率时更新B列 注意:该设备每秒可提供高达数百个点。