如何把数据进行对数处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何把数据进行对数处理相关的知识,希望对你有一定的参考价值。

如何把数据进行对数处理

参考技术A “添加趋势线”,再选择要拟合的曲线的种类,可以拟合成直线,指数、对数、幂函数多种形式,不知道你对数据拟合的要求怎么样,但是Excel的实验数据处理功能比较有限,可能满足不了你的要求,想处理比较复杂的数据可以用Matlab等专业科学数据处理计算软件,这个我没有用过,也不是很容易自己就能用的,可以找使用很熟练的人帮忙。 参考技术B 使用库函数
log
函数原型 #include<math.h>
float log(float x);
参数 x:浮点数。
功能说明 求X的自然对数。
返回值 X的自然对数值,浮点数。
log10
函数原型 #include<math.h>
float log10(float x);
参数 x:浮点数。
功能说明 求x的以10为底得常用对数值。
返回值 X的以10为底得对数值,浮点数。本回答被提问者采纳

如何以对数方式绘制数据

【中文标题】如何以对数方式绘制数据【英文标题】:How to plot data logarithmically 【发布时间】:2015-06-30 15:23:04 【问题描述】:

我已经对音频信号进行了 FFT,并希望以这样的对数刻度绘制结果

http://abletonuniverse.altervista.org/wp-content/uploads/2013/04/Spectrum.jpg

但由于某种原因,我无法弄清楚如何缩放数据以适应该对数曲线(从 0 开始,以奈奎斯特频率结束,即采样率/块大小)。

目前这就是我所拥有的

CGContextMoveToPoint(context, 0, rect.size.height);

// Skip the DC Offset (index 0)
for (int i = 1; i < _bins; i++) 
    // Get frequency from bin
    float binFreq = i * 44100.0 / (_bins * 2);

    // Map to rect coordinate space
    float x = log10f(binFreq) * rect.size.width / log10f(44100.0 / 2);
    float y = _freqArray[i] * rect.size.height / -130.0;

    // Draw line
    CGContextAddLineToPoint(context, x, y);

我的数据在 _freqArray 中以 0 到 ~-130 之间的 512 dB 点的形式出现。忽略绘制点的 y 分量。

我的数据没有正确缩放,因为我的第一个 bin (~43 hz) 是 log10(43)= 1.633,而图表的末尾是 log10(22050) = 4.3,所以我的第一个 bin 之间的空间被占用了三分之一的窗户。重要的是,我不只是将我的第一个 bin 放在窗口的最左侧,最左侧必须为 0。

有人知道将数据缩放到如图所示的整齐对数箱的正确方法吗?它们有三个整齐的箱子,代表 10 个数量级,并且方便地在 22050 结束。

作为参考,这就是我现在所拥有的,您可以看到光谱左侧的长直线。线路中的第一个扭结是 43 hz,即我的第一个 bin。我还没有建立一个网格,但是当我弄清楚缩放比例时就会出现。

【问题讨论】:

【参考方案1】:

0Hz 频率不能显示在对数刻度频率轴上。您引用的图表中显示的左侧对应于 10Hz。您可以映射频率坐标,以使此选定的最小频率(例如 minFrequencyToDisplay=10Hz)以 x=0 的值绘制,最后一个 bin 以 x=rect.size.width-1 的值绘制,如下所示:

// Map to rect coordinate space
float logMinFreq = log10f(minFrequencyToDisplay);
float x = (log10f(binFreq)-logMinFreq ) * (rect.size.width-1) /
          (log10f(44100.0 / 2)-logMinFreq );

100Hz、1kHz 和 10kHz 的网格线可以通过相同的公式获得。

【讨论】:

完美运行,谢谢,我不明白我们无法在对数放置的图表上显示 0Hz 频率,谢谢! 好的,谢谢,但这里没有展示如何使用零频率。 log10( 0 ) 未定义。但是如果我的 fft 大小是 1024 和采样率 44100 怎么办。那么我的最低 10h 由 freqBin 零描述。那么怎么画呢?

以上是关于如何把数据进行对数处理的主要内容,如果未能解决你的问题,请参考以下文章

数据标准化-对数处理

特征预处理-对数变换

【数据分析】-005-数据预处理-数据变换

对数变换

【时间序列分析】为啥要做季节调整?对数处理?差分?(理论篇)

特征处理方法