Фазовый сдвиг в частотной области, амплитуда, размер надежды и нелинейность

Я пытаюсь реализовать фазовый сдвиг в частотной области, но есть несколько моментов, в которых я не уверен.

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

person papaya    schedule 20.04.2017    source источник


Ответы (1)


Все, что ниже 100 Гц, имеет менее двух циклов в вашем окне БПФ. Обратите внимание, что ДПФ или БПФ представляют любую форму волны, включая одну нецелочисленную периодическую синусоиду, путем возможного суммирования целого набора синусоид очень разных частот. например намного больше, чем просто один. Так работает математика.

Для окна фон Ханна, содержащего менее 2 циклов, это часто набор в основном совершенно разных частот (возможно, очень далеко в процентном отношении от вашей низкой частоты). Сдвиг фазы всех этих совершенно разных частот может или не может сместить вашу оконную низкочастотную синусоиду на желаемую величину (в зависимости от того, насколько частота вашего сигнала отличается от целочисленной периодичности).

Также для низких частот необходимо сдвинуть комплексно-сопряженное зеркало в противоположном направлении по фазе, чтобы по-прежнему отображать полностью реальный результат. Таким образом, вы в конечном итоге смешиваете 2 перекрывающихся и противоположных изменения фазы, что опять же в основном проблема, если низкочастотный сигнал далеко не является целочисленным периодическим в апертуре DFT.

Использование более длинного временного окна и выборок позволяет большему количеству циклов заданной частоты поместиться внутри него (таким образом, возможно, потребуется меньшая мощность синусоид очень разных частот для суммирования, чтобы составить, составить или синтезировать вашу низкочастотную синусоиду); и комплексное сопряжение находится дальше с точки зрения индекса ячейки результата БПФ, таким образом уменьшая помехи.

Последовательность, использующая любой переход окна фон Ханна, длина которого составляет 50% / (некоторое целое число), без потерь (за исключением самого первого или последнего окна). Все другие размеры переходов модулируют или уничтожают информацию и, следовательно, не могут быть нормализованы константой для восстановления.

person hotpaw2    schedule 22.04.2017
comment
Большое спасибо за ответ. В предыдущей версии моего кода я сдвигал отрицательные частоты в противоположном направлении, но это создавало вариации амплитуды при применении модификации фазы. Затем я вернулся к текущей версии кода. Не могли бы вы уточнить, что такое низкие частоты в вашем ответе? Почему мы должны сдвигать только отрицательные низкие частоты в противоположном направлении? - person papaya; 24.04.2017
comment
Если вы не измените фазу так, чтобы массив оставался сопряженно-симметричным, вы получите сложный результат. Это то, что вы хотите? - person hotpaw2; 24.04.2017