iOS在最大振幅未知时,如何为热/冷光谱图选择颜色?
我在看aurio touch超声波图的例子,看到它显示不同的FFT频带,这取决于它们的大小,颜色范围从蓝色到紫色到红色到白色。当没有声音时,图形为黑色。对于低强度声音,不同的波段显示蓝色。当声音强度增加时,颜色变得“更热”——变成红白热。这有助于用户轻松查看正在发生的事情 我需要关于如何在不确切知道信号最大幅度的情况下实现类似颜色编码算法的建议。 我曾试图创造类似的东西,但迄今为止成功有限。这是我正在使用的代码: 预计算不同FFT幅度的颜色iOS在最大振幅未知时,如何为热/冷光谱图选择颜色?,ios,objective-c,fft,color-mapping,spectrogram,Ios,Objective C,Fft,Color Mapping,Spectrogram,我在看aurio touch超声波图的例子,看到它显示不同的FFT频带,这取决于它们的大小,颜色范围从蓝色到紫色到红色到白色。当没有声音时,图形为黑色。对于低强度声音,不同的波段显示蓝色。当声音强度增加时,颜色变得“更热”——变成红白热。这有助于用户轻松查看正在发生的事情 我需要关于如何在不确切知道信号最大幅度的情况下实现类似颜色编码算法的建议。 我曾试图创造类似的东西,但迄今为止成功有限。这是我正在使用的代码: 预计算不同FFT幅度的颜色 colorMapGreen = [[NSMutabl
colorMapGreen = [[NSMutableDictionary alloc] initWithCapacity:256];
for(int i = 0; i<256; i ++)
{
[colorMapGreen setObject:[UIColor colorWithHue:0.2 saturation:1 brightness:(i/256.0) alpha:1] forKey:[NSNumber numberWithInt:i]];
}
colorMapGreen=[[NSMutableDictionary alloc]initWithCapacity:256];
对于(int i=0;i这是你必须自己做的事情;如果音频不是实时的,那么你可以将其正常化,否则你只需要给用户一个增益旋钮。如果你正在使用音频并且AudioUnit
可用,你可以对FFT的输入应用一个严重的压缩器,作为自动增益校正的一种形式。需要覆盖较宽动态范围的彩色贴图通常使用缩放对数(幅值)而不是绝对幅值进行着色,以索引到贴图表或方程式中。发现此热图代码具有显示颜色范围的一些数学:
magnitude=sqrt(magnitudes[i]);
if(magnitude<4000)
{
//0 to 128
index = magnitude*0.0213;
}else if(magnitude < 15000)
{
//to 168
index = magnitude*0.0112;
}else if(magnitude < 30000)
{
//to 196
index = magnitude*0.00653;
}else if(magnitude < 100000)
{
//to 228
index = magnitude*0.00228;
}else if(magnitude < 10000000)
{
index = magnitude*0.0000256;
}else
{
((UIView*)[self.markerViews objectAtIndex:i]).backgroundColor = [UIColor whiteColor];
}
((UIView*)[self.markerViews objectAtIndex:i]).backgroundColor = [colorMapGreen objectForKey:[NSNumber numberWithInt:index]];