|
|
  |
Определение постоянной составляющей синусоиды... |
|
|
|
Nov 26 2008, 10:43
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(RadioJunior) Со мной кто-нибудь согласен по этому поводу? Молчание - знак согласия  Цитата(alex_os) И чтобы посчитать туже корреляцию разве не нужно накопить достаточный блок данных? Достаточно двух периодов сигнала. То есть реальных, а не предположительно максимального периода для постоянной времени фильтра.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 26 2008, 21:29
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Цитата(RadioJunior @ Nov 26 2008, 12:11)  пост не в тему... Зачем? Цитата(RadioJunior @ Nov 26 2008, 12:11)  Stanislav, не обижайтесь, но это правда.
Вот какую ветку ни открою, везде Stanislav пытается всем утереть нос под видом большого знатока всего и вся. Во-первых, не всем. На электрониксе тусуется табунок неучей, охарактеризованных мной в теме, на которую здесь есть ссылка. Отличительная особенность - неистребимое желание писать ерунду во всех ветках, которые Вам довелось открывать, и не только, а также паталогическая неспособность признавать свои ошибки или неправоту и вести конструктивный диалог. Вот он-то и является предметом моего особенного внимания, о чём я объявлял каждой особи открыто и доходчиво. Во-вторых, пытаюсь утереть сопли, или всё-таки утираю? РадиоЮноша, пора бы научится отличать эти понятия. Докажите, что я неправ в чём-либо, и у нас с Вами будет полное взаимопонимание. А флудить здесь не надо - тема вполне конкретная, а Вам-то я хорошо знаю цену - сосунок, вздумавший, что ему можно хамить дяде (письма личные привести, чтобы все полюбовались?). В-третьих, кто-то получил по заслугам за излишнее высокомерие и вальяжность. От маклауда через тяжеловеса. В дальнейшем будет придерживать язык, я думаю. С вашей командой у меня разговор короткий. Давил, и буду давить, пока уму-разуму не научитесь, не начнёте признавать свои ошибки и говорить по существу вопроса. Вы также являетесь ярким представителем данного сообщества, и на снисхождение не надейтесь. Жаль, времени на вас всех мало... На месте модераторов я бы уделил вашей стайке самое пристальное внимание. Толку от ваших постов чуть, а словесного мусора - выше крыши. Цитата(RadioJunior @ Nov 26 2008, 12:11)  Это кризис возраста или врожденный комплекс Наполеона?... Отнюдь. Элементарное желание сделать воздух на форуме чище. Можете считать меня ассенизатором.  Цитата(RadioJunior @ Nov 26 2008, 12:11)  ...Со мной кто-нибудь согласен по этому поводу? Конечно, есть такие! Цитата(blackfin @ Nov 26 2008, 08:23)  Предлагаю на поставленную задачу посмотреть под другим углом. Для выделения полезного сигнала на фоне шума ничего лучше согласованного фильтра, насколько мне известно, ещё не придумали. В данной задаче полезным сигналом является постоянная составляющая. Согласованным фильтром для неё будет ФНЧ с бесконечно узкой полосой пропускания. Ч.Т.Д. Это верно. Только ФНЧ с бесконечно узкой полосой пропускания будет иметь и бесконечно большое время отклика. Ждать придётся не до посинения, а до самых белых слонов.
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Nov 27 2008, 00:07
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 7-06-08
Пользователь №: 38 128

|
Господа, сразу прошу прощения за то, что вмешиваюсь в вашу интеллектуальную беседу. Я студент, проблема мне показалась интересной, поэтому я захотел разобраться, но к сожалению умные люди не пришли к единому мнению, поэтому я полез в матлаб, попробовать озвученные методы.
Сначала сформулирую проблему, которую решал: есть N отсчетов, в которых присутствует синусоида + постоянная составляющая + шум. Период синусоиды заведомо в разы больше N, начальная фаза случайная. Шум -- норм. распределенная случ. величина с нулевым мат. ожиданием.
Я попробовал два озвученных решения: ФНЧ и Станислава. ДПФ и АКФ не смотрел, потому что не понимаю как они здесь помогут.
ФНЧ брал 1й Чебышева. Варьировал все возможные параметры как мог, но не смог добиться того, чтобы на выходе как-то обозначилась искомая величина. Да, выход по времени рассматривал достаточно длинный.
Для реализации метода, предложенного Станиславом взял Curve Fitting toolbox из матлаба. При бесконечном ОСШ он точно выдает искомую величину. В присутствии шума решение начинает гулять. Только надо выставлять область ограничений для решения не бесконечную, иначе минимумов у целевой функции получается несколько.
На все это я потратил 1 час 7 минут.
Вопросы к знающим: 1. как именно вы предлагаете применять фнч? 2. Как здесь можно использовать дпф или акф?
Отдельная просьба: ваше мнение о моих способностях, оставьте при себе.
|
|
|
|
|
Nov 27 2008, 00:23
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Цитата(mvb @ Nov 27 2008, 03:07)  Для реализации метода, предложенного Станиславом взял Curve Fitting toolbox из матлаба. При бесконечном ОСШ он точно выдает искомую величину. В присутствии шума решение начинает гулять. Только надо выставлять область ограничений для решения не бесконечную, иначе минимумов у целевой функции получается несколько.
На все это я потратил 1 час 7 минут. Вероятно, Вы неплохо изучили Матлаб, потому, что у меня ушло бы времени больше, хотя работать с ним приходится. Если не трудно, выложите программу, интересно посмотреть. Постараюсь сделать и свою, если время будет. Конечно, оценка в шумах будет гулять. Но она будет, и она будет оптимальной, в каком угодно смысле. Кроме того, в условии о шумах ничего не говорилось. Есть сигнал, нужно определить постоянную составляющую. Формально поставленная задача, имеющая сугубо формальное решение. О ньюансах автор как-то не сообщал. В условиях больших помех сильно может помочь априорное знание хотя бы одного из параметров - амплитуды или фазы гармонического сигнала, например. Впрочем, это банальность. Знание вида функции уже даёт многое. ЗЫ. Кстати, фитнуть можно и не гармонической функцией, а её разложением в ряд. Вероятно, будет менее напряжённо вычислительно.
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Nov 27 2008, 04:12
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(mvb) 2. Как здесь можно использовать дпф или акф? ДПФ более-менее точно измеряет частоту/период, когда в блоке находится много периодов. АКФ достаточно два периода. Хотя имея гарантированно два периода частоты можно "ручками" отсканировать блок (свёртками sin/cos) на дробные частоты. 729 кажется знал ещё какой-то хороший метод определения дробных частот. Только он пропал куда-то.
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 27 2008, 21:10
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 7-06-08
Пользователь №: 38 128

|
Вот мой код, без претензий на робастность и скорость: Код clc;
N = 100; % кол-во отсчетов n = 1:N; d = .1; % постоянная составляющая p = rand()*pi; % случайная фаза f = 1/(4*N); % частота (в N отсчетах 1/4 периода) SNR = 40; % ОСШ в дБ
% собсно анализируемые отсчеты s = sin(2*pi*f*n+p) + d + randn(1, N)*(d+sqrt(2))*10^(-SNR/20);
st_ = [ .5 2*pi*f 0 0 ]; fo_ = fitoptions('method','NonlinearLeastSquares','Lower',[0 0 -1.7 -1],'Upper',[5 0.10000000000000001 1.7 0.10000000000000001]); set(fo_,'Startpoint',st_); ft_ = fittype('a*sin(b*x+c)+d',... 'dependent',{'y'},'independent',{'x'},... 'coefficients',{'a', 'b', 'c', 'd'}); cf_ = fit(n',s',ft_,fo_);
a = coeffvalues(cf_);
a(4) Да, у меня тоже была мысль о разложении синуса в ряд, или как-то перейти к полиному Чебышева, но тогда постоянная составляющая будет спрятана в свободном члене полинома, и как ее оттуда вычленить я не знаю. 2GetSmart: ну если в распоряжении есть больше (м.б. больше равно) одного периода, то все становится понятно
|
|
|
|
|
Nov 28 2008, 05:00
|
Знающий
   
Группа: Свой
Сообщений: 552
Регистрация: 29-02-08
Пользователь №: 35 481

|
Цитата(RadioJunior @ Nov 26 2008, 12:11)  Это кризис возраста или врожденный комплекс Наполеона?... Нет. Вы ошибаетесь. Нет никакого кризиса возраста и нет никакого Наполеона. Все оказалось намного банальнее. Цитата(Stanislav @ Nov 27 2008, 00:29)  Можете считать меня ассенизатором.  Если человек потратил жизнь на борьбу с гав..ом. Сами понимаете....
|
|
|
|
|
Nov 28 2008, 06:55
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Цитата(mvb @ Nov 28 2008, 00:10)  Вот мой код, без претензий на робастность и скорость: Код .................................. Понятно. Собственно, у меня вышло бы так же. Попробую его "усовершенствовать", когда время будет. Цитата(mvb @ Nov 28 2008, 00:10)  Да, у меня тоже была мысль о разложении синуса в ряд, или как-то перейти к полиному Чебышева, но тогда постоянная составляющая будет спрятана в свободном члене полинома, и как ее оттуда вычленить я не знаю. Тоже подумаю. Цитата(mvb @ Nov 28 2008, 00:10)  2GetSmart: ну если в распоряжении есть больше (м.б. больше равно) одного периода, то все становится понятно А мне вот не совсем понятно, что собирается делать GetSmart, если в его распоряжении будет кусок, заведомо больший только одного периода. Цитата(Михаил_K @ Nov 28 2008, 08:00)  Нет. Вы ошибаетесь. Нет никакого кризиса возраста и нет никакого Наполеона. Все оказалось намного банальнее.
Если человек потратил жизнь на борьбу с гав..ом. Сами понимаете.... Да не потратил ещё. А трачу.
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Nov 28 2008, 10:03
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 7-06-08
Пользователь №: 38 128

|
Если бы у меня был бы фрейм с достаточным количеством отсчетов, я бы сначала попробовал такой способ:
1. Определил бы период синуса (в первом приближении с пом. автоковариационной функции, дальше покопал бы продвинутые методы вычисления спектра)
2. Далее скомпенсировал бы ошибку в ДПФ на 0 частоте от того, что частота синуса не кратна 2*Pi/N Насколько я помню отклик гармонической функции при ДПФ пропорционален sinc, тогда получается что-то вроде этого: модуль постоянной составляющей = ДПФ(0) - sinc(0 - fsin)*ДПФ(fsin) (fsin -- измереная частота синуса)
Наверняка вы найдете здесь ошибки, укажите мне на них пожалуйста!
|
|
|
|
|
Nov 28 2008, 11:45
|

Гуру
     
Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987

|
Цитата(mvb @ Nov 28 2008, 13:03)  Если бы у меня был бы фрейм с достаточным количеством отсчетов, я бы сначала попробовал такой способ:
1. Определил бы период синуса (в первом приближении с пом. автоковариационной функции, дальше покопал бы продвинутые методы вычисления спектра)
2. Далее скомпенсировал бы ошибку в ДПФ на 0 частоте от того, что частота синуса не кратна 2*Pi/N Насколько я помню отклик гармонической функции при ДПФ пропорционален sinc, тогда получается что-то вроде этого: модуль постоянной составляющей = ДПФ(0) - sinc(0 - fsin)*ДПФ(fsin) (fsin -- измереная частота синуса)
Наверняка вы найдете здесь ошибки, укажите мне на них пожалуйста! Щас времени маловато. Вот некоторые соображения: 1. Автоковариационный метод даст большую ошибку в определении частоты, даже если в окне будет несколько периодов. Только по одному периоду, ПМСМ, работать не будет. Собственный простой способ предложу попозже. 2. Не учтена амплитуда гармонического сигнала и его фаза, поэтому ДПФ будет неоднозначной по отношению к этим параметрам. Правда, после оценивания частоты её найти их не так уж сложно. Или я не понял что-то? Впрочем, способ интересный, есть в нём что-то эдакое... ЗЫ. А-а, понял, наконец.  Речь идёт, конечно, о модулях спектра сигнала. Что ж, посмотрю на досуге, действительно стало интересно. Только с фазой, по-моему, всё равно засада... Лучшим же методом считаю, как и в первом случае, использование приближения входного сигнала известной функцией (фиттинг). Правда, здесь ещё подумать надо: возможно, есть более простой и точный способ.
--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
|
|
|
|
|
Nov 28 2008, 13:08
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Цитата(mvb) 2. Далее скомпенсировал бы ошибку в ДПФ на 0 частоте от того, что частота синуса не кратна 2*Pi/N Насколько я помню отклик гармонической функции при ДПФ пропорционален sinc, тогда получается что-то вроде этого: модуль постоянной составляющей = ДПФ(0) - sinc(0 - fsin)*ДПФ(fsin) (fsin -- измереная частота синуса) Я например многое из этого не понял. ДПФ по какому блоку делается? По одному или по скольки буферам? sinc(0 - fsin)*ДПФ(fsin) что из себя представляет? Это свёртка? Кстати, ДПФ(0) - это простое среднее арифметическое блока. Как бы амплитуда постоянки (0 Гц), которая в отличие от остальных спектральных компонентов даже фазы не имеет. У меня сразу мысли возникают - почему такая дискриминация, ведь все частоты должны быть равноправные? Но это к этой теме отношения не имеет  Да, и забыл совсем Цитата(Stanislav) ...Надеюсь, что попрошайничество на сей раз Вам не поможет снять взыскание... Бред сивой кобылы
Сообщение отредактировал GetSmart - Nov 28 2008, 13:20
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
Nov 30 2008, 09:21
|
Участник

Группа: Участник
Сообщений: 72
Регистрация: 7-06-08
Пользователь №: 38 128

|
Попробовал на досуге определить период синуса в матлабе через автоковариацию. При вышеописаных условиях получается ошибка порядка 10-15%, чего явно не достаточно. Чем больше периодов умещается в окне, тем меньше относителльная погрешность. Вобщем да, имея один период определить частоту получается плохо.
Станислав: да, под ДПФ(х) я подрузомевал модуль, извините, за то что так криво написал. На самом деле под ДПФ(fsin) я имел ввиду просто амплитуду синусоиды, из ДПФ ее вычленить наверное не получится...
GetSmart: sinc(0 - fsin)*ДПФ(fsin) -- нет, это просто sinc, умноженный на амплитуду синусоиды. Модуль ДПФ(0) строго равен среднему арифметическому, аргумент же строго равен нулю. Все просто: вычисляется скалярное произведение сигнала с комплексной экспонентной от нуля -- ДПФ(0) = <s, exp(j*0)>/N exp(j*0) = 1 Т.о. получается что действительная часть ДПФ(0) равна просто сумме сигнала деленного на N, а мнимая нулю.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|