thermit 1 11 ноября, 2015 Опубликовано 11 ноября, 2015 · Жалоба Код сишный? Я бы хотел проверить его в работе (программно и/или в железе, лучше в железе). Варианта два: в виде EXE-шника или в виде *.lib библиотеки для STM32F407, это если хотите сохранить код закрытым. Это когда Баскакова обратно склеите. В этом топике информации для реализации более, чем достаточно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 5 11 ноября, 2015 Опубликовано 11 ноября, 2015 · Жалоба Что-то Вы залезли в такие дебри математики... Вот результаты моделирования. 3200 Гц дискретизации 1024 точки Фурье, окно Гаусса. При отсутствии шума во входном сигнале точность лучше 6 знаков после запятой. Далее привожу файлы результатов при 5% белого шума и 10%. Freq5p.txt Freq10p.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pridnya 0 12 ноября, 2015 Опубликовано 12 ноября, 2015 (изменено) · Жалоба Это когда Баскакова обратно склеите. В этом топике информации для реализации более, чем достаточно. Странное у вас условие. Если есть знания, то их нужно реализовывать. На память приходит товарищ Перельман и доказательство гипотезы Пуанкаре. Странные люди, эти математики (с хорошим знанием математики, если оно есть, если это не пользователи какого-либо матпакета), нет бы все на благо Родины, а они "я знаю, но не скажу...мне ничего не нужно, я особенный, а вы балбесы еще лет 30 нничего сделать не сможете...". :rolleyes:. Григорий, если это вы, то так нельзя, не допустимо и не позволительно, потомки вам этого не простят. Что-то Вы залезли в такие дебри математики... Вот результаты моделирования. 3200 Гц дискретизации 1024 точки Фурье, окно Гаусса. При отсутствии шума во входном сигнале точность лучше 6 знаков после запятой. Далее привожу файлы результатов при 5% белого шума и 10%. Freq5p.txt Freq10p.txt ] Результат хороший. Каким методом считали? Эрик Якобсен, или по Гауссу но как-то по своему...? У вас в обоих файлах входной сигнал задается через каждые 0,10 Гц, а хотелось бы увидеть через 0,01 Гц. Требуется же разрешение показометра 0,01 Гц и ошибку для такой сетки частот. Если *.txt файл будет большой, то открою с помощью notepad++. Вот уже несколько пользователей писали про сигнал с подмешанным шумом в процентах от сигнала. Вы создаете такое сигнал, наверное, в матлабе, а вот как мне оценить уровень шума в моей системе? Я могу лишь на частоте дискретизации взять выборки АЦП. Вот что получится. Какой здесь уровень шума, кто-нибудь может ответить. Все сигналы отображаются в отсчетах АЦП. При отсутствии сигнала, например, для 16-ти разрядного АЦП (-32768...32767) в канале Ic амплитудное значение с выхода АЦП равно от -4 до 1 (это шум системы). Сколько процентов равен шум в моем случае? Какое отношение сигнал/шум возможно при амплитуде сигнала 1000 разрядов АЦП и этом шуме? Изменено 12 ноября, 2015 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 12 ноября, 2015 Опубликовано 12 ноября, 2015 · Жалоба Мне кажется, что тема довольно неплохо была раскрыта вот тут: http://electronix.ru/forum/index.php?showtopic=84446 По крайней мере, можно использовать как стартовую точку. Ну и моделирование. Матлаб- "наше все". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pridnya 0 12 ноября, 2015 Опубликовано 12 ноября, 2015 (изменено) · Жалоба Мне кажется, что тема довольно неплохо была раскрыта вот тут: http://electronix.ru/forum/index.php?showtopic=84446 По крайней мере, можно использовать как стартовую точку. Ну и моделирование. Матлаб- "наше все". Тогда, учитывая, что вы "там" увидели раскрытие темы и пока не забыли, подсобите простым крестьянам, где там "ключ" и как им воспользоваться? И еще интересует, где начинается "стартовая точка", т.е. откуда начинать. На одном языке разговариваем, а дело сделать не можем. Кто-то утверждает, что уже все сделал, но в матлабе. Ну не генерит же матлаб Си-шный код для Cortex M4F. А без матлаба мы никак, во какая зависимость. :rolleyes: PS: Так мы до профтехучилищ дойдем: специальность "оператор ЭВМ", специализация "пользователь матлаб". Изменено 12 ноября, 2015 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 12 ноября, 2015 Опубликовано 12 ноября, 2015 · Жалоба Ну не генерит же матлаб Си-шный код для Cortex M4F. А без матлаба мы никак, во какая зависимость. Почему это не генерирует? Еще как. И не один год уже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 12 ноября, 2015 Опубликовано 12 ноября, 2015 · Жалоба Тогда, учитывая, что вы "там" увидели раскрытие темы и пока не забыли, подсобите простым крестьянам, где там "ключ" и как им воспользоваться? И еще интересует, где начинается "стартовая точка", т.е. откуда начинать. На одном языке разговариваем, а дело сделать не можем. Кто-то утверждает, что уже все сделал, но в матлабе. Ну не генерит же матлаб Си-шный код для Cortex M4F. А без матлаба мы никак, во какая зависимость. :rolleyes: PS: Так мы до профтехучилищ дойдем: специальность "оператор ЭВМ", специализация "пользователь матлаб". Ну, мне "там" помогли. В процессе "раскрытия" я освоил Матлаб, изучил его язык, сделал матмодель, проверил ее на реальных данных (залитых в компьютер с помощью того же Матлаба), соорудил си-программу (FFT использовал готовый, но без закрытых либ- все на чистом стандартном си), протестировал в С++Билдере, перевел на мое тогдашнее железо (PIC32), проверил в симуляторе на подсунутых известных данных, проверил в отладчике от генератора, проверил от реального датчика. Уф! :) Шаг за шагом. Коротко по методу: FFT (у меня-4096 точек), окно(у меня-Гаусс), интерполяция (у меня-квадратичная интерполяция по трём точкам). Но чудес не бывает, нужно хоть немного понимать что делаете и что от чего и как зависит, иначе результат случаен. А для этого нужно немного теорию почитать и много моделировать (в матлабе). А кортекс у Вас или мипс или еще что- это безразлично, ничего специализированного в общем случае и не нужно для решения задачи (у меня, например, чистый Си на выходе- без проблем таскал внутри Майкрочипов от pic18 до pic32). Вот когда получилось достигнуть нужных параметров по точности и разрешению- тогда можно и про оптимизацию подумать для ускорения, с привязкой к конкретному ядру и предскомпилированным чужим библиотекам. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 23 12 ноября, 2015 Опубликовано 12 ноября, 2015 · Жалоба Кто-то утверждает, что уже все сделал, но в матлабе. Вы тут уже утомили всех своими претензиями.. Вот этот код в 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]'); Ошибка измерения: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 12 ноября, 2015 Опубликовано 12 ноября, 2015 · Жалоба Вот этот код в MATLAB'e дает ошибку меньше чем 10-3: ..... Эх, а я к этому результату медленно полз..... Что интересно- когда дополз, то нашел в интернете кучу практически готовых ответов на мой вопрос. Но пока не понимал что искать, ответ найти не мог :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pridnya 0 12 ноября, 2015 Опубликовано 12 ноября, 2015 (изменено) · Жалоба Ну, мне "там" помогли... Спасибо! Вы тут уже утомили всех своими претензиями.. Вот этот код в MATLAB'e дает ошибку меньше чем 10-3: Какие могут быть претензии, это от беспомощности. :crying: А теперь по делу: из вашего кода мне понятно (я вообще этого языка не знаю, придется, наверное, учить), что вы в цикле: создаете сигнал с нужными мне параметрами, умножаете выборку на окно Гаусса, вычисляете БПФ, находите центр и два соседних бина, по формуле считаете частоту, считаете ошибку. Это как раз то, что мне нужно. Совсем другое дело! :laughing: Остается перенести на Си и добиться аналогичного результата! Спасибо! :rolleyes: Вообще, лучшие импортные приборы измеряют частоту основной гармоники как раз до 0,001 Гц, показометр так у них показывает. Вот этот код в MATLAB'e дает ошибку меньше чем 10-3 [Hz]: Ошибка измерения: Круто! Этот код в седьмом работает и такую же картинку выдал (ошибку). Значит это готовая модель. :rolleyes: Изменено 12 ноября, 2015 пользователем Pridnya Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 5 12 ноября, 2015 Опубликовано 12 ноября, 2015 · Жалоба Вот уже несколько пользователей писали про сигнал с подмешанным шумом в процентах от сигнала. Вы создаете такое сигнал, наверное, в матлабе, а вот как мне оценить уровень шума в моей системе? Я могу лишь на частоте дискретизации взять выборки АЦП. Вот что получится. Какой здесь уровень шума, кто-нибудь может ответить. У меня программа на С, сигнал на входе 1, я подмешиваю просто RND, деленный на фиксированный коэффициент. В примерах выше на 20 и 10, соответственно. Это означает, что максимальное отклонение будет +-0.05 или +-0.025. Среднеквадратичное меньше, какое именно - считать надо. Для шага 0.01 посчитаю вечером, кода домой доберусь. При отсутствии шума все будет хорошо, там нули до 6 знака после запятой. Какой шум Вам добавить, чтобы было похоже на Ваш реальный? И я еще попробую ввести Вашу дискретность на 1024 отсчета, посмотрим как отразится на результате. Сейчас-то синус на входе точный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pridnya 0 12 ноября, 2015 Опубликовано 12 ноября, 2015 · Жалоба У меня программа на С, сигнал на входе 1, я подмешиваю просто RND, деленный на фиксированный коэффициент. В примерах выше на 20 и 10, соответственно. Это означает, что максимальное отклонение будет +-0.05 или +-0.025. Среднеквадратичное меньше, какое именно - считать надо. Для шага 0.01 посчитаю вечером, кода домой доберусь. При отсутствии шума все будет хорошо, там нули до 6 знака после запятой. Какой шум Вам добавить, чтобы было похоже на Ваш реальный? И я еще попробую ввести Вашу дискретность на 1024 отсчета, посмотрим как отразится на результате. Сейчас-то синус на входе точный. Если получится, то попробуйте добавить шум +/- 2 разряда 16-ти разрядного АЦП (диапазон преобразования -32768...+32767), как на скриншоте сигнал Ic из этого поста. И не стесняйтесь показывать свои знания. :rolleyes: Проблем с добавлением моей дискретности у вас не должно возникнуть, просто берете 1024 точки через интервал 1/3200 секунды, или вообще абстрагируетесь от времени. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 5 12 ноября, 2015 Опубликовано 12 ноября, 2015 · Жалоба Вот и результаты. Здесь амплитуда сигнала +-32768 и точность входного сигнала ограничена целым. Плюс шум со среднеквадратичным значением 1.7: FreqN.txt Здесь амплитуда +-1000 плюс тот же шум: Freq1000N.txt Даже при небольшой амплитуде точность расчетов превосходит требуемую на полтора порядка. И не стесняйтесь показывать свои знания. В моем возрасте я уже абсолютно точно знаю, что умею хорошо, что плохо и в чем мне вломину разбираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 5 25 ноября, 2015 Опубликовано 25 ноября, 2015 · Жалоба И что, дальше никому не интересно? Написали бы, чем дело кончилось. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 15 июня, 2017 Опубликовано 15 июня, 2017 · Жалоба Здравствуйте! Вопрос очень похожий, задам тут же. Изменились частоты и семплы, но цель такая же- как можно точнее считать частоту (точнее, чем бины FFT) что не так как раньше: 1) Исходные данные поступают в 5 (или 10) раз чаще, чем нужно для FFT 2) нужно применить окно Ханна: 0.5-0.5*cos(2pi*n/N) вопрос: при таком окне можно ли применить интерполяцию для уточнения частоты по вычисленному FFT? и какую? До этого при использовании окна Гаусса применял квадратичную интерполяцию, и все отлично было. Можно ли с Ханном ту же квадратичную интерполяцию применить? И влияет ли метод децимации на качество результата финальной интерполяции в области максимального бина? Что лучше применить для децимации с фактором 5 или 10? простое среднее, IIR, FIR ? Дальше, подозреваю, у меня появится вопрос про "оптимальную децимацию массива итоговых спектров Фурье", но пока что первый уровень игры пройти нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться