Перейти к содержанию
    

andey_sidorov

Участник
  • Постов

    18
  • Зарегистрирован

  • Посещение

Весь контент andey_sidorov


  1. Спасибо. Это я сам себе злобный буратино. Если использовать test_data = test_data.'; то знак комплексной части не меняется, все согласно документации.
  2. Тестирую функцию преобразования Фурье. Может кто мне разъяснит, а то что-то запутался. в матлабе пишу: test_data(1:1024) = complex(0,0); test_data(4:7) = 1 - 1i; в окне просмотра переменных вижу следующую картинку, где у мнимой части положительный знак. на С код примерно следующий: typdef complex { float real; float imag; } complex test_data[1024] = {0}; for (int i = 3; i < 7; ++i) { test_data.real = 1; test_data.imag = -1; } Одинаковый ли знак у мнимой части комплексных данных?
  3. Добрый день. Пишите в личку, есть достаточный опыт написание ПО под STM.
  4. А какая ширина ДНА и дальность обзора, чтоб понимать какое реальное азимутальное разрешение.
  5. Локатор просто бокового обзора или Вы аппретуру синтезировать пытаетесь?
  6. Спасибо. Вот теперь я это осознал. В книги Дулевича "Теоретические основы радиолокации" детально расписано.
  7. Посмотрел. Но я и до этого догадывался, что необходимо использовать сложные сигнала. Видимо я каких-то очевидных вещей не понимаю.
  8. С этим согласен. Тогда я не понимаю в чем профит использования более длительного сложного сигнала. Хотя они и применяются для повышения дальности обнаружения с сохранением разрешающей способности. На практике, дальность и качество обнаружения выше для более длительного ЛЧМ сигнала с широкой полосой, чем для импульсного сигнала, что не вяжется с теоретическим расчетом.
  9. Это я понимаю. Но, при использовании сложных сигналов используется согласованная фильтрация, соответственно, зондирующий импульс сжимается. Во вложении прикрепил фото из книги Кондратенкова, Радиовидение. Там формула расчета дальности обнаружения приведена немного в другом виде. Минимальная чувствительность приемника разложена на составляющие. И в числителе, под корнем, находится средняя излучаемая мощность. Pср = Pимп*t_имп; В Бакулеве (и на википедии), через t_имп определяется полоса пропускания приемника dF = 1/t_имп. Утверждается, что это верно для импульсного сигнала, а для ЛЧМ сигнала полоса приемника будет определятся девиацией частоты ЛЧМ. И минимальная чувствительность приемника определяется как Prec_min = Nnoise*dF. При этом есть полоса приемника, физического устройства, которая шире, чем полоса как для импульсного сигнала, так и для ЛЧМ сигнала. Как все-таки правильно определить Prec_min, для импульсного сигнал и для ЛЧМ сигнала, и что делать с длительностью импульса зондирования?
  10. Добрый день. Возник вопрос по расчету дальности действия РЛС. Максимальная дальность действия определяется соотношением: Dmax=((Pimp*G^2*lambda^2*sigma)/((4pi)^3*Prec_min*Q*L))^(1/4), где: Pinmp - импульсная мощность передатчика; G - коэффициент усиления антенны; lambda - длина волны sigma - ЭПР цели Prec_min - чувствительность радиоприемного устройства Q - отношение сигнал шум L - результирующий коэффициент потерь Prec_min = Nnoise*dF; Nnoise - спектральная плотность шума dF - полоса пропускания приемника. Вот здесь вопрос. Для простого импульса полоса пропускания приемника составит dF = 1/t_imp; t_imp - длительность импульса зондирования; Для сложно сигнала (ЛЧМ) полоса определяется девиацией частоты (будет больше чем полоса пропускания приемника для импульсного сигнала). При этом длительность импульса зондирования существенно больше, чем для импульсного сигнала. Для обоих типов зондирующего сигнала при обработке используется согласованная фильтрация. Тогда, если считать дальность действия РЛС, то получается, что для импульсного сигнала она больше, чем для ЛЧМ сигнала, что для меня как-то непонятно. Ведь средняя излучаемая мощность будет больше для более длительного импульса зондирования.
  11. Добрый день. Есть опыт работы с STM32. Нахожусь в Зеленограде. andrey.sidorovyya гав-гав yandex.ru
  12. Eclipcse - IAR plugin

    ST-Link не поддерживается данным плагином.
  13. Отключение Prefetch Buffer не дало положительного результата.
  14. Столкнулся с похоже проблемой. Контроллер STM32F207. Если проект располагать по адресам 0x08040000 - 0x0807FFFF, то через раз при перезагрузке ломается передача кадров по ethernet. Т.е. кадры принимаются, обрабатываются, формируется ответ, и функция передачи завершается успешно. При этом снифером кадры не вижу. Если же располагать проект по "нормальным" адресам 0x08000000 - 0x0803FFFF (использую только 256кБйат), то все стартует идеально. VTOR установлен на нужный адрес. FLASH Prefetch Buffe включен (выключать пока не побывал). В чем может быть еще проблема?
  15. Есть большой опыт работы с TCP/IP (uIP, LwIP). В наличие плата с STM32F207. Пишите andrey.sidorovya (собака) yandex точка ру Территориально: ближайшее Подмосковье.
  16. Eclipcse - IAR plugin

    Идем в Window->Preferences->General->keys.
  17. Eclipcse - IAR plugin

    Можно настроить горячую клавишу для RESET. Может кто знает как настоить редиктирование переменных в шестнадцатеричном виде в окне Expressions?
  18. lwip memp_malloc

    Доброго времени суток. Есть проект под STM32F207. На нем запущен lwip. На текущий момент используется три исходящих соединения. Проблема в следующем: при некотором количестве раз установлений/закрытий соединения попадаю в HardFault_Handler из функции memp_malloc. В структуре memp_tab отображается некорректный адрес для выделения памяти под tcp_pcb. Что делаю для открытия/закрытия соединения и приема/передачи данных. Открытие соединения: test->test_pcb = tcp_new(); if(test_pcb != NULL){ err_t err; IP4_ADDR(&ipaddr_local, IP_ADDR0, IP_ADDR1, IP_ADDR2, IP_ADDR3); err = tcp_bind(test->test_pcb, &ipaddr_local, 0); if (err == ERR_OK){ // Callback функция в случае ошибки tcp_err(test->test_pcb, test_error); // Устанавлиается аргумент для передачи в Callback функции tcp_arg(test->test_pcb, (void*)test); // Собсбтвенно тут соеденяемся err = tcp_connect(test->test_pcb, &test->ipaddr_dest, test->port, test_connected); // Если все good, то возвращаемся из функции и ждем callback if(err == ERR_OK) return; } } Callback функция для установления соединения err_t test_connected(void *arg, struct tcp_pcb *newpcb, err_t err){ err_t ret_err; struct_test * test = (struct_test *)arg; tcp_num_reconn = 0; // Посльзовательский параметр tcp_arg(newpcb, arg); // Callback функция для получения данных tcp_recv(newpcb, test_recv); // Callback функция в случае ошибки tcp_err(newpcb, test_error); // Callback функция для события poll tcp_poll(newpcb, test_poll, 4); ret_err = ERR_OK; return ret_err; } Callback функция для получения данных err_t test_recv(void *arg, struct tcp_pcb *recv_pcb, struct pbuf *p, err_t err){ err_t ret_err; ret_err = ERR_OK; int ptr_recv_data = 0; unsigned char recv_data[1460]; //struct pbuf *q = p; struct_test * test = (struct_test *)arg; if(p != NULL){ struct pbuf *q = p; // Подтверждаем полученные данные tcp_recved(recv_pcb, p->tot_len); tcp_update_rcv_ann_wnd(recv_pcb); // Основная функция // Осуществляет разбор входного потока while (q != NULL){ memcpy(&recv_data[ptr_recv_data], q->payload, (int)q->len); ptr_recv_data += (int)q->len; q = q->next; } } else{ // Закрываем соединение test_close(test); } return ret_err; } Закрываю соединения так: tcp_close(test->test_pcb); При этом попадаю в событие tcp_error. В нем делаю следующее: tcp_arg(test->test_pcb, NULL); tcp_sent(test->test_pcb, NULL); tcp_recv(test->test_pcb, NULL); tcp_err(test->test_pcb, NULL); tcp_poll(test->test_pcb, NULL, 0); if(test->test_pcb != NULL){ memp_free(MEMP_TCP_PCB, test->test_pcb); test->test_pcb = NULL; } При корректном установлении соединения данные принимаются нормально. Собственно вопрос: правильно ли я устанавливаю/закрываю соединение? Версия lwip сначала была 1.40, теперь обновил до 1.41.
×
×
  • Создать...