Bonjour ,
Je cherche a faire un synthese additive pour construire un signal périodique à partir
d’une somme de sinus/cosinus pondérées par des an et bn .
Pour cela , j'ai reussi une méthode en utilisant les vecteurs de numpy .
Mais je souhaite réaliser la meme chose mais avec des tableaux mais je n'arrive pas a tracer la courbe , une erreur me dit que mes deux tableaux sig_t et sig_s ne sont pas de la meme dimension et pourtant ils sont tous les deux initialisé a 100 valeurs
avec numpy
code avec les tableaux
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 import math import numpy as np import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator def CalcAn(A,k): if(k%2): a=((8*A) / math.pow(math.pi*k,2)) return a else: return 0 def signalT(A=1.5,f=100.0,N=10,Te=0.00033,k=0.033): xan = [] yan = [] xbn = [] ybn = [] t = np.arange(0, k, Te) #tableau de 0 à k par intervalle Te print"Tableau T de 0 à k" print t s1 = np.zeros(k/Te) #Initialise avec des 0, tableau de taille k/Te #Calcul raies du spectre for i in range(N): yan.append(CalcAn(A,i)) s1 += yan[i] * np.cos(2*math.pi*i*f*t) xan.append(i) xbn.append(i) ybn.append(0) # bn = 0 i = i+1
En faite jsi j'ai bien compris , le vecteur sera considéré comme un vecteur mathématique alors quand on le multiplie par une constance dans l'iteration , c'est toute la colonne qui est mutliplié ?
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69 import sys import math import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator import numpy as np from symbol import if_stmt import tp1_0 def calculANBN(A,N): An=[] Bn=[] X=[] for i in range(0,N): if(i%2): An.append( (8*A) / math.pow(math.pi*i,2)) else: An.append(0) Bn.append(0) X.append(i) i=i+1 return An,Bn,X sig_s[i][k]+=CalcAn(A,k)*math.cos(2*math.pi*i*f*sig_t[i]) def CalcAn(A,k): if(k%2): a=((8*A) / math.pow(math.pi*k,2)) return a else: return 0 def SignalT(A=1.5,f=100.0,N=10,Te=0.00033,k=0.033): sig_s=[0]*100 sig_t = np.arange(0, k, Te) #tableau de 0 a k par intervalle Te for i in range(N): k = 0 while k<N: # for each harmonic k #print CalcAn(A,k)*math.cos(2*math.pi*k*f*t) #print CalcAn(A,k) sig_s[i*10+k]+=((An[k] * math.cos(2* math.pi*i*f*sig_t[k+i]))) k=k+1 return sig_s,sig_t if __name__ == '__main__': An=[] Bn=[] N=[] sig_t=[] sig_s=[] sig_s, sig_t = SignalT() #An,Bn,N,sig_s,sig_t=sT(A=3,kMax=14) plt.subplot(311) plt.plot(sig_t,sig_s,'-r^') plt.xlabel('time') plt.ylabel('S(kTe)') plt.grid(True) plt.subplot(312) plt.plot(N,An,'bo') plt.xlabel('n') plt.ylabel('An de S(nFo)') plt.grid(True) plt.subplot(313) plt.plot(N,Bn,'bo') plt.xlabel('n') plt.ylabel('Bn de S(nFo)') plt.grid(True) plt.show()
Merci d'avance pour votre aide
Partager