-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathstft_sintesys.asv
More file actions
executable file
·97 lines (74 loc) · 2.67 KB
/
stft_sintesys.asv
File metadata and controls
executable file
·97 lines (74 loc) · 2.67 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
%FILE DEL PROGETTO DI TATA
%prova stft e risintesi di un segnale audio
clear all;
close all;
%creazione finestra
M=512;
win=hamming(M);
%I segnali importati devono essere tutti campionati alla stessa frequenza
%di campionamento
[signal1,Fs1]=wavread('Urlo22.wav'); %sono tutti importati come vettori colonna
[signal2,Fs2]=wavread('Toms_diner22.wav');
[signal3,Fs3]=wavread('nonmisomiglia22.wav');
%Taglio tutti i segnali in modo da renderli della stessa lunghezza del più
%corto
minl=min([length(signal1) length(signal2) length(signal3)]);
signal1=signal1([1:minl],1);
signal2=signal2([1:minl],1);
signal3=signal3([1:minl],1);
%Ritardo dei segnali (in numero di campioni)
rit1=160;
rit2=560;
rit3=800;
%definizione segnali al mic2 (ritardati)
signal1r=[zeros(rit1,1); signal1];
signal2r=[zeros(rit2,1); signal2];
signal3r=[zeros(rit3,1); signal3];
%calcolo la lunghezza massima
maxl=max([length(signal1r) length(signal2r) length(signal3r)]);
%PADDING di tutti i segnali per arrivare alla lunghezza del segnale con ritardo max
signal1=[signal1; zeros((maxl-minl),1)];
signal2=[signal2; zeros((maxl-minl),1)];
signal3=[signal3; zeros((maxl-minl),1)];
signal1r=[signal1r; zeros((maxl-length(signal1r)),1)];
signal2r=[signal2r; zeros((maxl-length(signal2r)),1)];
signal3r=[signal3r; zeros((maxl-length(signal3r)),1)];
%SPLICING/FOURIER segnali sorgente al microfono 1, non ritardati
[F1]=stft(signal1,win,maxl);
[F2]=stft(signal2,win,maxl);
[F3]=stft(signal3,win,maxl);
%Segnale somma e trasformate al mic1 e al mic2
oss1=signal1+signal2+signal3;
oss2=signal1r+signal2r+signal3r;
%STFT dei segnali osservati ai 2 mics
[Yos1]=stft(oss1,win,maxl);
[Yos2]=stft(oss2,win,maxl);
%Assi in frequenza e tempo
fc=Fs1; %freq campionamento
fk=-fc/2:fc/M:fc/2; %asse freq discrete
tk=0:(M/fc):(maxl/fc); %asse dei tempi discretizzato in funzione della larghezza della finestra in secondi
%Estrazione matrice delle features
[The]=tipoB(Yos1,Yos2,Fs2,fk);
%Clustering
[idx,C]=kmeans(The(1:58800,:),3);
%Maschere binarie
idxmask=reshape(idx,size(Yos1,1),size(Yos1,2));
mask1(idxmask==1)=1;
mask1k=reshape(mask1',size(Yos1,1),size(Yos1,2));
mask2(idxmask==2)=1;
mask2k=reshape(mask2',size(Yos1,1),size(Yos1,2));
mask3(idxmask==3)=1;
mask3k=reshape(mask1',size(Yos1,1),size(Yos1,2));
%Estrazione delle STFT dei segnali
STFT1r=Yos1.*mask1k;
STFT2r=Yos1.*mask2k;
STFT3r=Yos1.*mask3k;
% %Grafici delle trasformate dei segnali sorgente
% %I moduli
% figure(1); imagesc(tk,fk,abs(F1));
% figure(2); imagesc(tk,fk,abs(F2));
% figure(3); imagesc(tk,fk,abs(F3));
% %Le fasi
% figure(4); imagesc(tk,fk,angle(F1));
% figure(5); imagesc(tk,fk,angle(F2));
% figure(6); imagesc(tk,fk,angle(F3));