我在Ubuntu 16.04上,目前使用Octave作为Matlab的互惠信号处理。一切都很好,直到我需要使用medfilt1
函数来获得中位数。 Octave生成了一个错误报告,指出我的系统上没有安装信号包。浏览了一下后,我找到了命令
sudo apt-get install octave-signal
我运行了这个命令,它显示了所有下载和安装完美的内容。但是,如果我再次运行八度音阶脚本,则错误仍然存在:
警告:'medfilt1'函数属于Octave Forge的信号包 您已安装但未加载。要加载包,请运行'pkg 从Octave提示符加载信号。
请阅读http://www.octave.org/missing.html以了解具体方法 贡献缺少功能。 警告:来自 第524行第5行未实现 filter-practice.m在第8行第2列 错误:'medfilt1'在第8行第3列附近未定义 错误:来自 filter-practice.m在第8行第2列
分析我试图运行的错误消息pkg load signal
,但终端告诉我没有这样的命令。
找不到命令:pkg
如何在我的系统上安装信号包?
答案 0 :(得分:8)
我会在这里为未来的用户提供一个答案,即使该帖子已经接受了答案,因为它缺少所有相关的详细信息(如果您只对如何通过apt安装软件包感兴趣 - 要显示你的八度音阶,请看结尾处的位。)
要安装Octaveforge上列出的其中一个软件包(有关可用软件包的完整列表,请参阅here),您可以从相应的页面下载特定软件包的.tar.gz
文件(例如signal
包的here),然后转到该文件夹并在 octave 终端发出以下命令:
pkg install signal
或者更方便的是,您可以通过附加-forge
选项,让octave直接从Octaveforge下载包并安装它:
pkg install signal -forge
如果您不喜欢默认位置(通常为~/octave
),在安装之前使用pkg prefix
命令,您可能还需要指定 where 来安装此类软件包包(详见文档)。
安装软件包后,您可以使用pkg list
命令查询已安装的软件包列表; 'loaded'软件包带有星号,例如我的电脑上。
octave:1> pkg list
Package Name | Version | Installation directory
---------------------+---------+-----------------------
fuzzy-logic-toolkit | 0.4.5 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/fuzzy-logic-toolkit-0.4.5
image *| 2.6.1 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/image-2.6.1
io | 2.4.7 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/io-2.4.7
statistics | 1.3.0 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/statistics-1.3.0
要加载包,请使用pkg load
命令;任何'依赖'都将自动加载,例如:
octave:2> pkg load statistics
octave:3> pkg list
Package Name | Version | Installation directory
---------------------+---------+-----------------------
fuzzy-logic-toolkit | 0.4.5 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/fuzzy-logic-toolkit-0.4.5
image *| 2.6.1 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/image-2.6.1
io *| 2.4.7 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/io-2.4.7
statistics *| 1.3.0 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/statistics-1.3.0
以上方法都被视为本地安装。 Octave会在名为octave_packages
的文件中保留已安装软件包的列表,通常可以在八度安装或主文件夹中找到。
如果您已从存储库全局安装软件包,则必须通过链接到相应的octave_packages
文件(通常为/usr/share/octave/octave_packages
)来使用八位字符,使用{ {1}}命令。
例如,我必须从存储库安装pkg global_list
,因为上面的直接选项给了我一个错误。要让它出现在八度音阶的可用包列表中,您必须指定是否存在此类全局安装的pkgs:
odepkg
但是,一般情况下,安装此类软件包本地可能更有用,因为存储库中的软件包版本通常已过时(并且必须每个octave:4> pkg global_list /usr/share/octave/octave_packages
octave:5> pkg list
Package Name | Version | Installation directory
---------------------+---------+-----------------------
fuzzy-logic-toolkit | 0.4.5 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/fuzzy-logic-toolkit-0.4.5
image *| 2.6.1 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/image-2.6.1
io *| 2.4.7 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/io-2.4.7
odepkg | 0.8.5 | /usr/share/octave/packages/odepkg-0.8.5
statistics *| 1.3.0 | /media/tasos/Gandalf/opt/octave-4.2.1/lib/statistics-1.3.0
时间很麻烦);
如果octave中的本地安装因任何原因无法工作(例如,给出编译错误),我只会从linux终端安装全局包。
通过在八度音阶终端中执行pkg global_list
,查看pkg
命令的文档以获取更多详细信息。
答案 1 :(得分:4)
pkg
命令实际上是八度音程的一部分,应该在八度音程内运行,而不是从shell终端运行。
这个答案归功于这个thread中的成员,但由于他们同样在扩展评论中得出结论并且最终没有发布答案,也许这会发现其他一些人会陷入困境这个陷阱:)