# -*- coding: utf-8 -*- """ Created on Sat Sep 22 21:32:32 2018 @author: PC """ import numpy as np from matplotlib.pyplot import figure,subplot,plot def lowpassfilter(x,d): ## calcule un filtre passe-bas à partir d'une moyenne glissante (chaque point est "moyenné" par ses voisins) y=[] window_size=d for i in range(x.shape[0]): y.append(np.mean(x[np.max([0,i-window_size]):np.min([i+window_size, x.shape[0]])])) return y def smoothXMatrix(Rss,Rww,x): ## A completer def MSE(x,y):# return np.sum((x-y)**2) n=150 noiseVar = 1 size_window=10 #%% On charge le signal et la matrice de covariance qu'on suppose connue signal=np.load('signal_original.npy') Rss= np.load('autocovariance_signal_original.npy') #%% on bruite le signal avec un bruit de variance noisevar (en paramètre) w = np.random.normal(0,np.sqrt(noiseVar),n) x = signal+w x -= x.mean() Rww= ## exprimer la matrice de covariance #%% on filtre le signal avec un filtre Wiener x_filtre= smoothXMatrix(Rss,Rww,x) erreur_quadratique=MSE(signal,x_filtre) print(erreur_quadratique) #%% on filtre par une moyenne glissante de taille size_windows x_moyenne = lowpassfilter(x,size_window) erreur_quadratique2=MSE(signal,x_moyenne) print(erreur_quadratique2) #%% on visualise le resultat (testez pour plusieurs variances) figure() subplot(4,1,1) plot(s) ## affichage du signal d'origine subplot(4,1,2) plot(x) ## afffichage du signal bruite subplot(4,1,3) plot(x_filtre)##affichage du signal filtré par Wiener subplot(4,1,4) plot(x_moyenne) ## affichage du signal filtré par une moyenne glissante figure() #%% Prediction de Wiener n1=100 ## on garde les 100 premiers points signal_ecourte=signal[:n1] prediction = # a completer signal_reconstruit = np.concatenate((signal_ecourte,prediction),axis=0) #%% on compare le signal d'origine et celui qui est reconstruit figure() subplot(2,1,1) plot(s) subplot(2,1,2) plot(signal_reconstruit) figure()