Я проектирую фильтр с дробной задержкой, и мой коэффициент Лагранжа порядка 5 ч (n) имеет 6 отводов во временной области.Я проверил, чтобы свертить h (n) с x (n), который является 5000 дискретизированных сигналов, используя Matlab, и результат кажется нормальным.Когда я пытался использовать метод FFT и IFFT, вывод был совершенно неверным.На самом деле мой БПФ вычисляется с 8192 данными в частотной области, что является ближайшей степенью 2 для выборки 5000 сигналов.Для части IFFT я преобразую обратно данные 8192 частотной области обратно в данные длиной 5000 во временной области.Итак, проблема в том, почему эта штука работает в свертке, а не в умножении БПФ.Причиной этой проблемы является преобразование моих 6 отводов h (n) в 8192 отводов в частотной области?
На самом деле я пытался использовать метод наложения-сохранения, который выполняет БПФ и умножение с меньшими кусками x (n) иделать это 5 раз отдельно.Результат кажется немного лучше, чем предыдущий, и, по крайней мере, я могу видеть образец сигнала, но все же немного искаженный.Итак, любая идея, где идет не так, и каково решение.Спасибо.
Причина, по которой я применяю циклическую свертку в частотной области вместо временной, заключается в том, что я пытаюсь объединить фильтр Лагранжа с другим фильтром нижних частот в частотной области, чтобы реализация могла быть болееэффективный.Конечно, я считаю, что реализация фильтрации в частотной области будет намного быстрее, чем свертка во временной области.Фильтр LP имеет 120 отводов во временной области.Из-за ограничений памяти исходные данные, включая заполнение, будут ограничены 1024 по длине, и поэтому с бинами FFT.
Потому что мой коэффициент Лагранжа имеет только 6 отводов, что сильно отличается от 1024 отводов.Я сомневаюсь, что FFT из 6 отводов до 1024 бинов в частотной области вызовет ошибку.Вот мой код matlab только на фильтре Лагранжа.Это всего лишь тестовый код, а не код реализации.Это немного грязно, извините за это.Очень признателен, если вы можете дать мне больше советов по этой проблеме.Спасибо.
t=1:5000;
fs=2.5*(10^12);
A=70000;
x=A*sin(2*pi*10.*t.*(10^6).*t./fs);
delay=0.4;
N=5;
n = 0:N;
h = ones(1,N+1);
for k = 0:N
index = find(n ~= k);
h(index) = h(index) * (delay-k)./ (n(index)-k);
end
pad=zeros(1,length(h)-1);
out=[];
H=fft(hh,1024);
H=fft([h zeros(1,1024-length(h))]);
for i=0:1:ceil(length(x)/(1024-length(h)+1))-1
if (i ~= ceil(length(x)/(1024-length(h)+1))-1)
a=x(1,i*(1024-length(h)+1)+1:(i+1)*(1024-length(h)+1));
else
temp=x(1,i*(1024-length(h)+1)+1:length(x));
a=[temp zeros(1,1024-length(h)+1-length(temp))];
end
xx=[pad a];
X=fft(xx,1024);
Y=H.*X;
y=abs(ifft(Y,1024));
out=[out y(1,length(h):length(y))];
pad=y(1,length(a)+1:length(y));
end