Analisi di segnali

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#definisco una funzione h di prova
tau=0.05
t=arange(-10,10,tau)
T=2.
h=sin(2*pi*t/T)

N=len(h)
H=zeros(N,dtype='complex')

for n in range(N):
	for k in range(N):
		H[n] += h[k]*exp(2j*pi*k*n/N)
H*=tau

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
def my_dft(h,tau):
	N=len(h)
	H=zeros(N,dtype='complex')
	for n in range(N):
		for k in range(N):
			H[n] += h[k]*exp(2j*pi*k*n/N)
	H *= tau
	return H

#uso la funzione appena definita
Transf_f1 = my_dft(f1,tau1)
Transf_f2 = my_dft(f2,tau2)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
def my_antidft(H,tau):
	N=len(H)
	h=zeros(N,dtype='complex')
	for n in range(N):
		for k in range(N):
			h[n] += H[k]*exp(-2j*pi*k*n/N)
	H *= 1/tau/N
	return h

#uso la funzione appena definita
Transf_f1 = my_dft(f1,tau1)
f2 = my_antidft(Transf_f1,tau1)
plot(f1)
plot(f2)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#supponiamo che siano state definite
#sopra le funzioni my_dft e my_antidft

tau=1/32.
T=1.
A=1.
f0=2.
f1=2*f0
f2=4*f0

t=arange(0,T,tau)
N=len(t) #o anche N=T/tau

funct = 1 + A*(sin(2*pi*f0*t)+2*sin(2*pi*f1*t)+0.5*sin(2*pi*f2*t))
Transf = my_dft(funct,tau)

freq=arange(N)/tau/N
bar(freq,abs(Transf)**2,width=0.5,align='center',color='b')

figure(2)
bar(freq,Transf.real,width=0.5,align='center',color='b',label='Reale')
bar(freq,Transf.imag,width=0.5,align='center',color='r',label=Immaginaria')

1
2
3
4
5
6
7
#eliminiamo la componente a frequenza zero
Transf.real[0] = 0

antiTransf = my_antidft(Transf,tau)

plot(t,antiTransf,'-s',label='funct modificata')
plot(t,funct,'-d',label='funct originale')

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#definiamo la funzione finestra
r=2*pi*t/T 
han=0.5-0.5*cos(r)

funct_windowed=funct*han
Transf_window=my_dft(funct_windowed,tau)

#facciamo i grafici
plot(t,han)

figure(2)
plot(t,funct)
plot(t,funct_windowed)

figure(3)
plot(freq,abs(Transf)**2,label='Senza window')
plot(freq,abs(Transf_window)**2,label='Con window')