pgfmath中的Mel尺度转换,小数点问题

pgfmath中的Mel尺度转换,小数点问题

我正在尝试将pgfmath赫兹频率转换为梅尔比例。我正在尝试实现一个公式,我有 Java 源代码,并且我之前已在 XSLT 中成功实现过。我的尝试pgfmath产生了我期望的结果,最高可达 1000,之后小数位比我期望的要少三位。下面是一个演示该问题的小型 latex 文件。它包括公式的 Java 和 XSLT 版本。我是新手pgfmath(但经常使用pgf),我的数值数学技能已经停滞多年,所以现在我相当无知。

例子:

\documentclass{article}
\usepackage{pgfmath}
\usepackage{pgffor}
% java code borrowed from sphinx4 MelFrequencyFilterBank.java: 
% (2595.0 * (Math.log(1.0 + inputFreq / 700.0) / Math.log(10.0)))
% Implemented in XSLT as follows:
% <xsl:function name="local:hz2mel">
%     <xsl:param name="inputFreq" as="xs:double"/>
%     <xsl:value-of select="2595.0 * (math:log(1.0 + $inputFreq div 700.0)) div math:log(10.0)"/>
% </xsl:function>
% Attempt to implement in pgfmath
\newcommand{\hztomel}[1]{%
  \pgfmathparse{2595.0*ln(1+#1/700)/ln(10)}%
  \pgfmathresult%
}
\begin{document}
\noindent
\foreach \x in {0, 200, 400, 1000, 1001, 2000, 5000,10000}
         {\x{} $\rightarrow$ \hztomel{\x}\\}
\end{document}

相关内容