iOS 如何在最大震级未知时为热/冷频谱图选择颜色?

标签 ios objective-c fft color-mapping spectrogram

我正在查看 aurio 触摸超声图示例,发现它显示了不同的 FFT 频带,具体取决于它们的幅度,颜色范围从蓝色到紫色到红色再到白色。当没有声音时,图形为黑色。对于低强度声音,不同的波段显示蓝色。当声音幅度增加时,颜色变得“更热”——变成红白热。这有助于用户轻松查看正在发生的事情。

我需要关于如何在不知道信号的最大幅度将是多少的情况下实现类似颜色编码算法的建议。

Aurio touch sonogram example

我曾尝试创建类似的东西,但到目前为止收效甚微。这是我正在使用的代码:

预先计算不同幅度的 FFT 的颜色

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]];

        }

我遇到的问题是我不知道我将看到的信号的最大幅度是多少。它变化很大 - 从 12000 到 50000。如果我尝试调整我的颜色映射,结果要么太暗要么太亮,而且没有真正的描述性。

以下是我尝试区分不同幅度带的方法。我真的希望低端(低于 4000)出现并与其他频段相比可见。

 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]];

谁能建议一种看起来更接近 AurioTouch 的冷热示例的颜色映射算法的实现?

这是我的代码显示的内容: enter image description here

最佳答案

需要覆盖宽动态范围的颜色图通常使用缩放的对数(幅度)而不是绝对幅度进行着色,以索引到映射表或方程式中。

关于iOS 如何在最大震级未知时为热/冷频谱图选择颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499486/

相关文章:

ios - Appcelerator Titanium iOS 分发错误

ios - 背景颜色错误的状态栏

iphone - iOS - 检测震动强度

objective-c - 减少 objc_msgSend 和保留/释放调用

ios - 如何根据对应的UIImageView的尺寸来决定1x、2x、3x的图片尺寸?

iphone - 对 subview 上的组进行 HitTest

c - DSP 的快速二维卷积

ios - 杀死应用实例的回调方法是什么?

image-processing - 如何从 Aforgenet 中的 FFT 中提取实部/虚部?

matlab - 通过 FFT 执行 2D 卷积时的奇怪行为