Как получить звуковую оболочку с помощью PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как получить звуковую оболочку с помощью Python

Сообщение Anonymous »

Привет, я новичок в Python, а также в анализе звуковых сигналов. Я пытаюсь достать конверт с песней рождения (зебра-зяблик). У него очень быстрые колебания сигнала, и я попробовал другой подход. Например, я попытался построить сигнал и получить конверт со следующей кодовой базой на других примерах, которые я нашел (я добавил комментарии к коду, чтобы понять это):

Код: Выделить всё

#Import the libraries
from pylab import *
import numpy
import scipy.signal.signaltools as sigtool
import scipy, pylab
from scipy.io import wavfile
import wave, struct
import scipy.signal as signal

#Open the txt file and read the wave file (also save it as txt file)

f_out = open('mike_1_44100_.txt', 'w')
w     = scipy.io.wavfile.read("mike_1_44100_.wav") #here your sound file

a=w[1]
f_out.write('#time #z' + '\n')

#I print to check
print 'vector w'
print w[0],w[1]
print w

i=w[1].size
p=numpy.arange(i)*0.0000226 #to properly define the time signal with    the sample rate

print 'vector p:'
print p

x=numpy.dstack([p,a])

print 'vector x:'
print x[0]

#saving file
numpy.savetxt('mike_1_44100_.txt',x[0])

f_out.close()
print 'i:'
print i

# num is the number of samples in the resampled signal.
num= np.ceil(float(i*0.0000226)/0.0015)
print num

y_resample, x_resample = scipy.signal.resample(numpy.abs(a),num, p,axis=0, window=('gaussian',150))

#y_resample, x_resample = scipy.signal.resample(numpy.abs(a), num, p,axis=-1, window=0)

#Aplaying a filter

W1=float(5000)/(float(44100)/2) #the frequency  for the cut over the sample frequency

(b, a1) = signal.butter(4, W1, btype='lowpass')
aaa=a
slp =1* signal.filtfilt(b, a1, aaa)

#Taking the abs value of the signal the resample and finaly aplying the hilbert transform

y_resample2 =numpy.sqrt(numpy.abs(np.imag(sigtool.hilbert(slp, axis=-1)))**2+numpy.abs(np.real(sigtool.hilbert(slp, axis=-1)))**2)

print 'x sampled'
#print x_resample
print 'y sampled'
#print  y_resample

xx=x_resample #[0]
yy=y_resample #[1]

#ploting with some style

plot(p,a,label='Time Signal') #to plot amplitud vs time
#plot(p,numpy.abs(a),label='Time signal')
plot(xx,yy,label='Resampled time signal Fourier technique Gauss window 1.5 ms ', linewidth=3)
#plot(ww,label='Window', linewidth=3)
#plot(p,y_resample2,label='Hilbert transformed sime signal', linewidth=3)

grid(True)
pylab.xlabel("time [s]")
pylab.ylabel("Amplitde")

legend()
show()
Здесь я попробовал две вещи: во-первых, использовать функцию повторной выборки из scipy, чтобы получить огибающую, но у меня возникла проблема с амплитудой сигнала, которую я не понимаю. пока (я загрузил изображение, полученное методом Фурье, но система мне не позволяет):

Второй — использовать преобразование Гильберта для получения конверта (теперь я загрузил изображение с преобразованием Гильберта снова система не позволяет меня) Можно запустить мой код и получить два изображения. Но я поставлю эту ссылку http://ceciliajarne.web.unq.edu.ar/?pag ... eview=true

Теперь «конверт» снова терпит неудачу. Я пробовал фильтровать сигнал, как видел в некоторых примерах, но мой сигнал ослабляется, и я не могу получить огибающую. Может ли кто-нибудь помочь мне с моим кодом или с идеей получше, как получить конверт? В качестве примера можно использовать любую птичью песню (я могу дать вам свою), но мне нужно посмотреть, что произойдет с сложные звуки, а не простые сигналы, потому что они очень разные (с простыми звуками подходят оба метода).

Я также попытался адаптировать код, который нашел: http://nipy.org/nitime/examples/mtm_baseband_power.html

Но я не могу получить правильные параметры для своего сигнала и не понимаю модуляционная часть. Я уже задал вопрос разработчикам кода и жду ответа.

Подробнее здесь: https://stackoverflow.com/questions/308 ... ing-python
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»