Unfog 0 19 мая, 2020 Опубликовано 19 мая, 2020 · Жалоба Задача: найти амплитуду полезного сигнала с частотой от 88 до 92 Гц. При этом в этой же полосе есть шумы, которые нужно отсеять. Например сигнал 90 Гц, шум - 91 Гц. При этом требования по отработки скорости изменения амплитуды - порядка 200 мс. Данные с АЦП, fs до 200 кГц. Пробовал два варианта: 1. БПФ - при разрешении по частоте один Гц - частота дискретизации, как я понимаю, должна быть равна окну БПФ, и как следствие страдает быстродействие (окно заполнится сигналом с новой амплитудой только через одну секунду). 2. Банк полосовых фильтров, но при задании полосы пропуская 1 Гц, постоянная времени тоже больше одной секунды. Желательно отсеять шум отличный на 0.5 Гц от полезного сигнала. Есть ли какие-нибудь варианты решения данной задачи? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
eugen_pcad_ru 0 19 мая, 2020 Опубликовано 19 мая, 2020 · Жалоба Алгоритм Герцеля посмотрите, может там удастся выжать требуемую скорость. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Unfog 0 19 мая, 2020 Опубликовано 19 мая, 2020 · Жалоба Если я правильно понял, то здесь http://www.dsplib.ru/content/goertzelmod/goertzelmod.html в формуле 17 как раз и написано, что при разнице между гармониками в 1 Гц, окно должно быть больше частоты дискретизации. Или я что то неверно понял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rkit 4 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба 6 hours ago, Unfog said: 2. Банк полосовых фильтров, но при задании полосы пропуская 1 Гц, постоянная времени тоже больше одной секунды. Тут ты запутался. Откуда взялось это больше одной секунды? И зачем банк, если нужна только одна полоса? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
embddr 0 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба Не знаю, как это правильно сделать, но можно наверное так: отфильтровать полосу 88-92Гц, сдвинуть её на 0, децимировать и сделать БПФ на полосе 0-4Гц с нужной дискретностью. Наверняка есть какие-то эффективные алгоритмы вычисления спектра для полосового сигнала, спросите у гугла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Unfog 0 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба 7 hours ago, rkit said: Тут ты запутался. Откуда взялось это больше одной секунды? И зачем банк, если нужна только одна полоса? Чтобы выделить полезный сигнал. Он может быть с частотой от 88 до 92 Гц. Более секунды получается, если делать фильтр, который пропускает полосу 1 Гц, с крутой АЧХ, чтобы соседние гармоники подавить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба Фит наименьшими квадратами f(t) = A*sin(w*t+phi), для нахождения A, w и phi, если известно что частот только две, можно сразу искать A1*sin(w1*t+phi1) + A2*sin(w2*t+phi2) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Unfog 0 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба 36 minutes ago, _pv said: Фит наименьшими квадратами f(t) = A*sin(w*t+phi), для нахождения A, w и phi, если известно что частот только две, можно сразу искать A1*sin(w1*t+phi1) + A2*sin(w2*t+phi2) Вы имеете в виду "Curve Fitting"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба 14 hours ago, Unfog said: Если я правильно понял, то здесь http://www.dsplib.ru/content/goertzelmod/goertzelmod.html в формуле 17 как раз и написано, что при разнице между гармониками в 1 Гц, окно должно быть больше частоты дискретизации. Или я что то неверно понял? никто не запрещает взять сигнал помножить на синус/косинус любой частоты, проинтегрировать, отнормировать, возвести в квадрат, сложить и извлечь корень. при этом частоты синуса/косинуса не обязательно брать 88, 89,90 и 91 Гц, даже с окном в 200мс можно посчитать интегралы Фурье для произвольных частот 88.1, 88.3246, и 88.45 Гц. Герцель лишь способ вычисления этого интеграла без использования тригонометрических функций. Другое дело что "ширина" каждого такого "отсчёта" будет 1/"размер окна". и даже идеальный синусоидальный сигнал с размеом окна 200мс, будет не узкой палкой в таком спектре, а иметь ширину 5Гц. тем не менее если сигнал/шум позволяет, положение максимума можно найти гораздо-гораздо точнее чем 5Гц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Unfog 0 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба 5 hours ago, _pv said: Другое дело что "ширина" каждого такого "отсчёта" будет 1/"размер окна". и даже идеальный синусоидальный сигнал с размеом окна 200мс, будет не узкой палкой в таком спектре, а иметь ширину 5Гц. тем не менее если сигнал/шум позволяет, положение максимума можно найти гораздо-гораздо точнее чем 5Гц. Так у меня с этим, как я понял, и проблема. Шум может находиться рядом с сигналом. И если делать окно 200 мс, то на определения максимума будет влиять шум, т. к. он будет в полосе 5Гц. По сути мне необходимо с окном 200 мс обеспечить ширину спектра каждого отсчета хотя бы 1 Гц, или эти принципиально невозможно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 78 20 мая, 2020 Опубликовано 20 мая, 2020 · Жалоба просто синус 90Гц и синус 90Гц + 0.1*Sin 91Гц. ну и плюс белого шума немного. да, на спектре максимум просто немного съедет на 90.1Гц. простым Фурье за 200мс их не разрешить. а вот если знать именно ищем в сигнале и там действительно только два синуса, то в принципе найти их можно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Unfog 0 20 мая, 2020 Опубликовано 20 мая, 2020 (изменено) · Жалоба 3 hours ago, _pv said: простым Фурье за 200мс их не разрешить. В смысле эта задача принципиально не может быть решена за 200 мс? Это для общего развития больше вопрос. 3 hours ago, _pv said: вот если знать именно ищем в сигнале и там действительно только два синуса, то в принципе найти их можно. Тогда есть идея - я могу с большим окном точно определять частоту полезного сигнала, приняв, что она быстро изменяться не может. Значит мне нужно только точно определить амплитуду полезного сигнала, частоту которого я знаю, шумы не интересуют. 1. Для этого использовать лучше FindFit? 2. Curve Fitting и есть FindFit? 3. Какой средой вы пользуетесь? Изменено 20 мая, 2020 пользователем Unfog Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Unfog 0 21 мая, 2020 Опубликовано 21 мая, 2020 · Жалоба Про среду - нашел. Немного изменю вопрос - каким способом лучше находить амплитуду гармоники заданной частоты, если частота шума неизвестна (может относительно быстро меняться)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться