Jump to content
    

БПФ, фильтрация и ОБПФ. Сохранение фазы между циклами

Есть гармонический непрерывный сигнал + шум. Буферизуется, скажем в 1024 комплексных дискрета.

И для первых 256 делается БПФ, определяется частота сигнала и обнуляется спектр (кроме максимального бинома). Делается ОБПФ, затем для след 256 тоже самое и тд.

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

Цифры условные.  Фото: граф время и квадратура, 2 блока по 16384. 

Screenshot 2024-02-14 182306.png

Edited by Sergey Koff
дополнил

Share this post


Link to post
Share on other sites

Надо понимать, что это просто группа фильтров и корректно делать децимацию-интерполяцию, точно так же как вы это делаете для одного полосового фильтра, от быстрого алгоритма вычисления ДПФ можно абстрагироваться.

Share this post


Link to post
Share on other sites

18 часов назад, Sergey Koff сказал:

сть гармонический непрерывный сигнал + шум. Буферизуется, скажем в 1024 комплексных дискрета.

И для первых 256 делается БПФ, определяется частота сигнала и обнуляется спектр (кроме максимального бинома). Делается ОБПФ, затем для след 256 тоже самое и тд.

Я точно знаю, что сигнал в 1024 непрерывный, но между блоками по 25

Частота сигнала? Частота дискретизации? То, что я увидел - это просто какая-то хрень.

Share this post


Link to post
Share on other sites

Только что, petrov сказал:

Надо понимать, что это просто группа фильтров и корректно делать децимацию-интерполяцию, точно так же как вы это делаете для одного полосового фильтра, от быстрого алгоритма вычисления ДПФ можно абстрагироваться.

Вы имеете в виду, нефиг БПФ гонять, а прогнать через какой-нибудь КИХ фильтр узкополосный и радоваться фазе?

Share this post


Link to post
Share on other sites

3 минуты назад, Sergey Koff сказал:

Вы имеете в виду, нефиг БПФ гонять, а прогнать через какой-нибудь КИХ фильтр узкополосный и радоваться фазе?

Вы на вопрос ответьте. ДПФ не такая простая штука. И пользоваться этой штукой нужно уметь.

Share this post


Link to post
Share on other sites

Только что, thermit сказал:

Частота сигнала? Частота дискретизации?

 

На той картинке уже не помню, вот тут сигнал - 1.1 ГГц, дискр 5 MSPS, полоса 5 Мгц. А к чему это, в чем опасение?

Screenshot 2024-02-15 095018.png

Share this post


Link to post
Share on other sites

Sergey Koff

Вы имеете в виду, нефиг БПФ гонять, а прогнать через какой-нибудь КИХ фильтр узкополосный и радоваться фазе?

Нет, БПФ не волшебная штука, которая сама всё сделает. ДПФ и есть полосовые КИХ фильтры, только у них прямоугольная огибающая и синк АЧХ с большими боковиками, из-за чего при децимации-интерполяции(=блочная обработка) получаете алиасинг. Нужно в явном виде рассчитать фильтры соответствующие децимации-интерполяции, а потом уже думать про быстрый алгоритм, который сводится к блочным полифазной фильтрации и БПФ.

 

Share this post


Link to post
Share on other sites

10 минут назад, Sergey Koff сказал:

На той картинке уже не помню, вот тут сигнал - 1.1 ГГц, дискр 5 MSPS, полоса 5 Мгц. А к чему это, в чем опасение?

Да никакого опасения. Т е у вас должна быть константа, а гармоника из-за ошибки по частоте? В чем смысл этой деятельности? Чего из вас все клещами-то тянуть надо?

Share this post


Link to post
Share on other sites

В 14.02.2024 в 18:25, Sergey Koff сказал:

И для первых 256 делается БПФ, определяется частота сигнала и обнуляется спектр (кроме максимального бинома). Делается ОБПФ, затем для след 256 тоже самое и тд.

 я попробовал обработать сигнал по вашему описанию, и появились вопросики

 

вот сигнал на 256 отсчётов

n = 256;
f0 = 13.47/n;

t = 0:n-1;
s = exp(1i*2*pi*f0*t)+0.1*randn(1,n);

plot(t,real(s),t,imag(s));
grid on;

title('signal');
xlabel('time');

image.thumb.png.02017647529a3271522097033a85dedc.png

вот его БПФ

f = t/n;
stem(f,abs(fft(s)));
grid on;
title('fft');
xlabel('freq');

image.thumb.png.758313eb7bf6ec2255c3e102702186c9.png

Какой бин в этом БПФ считать максимальным? что и как тут обнулять? что именно должно показывать ОБПФ в таком случае?

Share this post


Link to post
Share on other sites

Я так понял, речь идет о фильтрации с помощью FFT - IFFT? Блоки нужно брать с перекрытием. Первый блок 256 отсчетов, сместились на 200 и взяли еще 256. И так далее. Результат FFT умножаем на оконную функцию, соответствующую АЧХ фильтра. Делаем IFFT. Хвосты, соответствующие перекрытым областям суммируем или отбрасываем. Длина перекрытия связана с порядком эквивалентного фильтра - чем больше перекрытие, тем выше порядок. 

Вообще штука очень мощная - можно сразу выполнять фильтрацию, перенос спектра (с точностью, определяемой размером FFT) и децимацию.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...