реклама на сайте
подробности

 
 
13 страниц V  « < 10 11 12 13 >  
Reply to this topicStart new topic
> Измерение частоты основной гармоники (50 Гц) с точностью 0.01 Гц
thermit
сообщение Nov 11 2015, 20:19
Сообщение #166


Знающий
****

Группа: Участник
Сообщений: 781
Регистрация: 3-08-09
Пользователь №: 51 730



Цитата(Pridnya @ Nov 11 2015, 14:48) *
Код сишный? Я бы хотел проверить его в работе (программно и/или в железе, лучше в железе). Варианта два: в виде EXE-шника или в виде *.lib библиотеки для STM32F407, это если хотите сохранить код закрытым.


Это когда Баскакова обратно склеите. В этом топике информации для реализации более, чем достаточно.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Nov 11 2015, 23:53
Сообщение #167


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Что-то Вы залезли в такие дебри математики... Вот результаты моделирования. 3200 Гц дискретизации 1024 точки Фурье, окно Гаусса. При отсутствии шума во входном сигнале точность лучше 6 знаков после запятой. Далее привожу файлы результатов при 5% белого шума и 10%.
Прикрепленный файл  Freq5p.txt ( 5.52 килобайт ) Кол-во скачиваний: 116

Прикрепленный файл  Freq10p.txt ( 5.52 килобайт ) Кол-во скачиваний: 70

Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 12 2015, 05:34
Сообщение #168


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(thermit @ Nov 11 2015, 23:19) *
Это когда Баскакова обратно склеите. В этом топике информации для реализации более, чем достаточно.

Странное у вас условие. Если есть знания, то их нужно реализовывать. На память приходит товарищ Перельман и доказательство гипотезы Пуанкаре.
Странные люди, эти математики (с хорошим знанием математики, если оно есть, если это не пользователи какого-либо матпакета), нет бы все на благо Родины, а они "я знаю, но не скажу...мне ничего не нужно, я особенный, а вы балбесы еще лет 30 нничего сделать не сможете...". rolleyes.gif. Григорий, если это вы, то так нельзя, не допустимо и не позволительно, потомки вам этого не простят. biggrin.gif

Цитата(Alex11 @ Nov 12 2015, 02:53) *
Что-то Вы залезли в такие дебри математики... Вот результаты моделирования. 3200 Гц дискретизации 1024 точки Фурье, окно Гаусса. При отсутствии шума во входном сигнале точность лучше 6 знаков после запятой. Далее привожу файлы результатов при 5% белого шума и 10%.
Прикрепленный файл  Freq5p.txt ( 5.52 килобайт ) Кол-во скачиваний: 116

Прикрепленный файл  Freq10p.txt ( 5.52 килобайт ) Кол-во скачиваний: 70
]
Результат хороший. Каким методом считали? Эрик Якобсен, или по Гауссу но как-то по своему...?
У вас в обоих файлах входной сигнал задается через каждые 0,10 Гц, а хотелось бы увидеть через 0,01 Гц. Требуется же разрешение показометра 0,01 Гц и ошибку для такой сетки частот. Если *.txt файл будет большой, то открою с помощью notepad++.

Вот уже несколько пользователей писали про сигнал с подмешанным шумом в процентах от сигнала. Вы создаете такое сигнал, наверное, в матлабе, а вот как мне оценить уровень шума в моей системе? Я могу лишь на частоте дискретизации взять выборки АЦП. Вот что получится. Какой здесь уровень шума, кто-нибудь может ответить.

Все сигналы отображаются в отсчетах АЦП. При отсутствии сигнала, например, для 16-ти разрядного АЦП (-32768...32767) в канале Ic амплитудное значение с выхода АЦП равно от -4 до 1 (это шум системы). Сколько процентов равен шум в моем случае? Какое отношение сигнал/шум возможно при амплитуде сигнала 1000 разрядов АЦП и этом шуме?

Сообщение отредактировал Pridnya - Nov 12 2015, 05:50
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 12 2015, 06:12
Сообщение #169


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Мне кажется, что тема довольно неплохо была раскрыта вот тут:
http://electronix.ru/forum/index.php?showtopic=84446
По крайней мере, можно использовать как стартовую точку.

Ну и моделирование. Матлаб- "наше все".
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 12 2015, 07:12
Сообщение #170


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(Ruslan1 @ Nov 12 2015, 09:12) *
Мне кажется, что тема довольно неплохо была раскрыта вот тут:
http://electronix.ru/forum/index.php?showtopic=84446
По крайней мере, можно использовать как стартовую точку.

Ну и моделирование. Матлаб- "наше все".

Тогда, учитывая, что вы "там" увидели раскрытие темы и пока не забыли, подсобите простым крестьянам, где там "ключ" и как им воспользоваться? И еще интересует, где начинается "стартовая точка", т.е. откуда начинать. На одном языке разговариваем, а дело сделать не можем. Кто-то утверждает, что уже все сделал, но в матлабе. Ну не генерит же матлаб Си-шный код для Cortex M4F. А без матлаба мы никак, во какая зависимость. rolleyes.gif

PS: Так мы до профтехучилищ дойдем: специальность "оператор ЭВМ", специализация "пользователь матлаб". biggrin.gif

Сообщение отредактировал Pridnya - Nov 12 2015, 07:17
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Nov 12 2015, 08:01
Сообщение #171


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(Pridnya @ Nov 12 2015, 10:12) *
Ну не генерит же матлаб Си-шный код для Cortex M4F. А без матлаба мы никак, во какая зависимость.

Почему это не генерирует? Еще как. И не один год уже.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 12 2015, 08:08
Сообщение #172


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(Pridnya @ Nov 12 2015, 09:12) *
Тогда, учитывая, что вы "там" увидели раскрытие темы и пока не забыли, подсобите простым крестьянам, где там "ключ" и как им воспользоваться? И еще интересует, где начинается "стартовая точка", т.е. откуда начинать. На одном языке разговариваем, а дело сделать не можем. Кто-то утверждает, что уже все сделал, но в матлабе. Ну не генерит же матлаб Си-шный код для Cortex M4F. А без матлаба мы никак, во какая зависимость. rolleyes.gif

PS: Так мы до профтехучилищ дойдем: специальность "оператор ЭВМ", специализация "пользователь матлаб". biggrin.gif

Ну, мне "там" помогли. В процессе "раскрытия" я освоил Матлаб, изучил его язык, сделал матмодель, проверил ее на реальных данных (залитых в компьютер с помощью того же Матлаба), соорудил си-программу (FFT использовал готовый, но без закрытых либ- все на чистом стандартном си), протестировал в С++Билдере, перевел на мое тогдашнее железо (PIC32), проверил в симуляторе на подсунутых известных данных, проверил в отладчике от генератора, проверил от реального датчика. Уф! sm.gif Шаг за шагом.

Коротко по методу: FFT (у меня-4096 точек), окно(у меня-Гаусс), интерполяция (у меня-квадратичная интерполяция по трём точкам).
Но чудес не бывает, нужно хоть немного понимать что делаете и что от чего и как зависит, иначе результат случаен. А для этого нужно немного теорию почитать и много моделировать (в матлабе).

А кортекс у Вас или мипс или еще что- это безразлично, ничего специализированного в общем случае и не нужно для решения задачи (у меня, например, чистый Си на выходе- без проблем таскал внутри Майкрочипов от pic18 до pic32).
Вот когда получилось достигнуть нужных параметров по точности и разрешению- тогда можно и про оптимизацию подумать для ускорения, с привязкой к конкретному ядру и предскомпилированным чужим библиотекам.
Go to the top of the page
 
+Quote Post
blackfin
сообщение Nov 12 2015, 08:11
Сообщение #173


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Pridnya @ Nov 12 2015, 10:12) *
Кто-то утверждает, что уже все сделал, но в матлабе.

Вы тут уже утомили всех своими претензиями.. biggrin.gif

Вот этот код в MATLAB'e дает ошибку меньше чем 10-3 [Hz]:
Код
N  = 1024;                    % Total Samples
Fd = 3200;                    % Sampling Frequency [Hz]
dT = 1/Fd;                    % Time Step [S]
dF = Fd/N;                    % Freq Step [Hz]
Zs = 4;                       % Zero Fill N*(Zs-1) Samples (Zs = 2^M, ie, Zs = 1,2,4,8,16..)
t = 0:dT:dT*(N-1);
f = 0:dF:dF*(N*Zs-1);
for n = 1:1000
Fsrc = 45.0+0.01*n;           % Frequency of Source [Hz]
Psrc = pi/3+(pi/3000)*n;      % Phase of Source [Rad]
St = sin(2*pi*Fsrc*t+Psrc);   % S(t) - Source Signal
Tg = 0.04;                    % Width of Window [S]
Wg = exp(-(t-dT*N/2).^2/Tg^2);
Ws = Wg.*St;
Sf = fft(Ws,N*Zs);
Sa = abs(Sf);
[M,I] = max(Sa);
S1 = Sa(I-1);
S2 = Sa(I);
S3 = Sa(I+1);
Freq = (dF*(I-1)+0.5*dF*(S3-S1)/(2*S2-S3-S1))/Zs;
Ferr(n) = abs(Fsrc-Freq);
Ftst(n) = Fsrc;
end;
plot(Ftst,Ferr);
grid on
xlabel('Frequency [Hz]')
ylabel('Error')
legend('Frequency Error [Hz]');


Ошибка измерения:
[attachment=96658:FreqEst.jpg]
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Nov 12 2015, 08:24
Сообщение #174


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(blackfin @ Nov 12 2015, 10:11) *
Вот этот код в MATLAB'e дает ошибку меньше чем 10-3:
.....

Эх, а я к этому результату медленно полз.....
Что интересно- когда дополз, то нашел в интернете кучу практически готовых ответов на мой вопрос. Но пока не понимал что искать, ответ найти не мог sm.gif
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 12 2015, 09:19
Сообщение #175


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(Ruslan1 @ Nov 12 2015, 11:08) *
Ну, мне "там" помогли...

Спасибо!

Цитата(blackfin @ Nov 12 2015, 11:11) *
Вы тут уже утомили всех своими претензиями.. biggrin.gif

Вот этот код в MATLAB'e дает ошибку меньше чем 10-3:

Какие могут быть претензии, это от беспомощности. crying.gif

А теперь по делу: из вашего кода мне понятно (я вообще этого языка не знаю, придется, наверное, учить), что вы в цикле:
создаете сигнал с нужными мне параметрами,
умножаете выборку на окно Гаусса,
вычисляете БПФ,
находите центр и два соседних бина,
по формуле считаете частоту,
считаете ошибку.

Это как раз то, что мне нужно. Совсем другое дело! laughing.gif Остается перенести на Си и добиться аналогичного результата! Спасибо! rolleyes.gif
Вообще, лучшие импортные приборы измеряют частоту основной гармоники как раз до 0,001 Гц, показометр так у них показывает.

Цитата(blackfin @ Nov 12 2015, 11:11) *
Вот этот код в MATLAB'e дает ошибку меньше чем 10-3 [Hz]:

Ошибка измерения:
[attachment=96658:FreqEst.jpg]


Круто! Этот код в седьмом работает и такую же картинку выдал (ошибку). Значит это готовая модель. rolleyes.gif

Сообщение отредактировал Pridnya - Nov 12 2015, 08:48
Go to the top of the page
 
+Quote Post
Alex11
сообщение Nov 12 2015, 17:41
Сообщение #176


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Цитата
Вот уже несколько пользователей писали про сигнал с подмешанным шумом в процентах от сигнала. Вы создаете такое сигнал, наверное, в матлабе, а вот как мне оценить уровень шума в моей системе? Я могу лишь на частоте дискретизации взять выборки АЦП. Вот что получится. Какой здесь уровень шума, кто-нибудь может ответить.

У меня программа на С, сигнал на входе 1, я подмешиваю просто RND, деленный на фиксированный коэффициент. В примерах выше на 20 и 10, соответственно. Это означает, что максимальное отклонение будет +-0.05 или +-0.025. Среднеквадратичное меньше, какое именно - считать надо.
Для шага 0.01 посчитаю вечером, кода домой доберусь. При отсутствии шума все будет хорошо, там нули до 6 знака после запятой. Какой шум Вам добавить, чтобы было похоже на Ваш реальный? И я еще попробую ввести Вашу дискретность на 1024 отсчета, посмотрим как отразится на результате. Сейчас-то синус на входе точный.
Go to the top of the page
 
+Quote Post
Pridnya
сообщение Nov 12 2015, 18:36
Сообщение #177


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 11-01-11
Из: Орел
Пользователь №: 62 159



Цитата(Alex11 @ Nov 12 2015, 20:41) *
У меня программа на С, сигнал на входе 1, я подмешиваю просто RND, деленный на фиксированный коэффициент. В примерах выше на 20 и 10, соответственно. Это означает, что максимальное отклонение будет +-0.05 или +-0.025. Среднеквадратичное меньше, какое именно - считать надо.
Для шага 0.01 посчитаю вечером, кода домой доберусь. При отсутствии шума все будет хорошо, там нули до 6 знака после запятой. Какой шум Вам добавить, чтобы было похоже на Ваш реальный? И я еще попробую ввести Вашу дискретность на 1024 отсчета, посмотрим как отразится на результате. Сейчас-то синус на входе точный.


Если получится, то попробуйте добавить шум +/- 2 разряда 16-ти разрядного АЦП (диапазон преобразования -32768...+32767), как на скриншоте сигнал Ic из этого поста. И не стесняйтесь показывать свои знания. rolleyes.gif

Проблем с добавлением моей дискретности у вас не должно возникнуть, просто берете 1024 точки через интервал 1/3200 секунды, или вообще абстрагируетесь от времени.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Nov 12 2015, 21:50
Сообщение #178


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Вот и результаты. Здесь амплитуда сигнала +-32768 и точность входного сигнала ограничена целым. Плюс шум со среднеквадратичным значением 1.7:
Прикрепленный файл  FreqN.txt ( 55.24 килобайт ) Кол-во скачиваний: 91

Здесь амплитуда +-1000 плюс тот же шум:
Прикрепленный файл  Freq1000N.txt ( 55.26 килобайт ) Кол-во скачиваний: 81

Даже при небольшой амплитуде точность расчетов превосходит требуемую на полтора порядка.
Цитата
И не стесняйтесь показывать свои знания.

В моем возрасте я уже абсолютно точно знаю, что умею хорошо, что плохо и в чем мне вломину разбираться.
Go to the top of the page
 
+Quote Post
Alex11
сообщение Nov 25 2015, 22:19
Сообщение #179


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



И что, дальше никому не интересно? Написали бы, чем дело кончилось.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jun 15 2017, 08:26
Сообщение #180


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Здравствуйте!
Вопрос очень похожий, задам тут же.

Изменились частоты и семплы, но цель такая же- как можно точнее считать частоту (точнее, чем бины FFT)
что не так как раньше:
1) Исходные данные поступают в 5 (или 10) раз чаще, чем нужно для FFT
2) нужно применить окно Ханна: 0.5-0.5*cos(2pi*n/N)

вопрос: при таком окне можно ли применить интерполяцию для уточнения частоты по вычисленному FFT? и какую?
До этого при использовании окна Гаусса применял квадратичную интерполяцию, и все отлично было.
Можно ли с Ханном ту же квадратичную интерполяцию применить?

И влияет ли метод децимации на качество результата финальной интерполяции в области максимального бина?
Что лучше применить для децимации с фактором 5 или 10? простое среднее, IIR, FIR ?


Дальше, подозреваю, у меня появится вопрос про "оптимальную децимацию массива итоговых спектров Фурье", но пока что первый уровень игры пройти нужно.
Go to the top of the page
 
+Quote Post

13 страниц V  « < 10 11 12 13 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th June 2025 - 17:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01553 секунд с 7
ELECTRONIX ©2004-2016