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

Цифровая фильтрация + БПФ

Существует следующая задача: есть периодический сигнал с определенным уровнем шумов, частоту которого надо определить. Данный сигнал является сигналом с датчика вихревого расходомера. Ведущие мировые производители таких расходомеров (Yokogawa, например), применяет следующий алгоритм ЦОС: Преобразование Фурье входного сигнала -> преобразование Фурье коэффициентов КИХ-фильтра -> быстрая свертка КИХ-фильтра и сигнала -> обратное преобразование Фурье результатов свертки. То есть, они делают классическую цифровую фильтрацию входного сигнала. Затем определяется частота отфильтрованного от помех сигнала.

 

Вопрос в следующем: почему не определить частоту сигнала, сделав БПФ исходного сигнала с шумом, и приняв за частоту полезного сигнала частоту максимальной составляющей в спектре?

 

У меня есть предположение, что из-за того, что частоты на спектре дискретны, так не получится определить частоту, лежащую между частотами спектра. Например, разложили сигнал по частотам 1, 2, 3, 4, ... Гц. Тогда по спектру не определить частоту 3,3 Гц, то есть определить-то можно, но пик будет на 3 Гц, а 3,3 в спектре просто нет.

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


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

У меня есть предположение, что из-за того, что частоты на спектре дискретны, так не получится определить частоту, лежащую между частотами спектра. Например, разложили сигнал по частотам 1, 2, 3, 4, ... Гц. Тогда по спектру не определить частоту 3,3 Гц, то есть определить-то можно, но пик будет на 3 Гц, а 3,3 в спектре просто нет.

В таких случаях берут не частоту масимальной амплитуды, а находят центр тяжести в окружении двух соседних частот - тогда получится искомая 3,3.

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


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

Вопрос в следующем: почему не определить частоту сигнала, сделав БПФ исходного сигнала с шумом, и приняв за частоту полезного сигнала частоту максимальной составляющей в спектре?

Уже сделали 3 года назад для питерских расходомеров. :laughing:

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


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

В таких случаях берут не частоту масимальной амплитуды, а находят центр тяжести в окружении двух соседних частот - тогда получится искомая 3,3.

Оценка будет смещённой.

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


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

По-хорошему нужно делать по нескольким точкам аппроксимацию оконной функцией и оттуда считать максимум. Тогда ответ точный.

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


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

Почему же тогда в описании к расходомерам Yokogawa описан алгоритм фильтрации и т.д., а не просто определение частоты по спектру? Почему они не определяют частоту сигнала тупо из спектра? Возможно, есть какие-то причины, по которым так делать нельзя? Зачем тогда применять цифровую фильтрацию КИХ, БИХ? Взял просто в спектре занулил все гармоники в полосе подавления и сделал ОБПФ и все, получил чистейший фильтрованный сигнал! НО так почему-то не делается, а придумали разные фильтры.

Изменено пользователем CTPEXHIH

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


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

Почему же тогда в описании к расходомерам Yokogawa описан алгоритм фильтрации и т.д., а не просто определение частоты по спектру? Почему они не определяют частоту сигнала тупо из спектра? Возможно, есть какие-то причины, по которым так делать нельзя? Зачем тогда применять цифровую фильтрацию КИХ, БИХ? Взял просто в спектре занулил все гармоники в полосе подавления и сделал ОБПФ и все, получил чистейший фильтрованный сигнал! НО так почему-то не делается, а придумали разные фильтры.

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

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


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

Почему они не Взял просто в спектре занулил все гармоники в полосе подавления и сделал ОБПФ и все, получил чистейший фильтрованный сигнал! НО так почему-то не делается, а придумали разные фильтры.

Если нужно восстановить сигнал, то лучше не занулять составляющие спектра,

а то после обратного Фурье сигнал будет содержать то чего не было на входе.

Эффект Гиббса.

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

Большого криминала тут не будет, но в это задаче не понятно что занулять, вы же не знаете где у вас изначально

в спектре сидит полезный сигнал. Не то занулите и не найдет, то что ищете.

 

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

полезного сигнала, тем самым повысив соотношение сигнал/шум перед проведением ДПФ.

В спектре отфильтрованного сигнал легче обнаружить составляющие полезного сигнала.

 

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


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

Вообще при вычислении частоты по спектру ОБПФ не нужно, конечно.

Но возможно, они сделали БПФ-фильтрацию, восстановили сигнал во временной области, а потом применили классический счетный частотомер: усиление-ограничение сигнала и подсчет числа импульсов в заданный промежуток времени? Тут вам и фильтрация в частотной области, и фактическое усреднение во временной, может, так получается самый точный результат.

Изменено пользователем V_G

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


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

А как быть с тем, что при разложении сигнала в спектр по, например, 256 гармоникам, точное определение частоты будет просто невозможно из-за большой дискретности по частотам?

 

Ну, например, сигнал имеет частоту, отличную от тех, по которым производится разложение в спектр? раскладываем по частотам 1, 2, 3, ..., 256 Гц, а сигнал имеет частоту 55,45 Гц. На разложении будет один пик на 55 Гц, но определить по нему частоту нельзя, потеряем 0,45 Гц, то есть погрешность большая будет. Тут писали про центр тяжести по двум соседним частотам, но как что-то усреднить, если пик всего один на частоте 55 Гц, а на частотах 54 и 56 Гц амплитуда очень незначительная. Вот пример из матлаба.

 

Fs = 20000;                    % Sampling frequency

T = 1/Fs;                     % Sample time
L = 256;                     % Length of signal
t = (0:L-1)*T;                % Time vector

y = 0.7*sin(2*pi*55*t); %Sinus 55 Hz

Y=fft(y);

subplot(1,1,1);
plot(y,t);
title('Спектр сигнала y')
xlabel('Частота (Hz)')
ylabel('|Y(f)|')


subplot(2,1,2);
plot(f,2*abs(Y(1:L/2+1))) 
title('Спектр сигнала y')
xlabel('Частота (Hz)')
ylabel('|Y(f)|')

 

Ниже прикреплен файл с сигналом и разложением в спектр. Две соседние частоты 78,13 и 156,3 Гц, а заданная частота сигнала - 55 Гц. Как правильно определить частоту сигнала из такого спектра?

post-68213-1321173561_thumb.jpg

Изменено пользователем CTPEXHIH

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


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

А как быть с тем, что при разложении сигнала в спектр по, например, 256 гармоникам, точное определение частоты будет просто невозможно из-за большой дискретности по частотам?

Ну ДПФ вообще имеет много недостатков. В частности, то о чем вы говорите называется "утечками" ДПФ.

Для минимизации сего эффекта применяется техника завешивания окном, поищите в интернете много информации на эту тему.

Да и вообще всегда лучше брать макимально возможное количество точек ДПФ, повышая тем самым частотное разрешение.

Если ваш сигнал подать на вход 8 точечного ДПФ, то на выходе вы вообще получите семигорбое чудовище. В матлабе может

и ничего результат будет, а вот в железе если, то точно ничего не разберете.

 

 

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


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

А как быть с тем, что при разложении сигнала в спектр по, например, 256 гармоникам, точное определение частоты будет просто невозможно из-за большой дискретности по частотам?

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

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


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

Вообще при вычислении частоты по спектру ОБПФ не нужно, конечно.

Но возможно, они сделали БПФ-фильтрацию, восстановили сигнал во временной области, а потом применили классический счетный частотомер: усиление-ограничение сигнала и подсчет числа импульсов в заданный промежуток времени? Тут вам и фильтрация в частотной области, и фактическое усреднение во временной, может, так получается самый точный результат.

 

Так то оно так. Возможно. Только где фильтровать знать нужно заранее. И если частота неизвестна в широком дипазоне, то и фильтрация ничего не даст

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


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

А если предположить что после БПФ определяется максимальный бин поле рассчитывается полосовой фильтр с полосой = +-1 бин от максимума. И сигнал фильтруется. А потом во временной области определяют частоту.

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


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

Преобразование Фурье входного сигнала -> преобразование Фурье коэффициентов КИХ-фильтра -> быстрая свертка КИХ-фильтра и сигнала -> обратное преобразование Фурье результатов свертки. То есть, они делают классическую цифровую фильтрацию входного сигнала. Затем определяется частота отфильтрованного от помех сигнала.

 

Вопрос в следующем: почему не определить частоту сигнала, сделав БПФ исходного сигнала с шумом, и приняв за частоту полезного сигнала частоту максимальной составляющей в спектре?

1.Если они делают обратное преобразование, значит не хотят использовать БПФ для измерения, а используют, например, точки перехода через нуль уточняя их по нескольким отсчетам около. Вполне разумный метод и точный.

2.Здесь предложено несколько методов и все имеют право на существование, если у Вас имеются записи реального сигнала легко проверить каждый и выбрать лучший.

3.При измерении механических параметров нечувствительность к помехам важнее точности. Например ударить ломиком по трубе или включить какой-нибудь мотор рядом. Ложных показаний не должно быть, а измерения должны продолжиться скажем через полсекунды.

 

<Ниже прикреплен файл с сигналом>

Если хотите использовать БПФ - берите в выборку не менее 7 периодов сигнала и используйте какое-нибудь окно. А на Вашей приличный результат даст определение частоты по трем точкам(приблизительно через пи/4)

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


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

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

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

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

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

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

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

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

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

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