11-22-2014, 02:22 AM
Как первый пример что можно сделать - затянуть звуковой файл и провести пару операций с ним. Для жтого кликаем на "новую записную книжку" и вводим такой код:
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
from scipy import signal
from scipy.io import wavfile
fs, sig = wavfile.read('EXIT.wav')
print fs
print sig.shape
plt.figure(figsize=(20,5))
plot( sig[0: 100000])
plt.xlabel('Sample')
plt.ylabel('Mag')
n_steps = (np.power(2, 16))
offset = 1000
freq = linspace(0, fs, n_steps)
window = np.zeros((n_steps, 2))
window[:, 0] = (np.blackman(n_steps))
window[:, 1] = (np.blackman(n_steps))
spectr = np.zeros((n_steps, 2))
spectr[:, :] = np.float64(np.multiply(window[:, :], sig[offset: offset + n_steps ,:] ))
spectrum = np.zeros((n_steps, 2))
print spectrum.shape
for i in range(2):
spectrum[:, i] = (20*np.log10(np.absolute(np.fft.fft(spectr[:, i])) + 1e-15) )
spectrum[:, i] -= np.amax(spectrum)
figure()
plt.figure(figsize=(15,7))
plt.plot(freq, spectrum[:, :]);
plt.xscale('log')
plt.xlim(1e2,fs/2)
plt.ylim(-150, 0)
plt.grid(which='both')
xlabel('Freq, Hz');
ylabel('dB');
print 'ch0 max sample = {} '.format(np.amax(sig[: ,0]))
print 'ch0 min sample = {} '.format(np.amin(sig[: ,0]))
print 'ch1 max sample = {} '.format(np.amax(sig[: ,1]))
print 'ch1 min sample = {} '.format(np.amin(sig[: ,1]))
Для удобства не обязательно вводить все это в одну ячейку, а можно разбить на несколько. Ячейки исполняются последовательно по одной, с нажатием шифт+энтер
На выходе это даст пару графиков, сам вид вейвформы (точнее ее части) и fft куска фонограммы
import numpy as np
import scipy as sp
import matplotlib.pyplot as plt
from scipy import signal
from scipy.io import wavfile
fs, sig = wavfile.read('EXIT.wav')
print fs
print sig.shape
plt.figure(figsize=(20,5))
plot( sig[0: 100000])
plt.xlabel('Sample')
plt.ylabel('Mag')
n_steps = (np.power(2, 16))
offset = 1000
freq = linspace(0, fs, n_steps)
window = np.zeros((n_steps, 2))
window[:, 0] = (np.blackman(n_steps))
window[:, 1] = (np.blackman(n_steps))
spectr = np.zeros((n_steps, 2))
spectr[:, :] = np.float64(np.multiply(window[:, :], sig[offset: offset + n_steps ,:] ))
spectrum = np.zeros((n_steps, 2))
print spectrum.shape
for i in range(2):
spectrum[:, i] = (20*np.log10(np.absolute(np.fft.fft(spectr[:, i])) + 1e-15) )
spectrum[:, i] -= np.amax(spectrum)
figure()
plt.figure(figsize=(15,7))
plt.plot(freq, spectrum[:, :]);
plt.xscale('log')
plt.xlim(1e2,fs/2)
plt.ylim(-150, 0)
plt.grid(which='both')
xlabel('Freq, Hz');
ylabel('dB');
print 'ch0 max sample = {} '.format(np.amax(sig[: ,0]))
print 'ch0 min sample = {} '.format(np.amin(sig[: ,0]))
print 'ch1 max sample = {} '.format(np.amax(sig[: ,1]))
print 'ch1 min sample = {} '.format(np.amin(sig[: ,1]))
Для удобства не обязательно вводить все это в одну ячейку, а можно разбить на несколько. Ячейки исполняются последовательно по одной, с нажатием шифт+энтер
На выходе это даст пару графиков, сам вид вейвформы (точнее ее части) и fft куска фонограммы
"Найкраще сало то ковбаса." (с)