J'essaie de mettre en œuvre un changement de phase de domaine de fréquence mais il y a peu de points sur lesquels je ne suis pas sûr.Changement de phase de domaine de fréquence, amplitude, taille d'espoir et non-linéarité
1- Je peux obtenir une reconstruction parfaite à partir d'un signal sinusoïdal ou de balayage en utilisant une fenêtre de hanning avec une taille de houblon de 50%. Néanmoins, comment est-ce que je devrais normaliser mon résultat en utilisant une taille de houblon> 50%?
2- Lors du décalage de la phase des signaux basse fréquence (f < 100, taille de la fenêtre < 1024, fs = 44100) Je peux clairement voir une certaine non-linéarité dans mon résultat. Est-ce dû au fait que la taille de la fenêtre est trop courte pour les basses fréquences?
Merci beaucoup pour votre aide.
clear
freq=500;
fs=44100;
endTime=0.02;
t = 1/fs:1/fs:(endTime);
f1=linspace(freq,freq,fs*endTime);
x = sin(2*pi*f1.*t);
targetLength=numel(x);
L=1024;
w=hanning(L);
H=L*.50;% Hopsize of 50%
N=1024;
%match input length with window length
x=[zeros(L,1);x';zeros(L+mod(length(x),H),1)];
pend=length(x)- L ;
pin=0;
count=1;
X=zeros(N,1);
buffer0pad= zeros(N,1);
outBuffer0pad= zeros(L,1);
y=zeros(length(x),1);
delay=-.00001;
df = fs/N;
f= -fs/2:df:fs/2 - df;
while pin<pend
buffer = x(pin+1:pin+L).*w;
%append zero padding in the middle
buffer0pad(1:(L)/2)=buffer((L)/2+1: L);
buffer0pad(N-(L)/2+1:N)=buffer(1:(L)/2);
X = fft(buffer0pad,N);
% Phase modification
X = abs(X).*exp(1i*(angle(X))-(1i*2*pi*f'*delay));
outBuffer=real(ifft(X,N));
% undo zero padding----------------------
outBuffer0pad(1:L/2)=outBuffer(N-(L/2-1): N);
outBuffer0pad(L/2+1:L)=outBuffer(1:(L)/2);
%Overlap-add
y(pin+1:pin+L) = y(pin+1:pin+L) + outBuffer0pad;
pin=pin+H;
count=count+1;
end
%match output length with original input length
output=y(L+1:numel(y)-(L+mod(targetLength,H)));
figure(2)
plot(t,x(L+1:numel(x)-(L+mod(targetLength,H))))
hold on
plot(t,output)
hold off
Merci beaucoup pour votre réponse. Dans une version précédente de mon code, je décalais les fréquences négatives dans la direction opposée mais cela créait des variations d'amplitude lorsque la modification de phase était appliquée. Je suis ensuite retourné à la version actuelle du code. Pourriez-vous préciser quelles sont les basses fréquences dans votre réponse? Pourquoi devrions-nous seulement déplacer les basses fréquences négatives dans la direction opposée? – papaya
Si vous ne modifiez pas la phase de sorte que la matrice reste symétrique conjuguée, vous obtenez un résultat complexe. Est-ce que c'est ce que tu veux? – hotpaw2
Oui, merci. Il semble fonctionner très bien. – papaya