如何将时态数据归一化为其初始值?

How do I normalize temporal data to their initial values?

我有每 3 秒获取一次的数据。最初,它们总是在一个狭窄的基线范围内开始(即 100±10),但在大约 30 秒后它们的值开始增加。

举个例子。

问题是对于每个实验,由于设备校准的变化,初始基线值可能从 y 轴上的不同点开始(即 100、250、35)。

虽然不同实验中 ~30 秒的相对信号增强表现相同,但可能沿 y 轴存在偏移。

我的目的是测量这些曲线的 AUC。由于实验之间的偏移,它们不可比较,尽管它们在形状和增强率上可能相同。

因此我需要对数据进行归一化,以便无论偏移量如何,它们都具有可比较的基线初始值。这可以设置为 0。

你能给我一些关于如何在 Matlab 上完成归一化的建议吗?

理想情况下,输出数据应具有相对信号增强(相对于基线的百分比)。

例如,上面的基线值将徘徊在 0±10 左右(而不是 ~139 的原始原始值)并且随着增强它们将增加到 ~65%(而不是原始原始值 ~230 ).

示例数据:

 index       SQMean   
_____    ____________

'0'      '139.428574'
'1'      '133.298706'
'2'      '135.961044'
'3'      '143.688309'
'4'      '133.298706'
'5'      '133.181824'
'6'      '134.896103'
'7'      '146.415588'
'8'      '142.324677'
'9'      '128.168839'
'10'     '146.116882'
'11'     '146.766235'
'12'     '134.675323'
'13'     '138.610382'
'14'     '140.558441'
'15'     '128.662338'
'16'     '138.480515'
'17'     '153.610382'
'18'     '156.207794'
'19'     '183.428574'
'20'     '220.324677'
'21'     '224.324677'
'22'     '230.415588'
'23'     '226.766235'
'24'     '223.935059'
'25'     '229.922073'
'26'     '234.389618'
'27'     '235.493500'
'28'     '225.727280'
'29'     '241.623383'
'30'     '225.805191'
'31'     '240.896103'
'32'     '224.090912'
'33'     '230.467529'
'34'     '248.285721'
'35'     '233.779221'
'36'     '225.532471'
'37'     '247.337662'
'38'     '233.000000'
'39'     '241.740265'
'40'     '235.688309'
'41'     '238.662338'
'42'     '236.636368'
'43'     '236.025970'
'44'     '234.818176'
'45'     '240.974030'
'46'     '251.350647'
'47'     '241.857147'
'48'     '242.623383'
'49'     '245.714279'
'50'     '250.701294'
'51'     '229.415588'
'52'     '236.909088'
'53'     '243.779221'
'54'     '244.532471'
'55'     '241.493500'
'56'     '245.480515'
'57'     '244.324677'
'58'     '244.025970'
'59'     '231.987015'
'60'     '238.740265'
'61'     '239.532471'
'62'     '232.363632'
'63'     '242.454544'
'64'     '243.831161'
'65'     '229.688309'
'66'     '239.493500'
'67'     '247.324677'
'68'     '245.324677'
'69'     '244.662338'
'70'     '238.610382'
'71'     '243.324677'
'72'     '234.584412'
'73'     '235.181824'
'74'     '228.974030'
'75'     '228.246750'
'76'     '230.519485'
'77'     '231.441559'
'78'     '236.324677'
'79'     '229.935059'
'80'     '238.701294'
'81'     '236.441559'
'82'     '244.350647'
'83'     '233.714279'
'84'     '243.753250'

接近Shai提到的内容:

blwindow = 1:nrSamp;
DataNorm = 100*(Data/mean(Data(blwindow))-1)

把window设置成合适的大小,你想怎​​么定,就看你的数据了。输出 DataNorm 以 % 为单位。

通常这类问题需要对您正在测量的数据(范围、噪音水平、您是否知道实际数据何时开始等)以及您试图获得的结果有一些更具体的了解。但是,仅根据您的问题并通过查看您的示例图,我会做这样的事情(假设您的数据在两个数组中,timedata):

initialTimeMax = 25; % take first 25 s
baseSample = data(time <= initialTimeMax); % take part of the data corresponding to the first 25 s
baseSampleAverage = mean(baseSample); % take average to deal with noise
data = data - baseSampleAverage;

如果您不知道数据何时开始,可以应用平滑滤波器,然后求导,找到其最大值的 x 位置,并将 initialTimeMax 设置为此 x 位置。