주파수 도메인 위상 편이를 구현하려고하지만 확실하지 않은 점이 적습니다.주파수 도메인 위상 편이, 진폭, 희망 크기 및 비선형 성
1- 호프 크기가 50 % 인 해닝 창을 사용하여 사인 신호 또는 스위프 신호에서 완벽한 재구성을 얻을 수 있습니다. 그럼에도 불구하고 홉 크기> 50 %를 사용할 때 어떻게 결과를 표준화해야합니까?
2- 낮은 주파수 신호 (f < 100, 창 크기 < 1024, fs = 44100)의 위상을 이동할 때 내 결과에서 일부 비선형 성을 명확하게 볼 수 있습니다. 이것은 창 크기가 저주파수에서 짧아지기 때문입니까?
도움 주셔서 감사합니다.
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
답변 해 주셔서 감사합니다. 이전 버전의 코드에서는 음의 주파수를 반대 방향으로 시프트했지만 위상 수정이 적용될 때 진폭 변화가 발생했습니다. 그런 다음 현재 버전의 코드로 되돌아갔습니다. 답변에 저주파가 무엇인지 명시 해주십시오. 왜 반대 방향으로 음의 저주파수 만 이동해야합니까? – papaya
배열이 공액 대칭을 유지하도록 위상을 수정하지 않으면 복잡한 결과가 발생합니다. 너가 원하는게 그거야? – hotpaw2
예, 감사합니다. 잘 작동하는 것 같습니다. – papaya