# -*- coding: utf-8 -*-
"""
Created on Mon Mar  9 19:32:01 2020

@author: akourgli
"""
import numpy as np; 
import scipy.signal as sp; 
import matplotlib.pyplot as plt
from plot_zplane import zplane

b = np.array([0.079, 2*0.079, 0.079]); 
a = np.array([1, -1.2, 0.516]); 

z,p,k=zplane(b,a)
delta = np.zeros(32);
delta[0] = 1; 
h=sp.lfilter(b,a,delta) ;
Echellon = np.ones(32); 
h_ind=sp.lfilter(b,a,Echellon)

plt.figure(2);
plt.subplot(211);plt.stem(h,use_line_collection=True)
plt.title('Réponse impulsionnelle'); plt.grid(True);plt.ylabel('Amplitude')

plt.subplot(212);plt.stem(h_ind,use_line_collection=True)
plt.title('Réponse Indicielle'); plt.grid(True);plt.ylabel('Amplitude'); 
plt.show()

L = 256;fe=1; 
f,H= sp.freqz(b,a,L);
f,Tau = sp.group_delay((b,a),f); 
f=f*0.5*fe/np.pi;
plt.figure(3);plt.subplot(311); plt.plot(f, np.abs(H))
plt.title('Module du Filtre'); plt.grid(True); plt.xlabel('Fréquence (Hz)');plt.ylabel('Amplitude')

plt.subplot(312);plt.plot(f, np.angle(H))
plt.title('Phase du Filtre'); plt.grid(True); plt.xlabel('Fréquence (Hz)');
plt.ylabel('Amplitude')

plt.subplot(313);plt.plot(f, Tau)
plt.title('Retard de groupe du Filtre'); plt.grid(True); plt.xlabel('Fréquence (Hz)');
plt.ylabel('Amplitude'); 
plt.show()




from tkinter import Tk
from tkinter.filedialog import askopenfilename
from scipy.io.wavfile import read as wavread
from scipy.io.wavfile import write as wavwrite
import winsound

root = Tk(); 
filename = askopenfilename(); 
root.destroy()

fe,x=wavread(filename); 

Te=1.0/fe;N=len(x); 
t=np.arange(0.0, N*Te, Te)

y=sp.lfilter(b,a,x) ;


plt.figure(4); plt.subplot(211);plt.plot(t,x,label="Signal Original")
plt.subplot(212);plt.plot(t,y,label="Signal Filtré");plt.xlabel('Temps (s)')
plt.title('Signal Audio Filtré');
plt.show()

winsound.PlaySound(filename, winsound.SND_FILENAME)
zz=np.int8(y)
wavwrite("z.wav", fe, zz)
winsound.PlaySound("z.wav", winsound.SND_FILENAME)


#plt.figure(4);
#plt.scatter(np.real(p),np.imag(p))
#plt.scatter(np.real(z),np.imag(z))