|
Спектральный анализ на сверхнизких частотах |
|
|
|
May 31 2013, 11:58
|

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

|
QUOTE (ne_ya @ May 30 2013, 12:05)  откомпелировал код на фортране, запустил -- ответ с предоставленным в книге не совпадает. Зато очень даже похож на то, что при переписывании на c# получалось. Так что все-таки вряд ли "все блочные методы у Марпла рабочие", к сожалению. Оставлю на вашей совести, обвинение Марпла в публикации неработающего метода в книге. Говорю же в книге, особенно переводной, могут быть опечатки, особенно типично I пропечатать как 1 или J, могут быть пропущены даже строки в программе. Ладно, помогу Вам немного, раз уж ввязался. В книге есть ссылки на публикации по каждому методу, и в большинстве публикаций в то время было принято приводить псевдокод и, часто, код на ФОРТРАНе. А ковариационный метод для Марпла "проприетарный", в том смысле, что это метод Марпла, как метод Левинсон-Дурбина - это метод Левинсона и Дурбина, а не Берга. Поэтому он особенно постарался. Ковариационный метод Марпл предлагал даже в более общем и интересном варианте - для идентификации FIR-систем по короткой последовательности (типа статический эквалайзер модема по известной преамбуле). То есть Yn = FIR(Xn-1), а не Xn=FIR(Xn-1) как в AR Эта работающая реализация не настолько стара, чтобы быть мне недоступной. Вот эта статья c программой (FORTRAN в самом крутом, комплексном варианте), сравните со своей реализацией, заменяя вектор Y на сдвинутый Х, получится ваша AR-модель. ЗЫ.В принципе у меня есть РАБОТАЮЩАЯ реализация на С, но не очень хочется заморачиваться с ее размещением (С-файл в форуме не атачится), да Вы и не просили, да и вообще, если программа не понравится - скажите какую-то гадость - лучше не буду навязываться
|
|
|
|
|
Jun 3 2013, 06:12
|
Группа: Новичок
Сообщений: 4
Регистрация: 29-04-13
Пользователь №: 76 672

|
Цитата(fontp @ May 31 2013, 15:58)  Оставлю на вашей совести, обвинение Марпла в публикации неработающего метода в книге. Говорю же в книге, особенно переводной, могут быть опечатки, особенно типично I пропечатать как 1 или J, могут быть пропущены даже строки в программе. Ладно, помогу Вам немного, раз уж ввязался. В книге есть ссылки на публикации по каждому методу, и в большинстве публикаций в то время было принято приводить псевдокод и, часто, код на ФОРТРАНе. А ковариационный метод для Марпла "проприетарный", в том смысле, что это метод Марпла, как метод Левинсон-Дурбина - это метод Левинсона и Дурбина, а не Берга. Поэтому он особенно постарался. Ковариационный метод Марпл предлагал даже в более общем и интересном варианте - для идентификации FIR-систем по короткой последовательности (типа статический эквалайзер модема по известной преамбуле). То есть Yn = FIR(Xn-1), а не Xn=FIR(Xn-1) как в AR Эта работающая реализация не настолько стара, чтобы быть мне недоступной. Вот эта статья c программой (FORTRAN в самом крутом, комплексном варианте), сравните со своей реализацией, заменяя вектор Y на сдвинутый Х, получится ваша AR-модель. ЗЫ.В принципе у меня есть РАБОТАЮЩАЯ реализация на С, но не очень хочется заморачиваться с ее размещением (С-файл в форуме не атачится), да Вы и не просили, да и вообще, если программа не понравится - скажите какую-то гадость - лучше не буду навязываться  Спасибо большое за помощь!
|
|
|
|
|
Aug 26 2013, 19:16
|
Группа: Новичок
Сообщений: 9
Регистрация: 26-08-13
Пользователь №: 78 056

|
Цитата(_pv @ May 28 2013, 21:55)  возник похожий вопрос, так что спрошу тут. есть N точек с достаточно неравномерной сеткой, сигнал - серия коротких импульсов, соответсвенно вокруг импульса сетка чаще, там где ничего нет между импульсами, околонулевой сигнал - сетка реже. интересует только одна конкретная частота, но с разной полосой. Можно сделать дискретное преобразование Фурье (DFT) на неравномерной сетке. Оно немного (зависит от степени неравномерности) хуже обусловлено, и требует большего объёма вычислнеий по сравнению с DFT (нужно решать систему линейных уравнений) Цитата(_pv @ May 28 2013, 21:55)  1) если просто посчитать интеграл Фурье, какая получится полоса у полученного спектрального отсчёта? "Интеграл Фурье" для дискретных отсчётов посчитать нельзя. Наверно, имеется в виду дискретное преобразование Фурье? Если взять обычное DFT и применить к последовательности, оцифрованной с неравномерным шагом, результаты будут некорректными. Если же попытаться делать что-то типа перемножения измеренного с неравномерным шагом сигнала на дискретизированные с тем же шагом синусоиды, то результат будет опять же некорректный, потому что такие синусоиды не ортогональны. Если же их ортогонализовать с помощью процесса Грама-Шмидта, то получится метод, эквивалентный вышеупомянутому дискретному преобразованию Фурье на неравномерной сетке.
|
|
|
|
|
Aug 26 2013, 21:35
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(Mikhail K. @ Aug 27 2013, 01:16)  Если же попытаться делать что-то типа перемножения измеренного с неравномерным шагом сигнала на дискретизированные с тем же шагом синусоиды, то результат будет опять же некорректный, потому что такие синусоиды не ортогональны. мне только одна частота нужна, и да я беру и сэмплирую своей неравномерной сеткой синус / косинус перемножаю с сигналом и суммирую, почему это некорректно? а если я на данные, например, сплайн кубический натяну и честно эти полиномы третьей степени перемноженные с синусом/косинусом проинтегрирую вроде всё корректно будет. и сетка хоть и не равномерная, но даже там где разреженная, всё равно заметно мельче чем интересующая частота.
|
|
|
|
|
Aug 28 2013, 13:48
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(Crowbar @ Jul 2 2007, 12:21)  Допустим, требуется получить разложение спектра частот до 20Гц с точностью 0,01Гц и выше. Каким образом это реализуется, помимо самого простого способа, как поставить частоту отцифровки на 40Гц, выставить кол-во сэмплов на 4000 и ждать больше полутора минут завершения очередного цикла? Я бы частоту самплинга повыше выбрал. Вы ставите anti aliasing filter? Он частоту Найквиста (Котельникова) подавит, что я думаю вам нежелательно. Не ставить фильтр также нежелательно. Без фильтра можно получить "чудеса". Продолжительность измерения определяет разрешение шкалы результата. Допустим вы измеряли 1000 секунд, тогда после преобразования Фурье разрешение будет 1/1000 = 0.001 Герц. Конечно можно и получить ниже, но выше не получится. Цитата(_pv @ Aug 27 2013, 01:35)  мне только одна частота нужна, и да я беру и сэмплирую своей неравномерной сеткой синус / косинус перемножаю с сигналом и суммирую, почему это некорректно? а если я на данные, например, сплайн кубический натяну и честно эти полиномы третьей степени перемноженные с синусом/косинусом проинтегрирую вроде всё корректно будет. и сетка хоть и не равномерная, но даже там где разреженная, всё равно заметно мельче чем интересующая частота. Для одной частоты не надо делать преобразование Фурье. Достаточно считать корелляции с синусом и косинусом заранее известной частоты.
|
|
|
|
|
Aug 30 2013, 11:33
|
Группа: Новичок
Сообщений: 9
Регистрация: 26-08-13
Пользователь №: 78 056

|
Цитата(_pv @ Aug 27 2013, 01:35)  мне только одна частота нужна, и да я беру и сэмплирую своей неравномерной сеткой синус / косинус перемножаю с сигналом и суммирую, почему это некорректно? Я написал, почему. Можете сделать численный эксперимент - вычислите оцифровку серии коротких импульсов с заданной частотой, и пропустите через ваш аллгоритм. Попробуйте то же самое на разных частотах. Сравните результат алгоритма с априори известной частотой импульсов Цитата(_pv @ Aug 27 2013, 01:35)  а если я на данные, например, сплайн кубический натяну и честно эти полиномы третьей степени перемноженные с синусом/косинусом проинтегрирую вроде всё корректно будет. и сетка хоть и не равномерная, но даже там где разреженная, всё равно заметно мельче чем интересующая частота. Корректный алгоритм должен давать точное значение искомой частоты, когда погрешность измерения стремится к нулю. Всё то, что вы пишете выше, таким свойством не обладает.
|
|
|
|
|
Aug 30 2013, 15:08
|
Группа: Новичок
Сообщений: 9
Регистрация: 26-08-13
Пользователь №: 78 056

|
Цитата(Tarbal @ Aug 30 2013, 15:43)  Все определяется целью, в АОНАх или DTMF детекторах этот алгоритм блестяще справляется. Если требования к точности низкие, то этот алгоритм опять-таки не нужен, потому что можно делать что-то более простое, например, считать число переходов через ноль. Цитата(fontp @ Aug 29 2013, 12:23)  А если частота известна только примерно, нужно вычислить несколько таких корреляций ( минимум 3) вблизи известной частоты с тем, чтобы провести интерполяцию пика и выявить максимум Ведь известно, что отклик на синусоиду в спектральной области повторяет функцию спектрального окна, то есть будем иметь выборки этого спектрального пика в окрестности максимума. Совсем вблизи максимума всякий непрерывный пик, может приближаться квадратичной параболой Кстати, такой алгоритм не даст истинного значения частоты даже при идеальной оцифровке сигнала - без пропуска и шума. Да, я знаю, что "все так делают, и ничего".
|
|
|
|
|
Aug 30 2013, 18:11
|

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

|
QUOTE (Mikhail K. @ Aug 30 2013, 19:08)  Кстати, такой алгоритм не даст истинного значения частоты даже при идеальной оцифровке сигнала - без пропуска и шума. Да, я знаю, что "все так делают, и ничего". Действительно не даст из-за систематического смещения оценки.Но 1. Это смещение очень мало для зашумленного сигнала ( хуже 30-40 дб) по сравнению с случайной ошибкой, обусловленной шумом. Причем эта случайная ошибка достигает минимальных предельных значений, достижимых любым другим способом, поскольку она приближается к оценке максимального правдоподобия, которая известна как предельная оценка Крамера-Рао 2. Систематическое смещение контролируется в широких пределах способом интерполяции - выбором окон и числа корреляторов. Теоретически увеличивая число корреляторов можно сделать эту ошибку как угодно малой, но это практически неэффективно Поэтому так и делают, что это теоретически обосновано- такой алгоритм наиболее устойчив в отношении шумов. Естественно, при очень высоком отношении сигнал/шум такой метод становится не адекватным из-за смещения оценки. Любой метод имеет область применения и где-то становится неадекватным Кстати, ковариационный алгоритм Марпла, также является некоторым образом оценкой максимального правдоподобия, поскольку оценка линейной системы по минимуму квадратов невязки приводит к нормальным уравнениям, причем в качестве матрицы в левой стороне как раз будет матрица ковариации. Получается оценка импульсного отклика TSE- линейной системы по минимуму квадратов быстрым алгоритмом (импульсного отклика, но не спектрального)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|