Перейти к содержанию
    

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

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

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

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

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

Screenshot 2024-02-14 182306.png

Изменено пользователем Sergey Koff
дополнил

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Screenshot 2024-02-15 095018.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Sergey Koff

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...