|
Цифровая фильтрация + БПФ |
|
|
|
Nov 9 2011, 14:14
|
Группа: Новичок
Сообщений: 4
Регистрация: 9-11-11
Пользователь №: 68 213

|
Существует следующая задача: есть периодический сигнал с определенным уровнем шумов, частоту которого надо определить. Данный сигнал является сигналом с датчика вихревого расходомера. Ведущие мировые производители таких расходомеров (Yokogawa, например), применяет следующий алгоритм ЦОС: Преобразование Фурье входного сигнала -> преобразование Фурье коэффициентов КИХ-фильтра -> быстрая свертка КИХ-фильтра и сигнала -> обратное преобразование Фурье результатов свертки. То есть, они делают классическую цифровую фильтрацию входного сигнала. Затем определяется частота отфильтрованного от помех сигнала.
Вопрос в следующем: почему не определить частоту сигнала, сделав БПФ исходного сигнала с шумом, и приняв за частоту полезного сигнала частоту максимальной составляющей в спектре?
У меня есть предположение, что из-за того, что частоты на спектре дискретны, так не получится определить частоту, лежащую между частотами спектра. Например, разложили сигнал по частотам 1, 2, 3, 4, ... Гц. Тогда по спектру не определить частоту 3,3 Гц, то есть определить-то можно, но пик будет на 3 Гц, а 3,3 в спектре просто нет.
|
|
|
|
|
Nov 9 2011, 16:11
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(CTPEXHIH @ Nov 9 2011, 18:14)  У меня есть предположение, что из-за того, что частоты на спектре дискретны, так не получится определить частоту, лежащую между частотами спектра. Например, разложили сигнал по частотам 1, 2, 3, 4, ... Гц. Тогда по спектру не определить частоту 3,3 Гц, то есть определить-то можно, но пик будет на 3 Гц, а 3,3 в спектре просто нет. В таких случаях берут не частоту масимальной амплитуды, а находят центр тяжести в окружении двух соседних частот - тогда получится искомая 3,3.
|
|
|
|
|
Nov 10 2011, 08:43
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 31-05-06
Пользователь №: 17 639

|
Цитата(CTPEXHIH @ Nov 9 2011, 17:14)  Вопрос в следующем: почему не определить частоту сигнала, сделав БПФ исходного сигнала с шумом, и приняв за частоту полезного сигнала частоту максимальной составляющей в спектре? Уже сделали 3 года назад для питерских расходомеров.
|
|
|
|
|
Nov 11 2011, 14:25
|
Местный
  
Группа: Участник
Сообщений: 211
Регистрация: 25-10-09
Пользователь №: 53 195

|
Цитата(Xenia @ Nov 9 2011, 20:11)  В таких случаях берут не частоту масимальной амплитуды, а находят центр тяжести в окружении двух соседних частот - тогда получится искомая 3,3. Оценка будет смещённой.
|
|
|
|
|
Nov 12 2011, 17:37
|
Группа: Новичок
Сообщений: 4
Регистрация: 9-11-11
Пользователь №: 68 213

|
Почему же тогда в описании к расходомерам Yokogawa описан алгоритм фильтрации и т.д., а не просто определение частоты по спектру? Почему они не определяют частоту сигнала тупо из спектра? Возможно, есть какие-то причины, по которым так делать нельзя? Зачем тогда применять цифровую фильтрацию КИХ, БИХ? Взял просто в спектре занулил все гармоники в полосе подавления и сделал ОБПФ и все, получил чистейший фильтрованный сигнал! НО так почему-то не делается, а придумали разные фильтры.
Сообщение отредактировал CTPEXHIH - Nov 12 2011, 17:37
|
|
|
|
|
Nov 12 2011, 18:46
|
Знающий
   
Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741

|
Цитата(CTPEXHIH @ Nov 12 2011, 21:37)  Почему же тогда в описании к расходомерам Yokogawa описан алгоритм фильтрации и т.д., а не просто определение частоты по спектру? Почему они не определяют частоту сигнала тупо из спектра? Возможно, есть какие-то причины, по которым так делать нельзя? Зачем тогда применять цифровую фильтрацию КИХ, БИХ? Взял просто в спектре занулил все гармоники в полосе подавления и сделал ОБПФ и все, получил чистейший фильтрованный сигнал! НО так почему-то не делается, а придумали разные фильтры. так поступают, если сигнал не гармонический. Свёртка с опорным сигналом правильной формы даём максимально узкую взаимно корреляционную функцию, что увеличит отношение сигнал шум и сделает оценку частоты более точной.
|
|
|
|
|
Nov 12 2011, 19:34
|
Местный
  
Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811

|
Цитата(CTPEXHIH @ Nov 12 2011, 20:37)  Почему они не Взял просто в спектре занулил все гармоники в полосе подавления и сделал ОБПФ и все, получил чистейший фильтрованный сигнал! НО так почему-то не делается, а придумали разные фильтры. Если нужно восстановить сигнал, то лучше не занулять составляющие спектра, а то после обратного Фурье сигнал будет содержать то чего не было на входе. Эффект Гиббса. Если сигнал не нужно восстанавливать, то для удобств дальнейшего обработки можно и занулить что-то. Большого криминала тут не будет, но в это задаче не понятно что занулять, вы же не знаете где у вас изначально в спектре сидит полезный сигнал. Не то занулите и не найдет, то что ищете. А фильтры разные придумали для того чтобы подавить шумы обрабатываемого сигнала, спектр которых заведомо не пересекается со спектром полезного сигнала, тем самым повысив соотношение сигнал/шум перед проведением ДПФ. В спектре отфильтрованного сигнал легче обнаружить составляющие полезного сигнала.
|
|
|
|
|
Nov 13 2011, 08:40
|
Группа: Новичок
Сообщений: 4
Регистрация: 9-11-11
Пользователь №: 68 213

|
А как быть с тем, что при разложении сигнала в спектр по, например, 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 Гц. Как правильно определить частоту сигнала из такого спектра?
Сообщение отредактировал CTPEXHIH - Nov 13 2011, 08:41
Эскизы прикрепленных изображений
|
|
|
|
|
Nov 13 2011, 10:19
|
Местный
  
Группа: Свой
Сообщений: 377
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811

|
Цитата(CTPEXHIH @ Nov 13 2011, 11:40)  А как быть с тем, что при разложении сигнала в спектр по, например, 256 гармоникам, точное определение частоты будет просто невозможно из-за большой дискретности по частотам? Ну ДПФ вообще имеет много недостатков. В частности, то о чем вы говорите называется "утечками" ДПФ. Для минимизации сего эффекта применяется техника завешивания окном, поищите в интернете много информации на эту тему. Да и вообще всегда лучше брать макимально возможное количество точек ДПФ, повышая тем самым частотное разрешение. Если ваш сигнал подать на вход 8 точечного ДПФ, то на выходе вы вообще получите семигорбое чудовище. В матлабе может и ничего результат будет, а вот в железе если, то точно ничего не разберете.
|
|
|
|
|
Nov 14 2011, 11:57
|

Эксперт
    
Группа: Свой
Сообщений: 1 467
Регистрация: 25-06-04
Пользователь №: 183

|
QUOTE (V_G @ Nov 13 2011, 05:01)  Вообще при вычислении частоты по спектру ОБПФ не нужно, конечно. Но возможно, они сделали БПФ-фильтрацию, восстановили сигнал во временной области, а потом применили классический счетный частотомер: усиление-ограничение сигнала и подсчет числа импульсов в заданный промежуток времени? Тут вам и фильтрация в частотной области, и фактическое усреднение во временной, может, так получается самый точный результат. Так то оно так. Возможно. Только где фильтровать знать нужно заранее. И если частота неизвестна в широком дипазоне, то и фильтрация ничего не даст
|
|
|
|
|
Nov 14 2011, 18:21
|
Частый гость
 
Группа: Участник
Сообщений: 161
Регистрация: 22-06-09
Из: Москва
Пользователь №: 50 531

|
Цитата(CTPEXHIH @ Nov 9 2011, 18:14)  Преобразование Фурье входного сигнала -> преобразование Фурье коэффициентов КИХ-фильтра -> быстрая свертка КИХ-фильтра и сигнала -> обратное преобразование Фурье результатов свертки. То есть, они делают классическую цифровую фильтрацию входного сигнала. Затем определяется частота отфильтрованного от помех сигнала.
Вопрос в следующем: почему не определить частоту сигнала, сделав БПФ исходного сигнала с шумом, и приняв за частоту полезного сигнала частоту максимальной составляющей в спектре? 1.Если они делают обратное преобразование, значит не хотят использовать БПФ для измерения, а используют, например, точки перехода через нуль уточняя их по нескольким отсчетам около. Вполне разумный метод и точный. 2.Здесь предложено несколько методов и все имеют право на существование, если у Вас имеются записи реального сигнала легко проверить каждый и выбрать лучший. 3.При измерении механических параметров нечувствительность к помехам важнее точности. Например ударить ломиком по трубе или включить какой-нибудь мотор рядом. Ложных показаний не должно быть, а измерения должны продолжиться скажем через полсекунды. <Ниже прикреплен файл с сигналом> Если хотите использовать БПФ - берите в выборку не менее 7 периодов сигнала и используйте какое-нибудь окно. А на Вашей приличный результат даст определение частоты по трем точкам(приблизительно через пи/4)
--------------------
Ты можешь знать все что угодно, но пока ты не доказал это на практике, ты не знаешь ничего!© Ричард Бах
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|