首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell适合于信号处理、通信系统和信息论吗?

Haskell适合于信号处理、通信系统和信息论吗?
EN

Software Engineering用户
提问于 2014-07-03 21:51:53
回答 2查看 2.1K关注 0票数 4

我已经从事软件无线电项目将近一年了.这是一个需要大量信号处理(数字滤波器和FFT)、通信理论(调制、均衡和同步)和信息论(特别是编码理论,如Huffman、线性和卷积码)的领域。我主要用Matlab (用于仿真)、C++和Python (使用GNURadio和USRP的实际应用程序)编写程序。

正如你所看到的,这些领域需要很多数学概念。当我一直在研究Haskell时,我发现它是一种很好的编程语言,对于涉及大量math.It的应用程序来说,在Haskell中编程似乎是一个好主意,因为我一直在研究这个领域的问题。

另一方面,似乎没有很多人这样做。似乎有一个Haskell库,但没有多少项目使用它在网络上可用。我还找到了一个论文,其中Haskell用于实现Viterbi编码器/解码器,这似乎是一个非常优雅的解决方案。

但在我看来,在通信行业和研究领域的人们仍然没有在他们的代码中使用大量的Haskell。也许这可能是因为他们中的许多人还没听说过Haskell。

将Haskell应用于这些问题会有什么好处和缺点?在Haskell做特别提款权的主要好处是什么?对特别提款权来说,哈斯克尔会做个糟糕的选择吗?我是否应该期望使用Haskell作为SDR的严重疼痛点(它们是什么?)

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2014-07-12 00:36:16

我不能回答你问题中的所有问题,但我会告诉你我所知道的。

优点

语言

的灵活性

Haskell应该是为SDR域编写代码的好语言:

除了对嵌入式领域专用语言(EDSLs)的良好支持外,Haskell代码还具有高度的可组合性,这将使在高抽象级别上处理信号处理概念变得容易。

管道导管这样的库将使创建过滤器(作为函数)并将它们链接在一起形成处理管道变得简单/容易。undefined可能是实现这一目标的另一种方法。(它在引擎盖下使用了一些疯狂的循环编程魔法。)

库和外部代码

我听说Haskell是一个非常好的外部功能接口(FFI),它允许它与C代码进行接口,因此您应该可以访问许多库,以便通过它进行信号处理。(我本人并没有直接使用FFI,但我使用了有FFI的库。)

一些与信号处理相关的库已经有了Haskell:H矩阵库 (警告:慢速加载PDF)是LAPACK、BLAS和GSL库的包装器,我相信Matlab使用的前两个库就在幕后。对于熟悉Matlab的人来说,这个库中Haskell代码的语法似乎应该很容易掌握(我在学校里做了很多Matlab;我只看过HMatrix,没有使用它,但它看起来很不错)。

纯函数

Haskell是纯粹的功能,它使测试和验证代码比使用命令式语言或支持可变的语言更容易。

坏点

纯函数

Haskell纯粹是功能性的,这意味着易变是很棘手的,完成任务需要一种不同的思维方式。如果使用我前面提到的库之一的管道式体系结构,这应该不会是太大的问题。

惰性

Haskell是一种懒惰的语言,这意味着在尝试使用它*之前不会计算值。如果你需要一个正确的值,而它还没有被计算出来,这可能会把事情搞砸。

*这可能是过于简单化了。

垃圾收集

与任何使用垃圾收集的语言一样,它可能在错误的时间出现。

为什么不使用?

我认为你可能是正确的,因为人们根本没有意识到这一领域。此外,Haskell有一个相当陡峭的学习曲线,所以人们可能只是坚持他们所知道的。

票数 3
EN

Software Engineering用户

发布于 2014-07-07 17:20:37

有人会怎样利用你努力的结果呢?如果您想让其他人使用您的结果,您必须提供一个可以从主流编程语言中使用的库,或者使用该语言工作。如果您不关心这个问题,我想问这个问题是没有意义的,只是其他人可能会发现您的代码更难阅读,或者他们不会费心阅读它。当然,Haskell软件比Matlab软件更容易重用。

语言的唯一痛点是垃圾收集延迟,并确保您有正确的数据类型来提高数学精度和速度。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/246822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档