Может ли длина БПФ влиять на точность фильтрации? - PullRequest
1 голос
/ 31 декабря 2010

Я проектирую фильтр с дробной задержкой, и мой коэффициент Лагранжа порядка 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

1 Ответ

0 голосов
/ 31 декабря 2010

Некоторые комментарии:

  1. Ближайшая степень двух на самом деле равна 4096. Ожидаете ли вы, что оставшиеся 904 выборки внесут большой вклад?Я предполагаю, что они значимы только в том случае, если вы ищете относительно низкочастотные характеристики.
  2. Как вы добавили свой сигнал к 8192 выборкам?Подбавка выборки до 8192 означает, что примерно 40% ваших данных являются «вымышленными».Если вы использовали нули для удлинения набора данных, вы, вероятно, внедрили пошаговое изменение в точке пэда, что подразумевает много высокочастотного контента.
  3. Короткий фрагмент кода, демонстрирующий ваши методы, не повредит.*
...