我正在尝试将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}