Bonsoir tout le monde,

Je cherche à regrouper un certain nombre de fonction dans une module. L'idée est d'avoir des fonctions que je puisse importer indépendamment mais également de pouvoir faire appel à ces mêmes fonctions à l'intérieur du module. Ci-joint un bout de code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
 
# Filtragre et calcul spl
 
from scipy.signal import ellip,filtfilt,
from numpy import array, arange,sum,append
from scipy.io import wavfile
from math import sqrt,log10
import wave
 
 
def octave_band(fc,frac):
    bandlimits    = []; 
    coeff         = 1/(2**frac)
    bandlimits.append(fc/coeff)
    bandlimits.append(fc*coeff)
    bandlimits = array(bandlimits)
    return bandlimits
 
 
 
 
def ellip_bandpass(s,fc,fs,frac,ordre):
    bandlimits    = octave_band(fc,frac)
    nyq           = 0.5 * fs
    cutfrq        = bandlimits/nyq
    b, a          = ellip(ordre, 0.01, 60, cutfrq, btype='bandpass', analog=False, output='ba')    
    sf            = filtfilt(b, a, s)    
    return sf
 
 
 
def sound_pressurelevel(fichwav,fc,frac,ordre,win,rec):
    fid       = wave.open(fichwav, 'r')
    nbits     = 8*fid.getsampwidth()-1
    fmt       = 2**nbits
    fmt       -= 1    
    fid.close()
    fs, sig   = wavfile.read(fichwav)    
    s         = sig/fmt   
    sf        = ellip_bandpass(s,fc,fs,frac,ordre)
    fen       = int(win*fs)
    newwin    = int(fen*(1-rec))
    idxdebut  = int(fen/2)
    idxfin    = s.size-idxdebut
    idxc      = arange(idxdebut,idxfin,newwin,dtype = 'int')  
    debSeg    = idxc-idxdebut
    finSeg    = idxc+idxdebut
    t         = idxc/fs
    spl       = [[0]*idxc.size]      
    pt        = sf**2    
    for idxseg,segid in enumerate(debSeg):
           spl[idxseg] = 20*log10(sum(pt[debSeg[idxseg]:finSeg[idxseg]])/fen)
 
    spl = array(spl)
    return t,spl
Lorsque je fais appel à la fonction sound_pressurelevel(fichwav,fc,frac,ordre,win,rec), les deux premières fonctions semblent être ignorées et le code produit des NaN. Testées indépendamment, elles fonctionnent correctement. Je me dis que je fais certainement quelque chose de façon incorrecte. Toute aide est la bienvenue.

Merci d'avance.