Haskell è appropriato per l'elaborazione dei segnali, i sistemi di comunicazione e la teoria dell'informazione? [chiuso]

4

Ho lavorato su progetti di Software-Defined Radio per quasi un anno. Questa è un'area che richiede un sacco di elaborazione del segnale (filtri digitali e FFT), teoria della comunicazione (modulazione, equalizzazione e sincronizzazione) e teoria dell'informazione (in particolare, teoria della codifica, come codici Huffman, Linear e Convolutional). Programma principalmente in Matlab (per simulazioni) e C ++ e Python (per applicazioni pratiche che usano GNURadio e USRP).

Come puoi vedere, quelle aree richiedono molti concetti matematici. Dato che ho studiato Haskell, vedo che è un buon linguaggio di programmazione per le applicazioni che implicano una matematica pesante. Sembrava una buona idea programmare in Haskell i problemi nell'area in cui ho lavorato.

D'altro canto, sembra che non ci sia molta gente che lo fa. Sembra che ci sia una libreria Haskell DSP , ma non ci sono molti progetti che la utilizzano disponibile sul web. Ho anche trovato una tesi dove Haskell è stato utilizzato per implementare un Codificatore / decodificatore di Viterbi e sembra una soluzione abbastanza elegante.

Ma mi sembra che le persone nel settore della comunicazione e della ricerca non utilizzino ancora molto Haskell nei loro codici. Forse questo potrebbe essere perché molti di loro non hanno ancora sentito parlare di Haskell.

Quali sarebbero i lati positivi e negativi dell'applicazione di Haskell a quel tipo di problemi? Quali saranno i principali vantaggi di fare SDR in Haskell? Che dire di Haskell potrebbe essere una cattiva scelta per gli SDR? Devo aspettarmi forti punti di dolore usando Haskell per SDR (cosa sono?).

    
posta franchzilla 03.07.2014 - 23:51
fonte

2 risposte

2

Non sarò in grado di fornire risposte a qualsiasi cosa nella tua domanda, ma ti darò quello che so.

Punti buoni

Flessibilità della lingua

Haskell dovrebbe essere una buona lingua per scrivere codice per il dominio SDR:

Oltre ad avere un buon supporto per Embedded Domain-Specific Languages (EDSLs) , il codice Haskell è altamente componibile, il che renderà è facile lavorare con concetti di elaborazione del segnale a un alto livello di astrazione.

Una libreria come Pipes o Conduit renderà semplice / facile creare filtri (come funzioni ) e li uniscono insieme per formare le pipeline di elaborazione. Arrowized Functional Reactive Programming (AFRP) potrebbe essere un altro mezzo per questo fine (Utilizza alcuni pazzi wizard di programmazione circolare sotto il cofano.)

Librerie e codice esterno

Haskell ha quello che ho sentito è un ottimo Foreign Function Interface (FFI) che consente un'interfaccia con il codice C, quindi dovresti avere accesso a molte librerie per eseguire l'elaborazione del segnale attraverso questo. (Non ho usato direttamente la FFI, ma ho usato librerie che hanno.)

Alcune librerie pertinenti all'elaborazione del segnale hanno già wrapper Haskell: la libreria HMatrix (avviso: PDF a caricamento lento) è un wrapper attorno alle librerie LAPACK, BLAS e GSL, i primi due dei quali credo che Matlab utilizzi sotto il cofano. La sintassi del codice Haskell in questa libreria sembra essere facile da imparare per qualcuno che ha familiarità con Matlab (ho fatto un sacco di Matlab a scuola, ho sempre guardato HMatrix, non l'ho usato, ma sembra niiiice ).

Puramente funzionale

Haskell è puramente funzionale, il che rende il test e la verifica del codice più semplice rispetto a un linguaggio imperativo o che supporta la mutevolezza.

Punti critici

Puramente funzionale

Haskell è puramente funzionale, il che significa che la mutabilità può essere complicata e richiede un modo diverso di pensare per fare le cose. Questo non dovrebbe essere un problema troppo grande se si usa un'architettura in stile pipeline usando una delle librerie che ho menzionato sopra.

Pigrizia

Haskell è un linguaggio pigro, il che significa che un valore non viene calcolato finché non provi ad usarlo *. Se hai bisogno di un valore immediato e non è ancora stato calcolato, questo può rovinare tutto.

* Questa è probabilmente una grossolana semplificazione.

Garbage collection

Come per qualsiasi altra lingua che utilizza la garbage collection, esiste la possibilità che possa entrare nel momento sbagliato.

Perché non è in uso?

Penso che potresti avere ragione nel ritenere che le persone semplicemente non ne siano consapevoli in questo campo. Inoltre, Haskell ha una curva di apprendimento abbastanza ripida, quindi le persone probabilmente si limitano a ciò che sanno.

    
risposta data 12.07.2014 - 02:36
fonte
0

In che modo qualcuno utilizzerà il risultato dei tuoi sforzi? Se intendi che gli altri utilizzino il tuo risultato, devi fornire una libreria che possa essere utilizzata dai linguaggi di programmazione tradizionali o lavorare in quella lingua. Se non ti interessa, suppongo che non abbia senso porre la domanda, tranne per il fatto che altri potrebbero trovare il tuo codice più difficile da leggere o non si preoccuperanno di leggerlo. Certamente il software Haskell è più facile da riutilizzare rispetto al software Matlab.

Gli unici punti critici per il linguaggio sono i ritardi nella raccolta dei rifiuti e la garanzia di disporre dei tipi di dati corretti per precisione e velocità matematiche.

    
risposta data 07.07.2014 - 19:20
fonte

Leggi altre domande sui tag