2015-05-08 3 views
0

Я скачал Марпл данные здесь:Примеры спектра не работают?

http://www.ece.rice.edu/dsp/courses/elec532/DATA/

Затем я попытался запустить примеры здесь:

http://thomas-cokelaer.info/software/spectrum/html/user/ref_param.html#module-burg

На первый, я, возможно, думал, что данные были в неправильном формате , поэтому я преобразовал данные, чтобы удалить любые ведущие пробелы и преобразовать пространство между ними в одну запятую с:

cat marple.ascii | sed 's/^[ \t]*//;s/[ \t]*$//' > output.txt 
sed 's/ \{1,\}/,/g' output.txt > marple_comma.dat 

, а затем читает файл с:

marple_data = numpy.loadtxt('marple_comma.dat', delimiter = ',', dtype = numpy.complex128) 

, но я получаю другую ошибку:

TypeError: only length-1 arrays can be converted to Python scalars 

Я попробовал пример ниже. Но я получаю эту ошибку. Что не так?

runfile('/home/idf/marple.py', wdir='/home/idf') 
Traceback (most recent call last): 

    File "<ipython-input-14-e02af4ddfead>", line 1, in <module> 
    runfile('/home/idf/marple.py', wdir='/home/idf') 

    File "/home/idf/anaconda/lib/python2.7/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 682, in runfile 
    execfile(filename, namespace) 

    File "/home/idf/anaconda/lib/python2.7/site-packages/spyderlib/widgets/externalshell/sitecustomize.py", line 78, in execfile 
    builtins.execfile(filename, *where) 

    File "/home/idf/marple.py", line 17, in <module> 
    p() 

    File "/home/idf/anaconda/lib/python2.7/site-packages/spectrum/arma.py", line 314, in __call__ 
    ma_params, rho = ma(self.data, self.ma_order, self.ar_order) 

    File "/home/idf/anaconda/lib/python2.7/site-packages/spectrum/arma.py", line 377, in ma 
    a, rho, _c = yulewalker.aryule(X, M, 'biased') #! Eq. (10.5) 

    File "/home/idf/anaconda/lib/python2.7/site-packages/spectrum/yulewalker.py", line 110, in aryule 
    r = CORRELATION(X, maxlags=order, norm=norm) 

    File "/home/idf/anaconda/lib/python2.7/site-packages/spectrum/correlation.py", line 131, in CORRELATION 
    r[k-1] = sum/float(N) 

ValueError: setting an array element with a sequence. 





import numpy as np 

from pylab import * 
from spectrum import * 

#marple_data = np.genfromtxt('marple.ascii') 
marple_data = numpy.loadtxt('marple.ascii') 

p = pma(marple_data, 15, 30, NFFT=4096) 
p() 
p.plot(sides='centerdc') 

ответ

1

Я думаю, что ваш входной файл содержит действительные и мнимые части, как разделенных пробелами чисел в каждой строке: marple.ascii:

1.349839091 2.011167288 
-2.117270231 0.817693591 
... 
-0.895898521 -0.364855707 

Если вы используете loadtxt для чтения во всем массиве это ISN» достаточно для того, чтобы понять, что эти два столбца являются действительными и мнимыми частями и образуют единое комплексное число из каждой строки.

Если это так, то вы можете прочитать его в качестве 64x2 массива поплавков (ascii, ниже), а затем построить свой сложный массив, data из него:

In [1]: import numpy as np 
In [2]: ascii = np.loadtxt('marple.ascii') 
In [3]: data = ascii[:,0] + 1j*ascii[:,1] 
In [4]: data 
array([ 1.34983909+2.01116729j, -2.11727023+0.81769359j, 
     -1.78642166-1.29169893j, 1.16223633-1.48259807j, 
     ... 
     -0.76273143+0.40897125j, -0.89589852-0.36485571j]) 

альтернатива линии [3 ], если у вас много данных и вы не хотите создавать целый новый массив:

data = ascii.view(dtype=np.complex128)[:,0] 
+0

Спасибо. Я не мог понять, как скрывать воображаемые данные, и это действительно проблема. – Ivan

Смежные вопросы