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

zi4rox

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

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

  • Посещение

Репутация

0 Обычный

Информация о zi4rox

  • Звание
    Участник
    Участник

Посетители профиля

2 080 просмотров профиля
  1. Полагается, что просто имеется антенная решетка, обладающая сильными отличиями фаз в отдельных элементах решетки (сами они статичны во времени). Принимаем, что сама решетка представляет собой прямую линию и распределение фаз вдоль этой линии может быть таким, как показано на рис: * считаем, что по оси абсцисс отложены номер элемента антенны Если бы не было этих фазовых изменений, на спектре были бы прекрасно видны все частоты, однако из за этих фазовых ошибок - спектр не несет особо никакой полезной для нас информации. Вот и нужно отфильтровать эти самые фазовые изменения
  2. Предполагается, что это случайные фазовые сдвиги. Генерируется это дело так: a = rnorm(); b = rnorm(); // нормальные распределения VK = a + ib; Далее VK прогоняется через фильтр. От VK остается: Затем берется XC = ОДПФ(P), и мнимая часть от всего этого XC = Im(XC) и получается: Да, так и есть. Шум генериться как: a = rnorm(); b = rnorm(); // нормальные распределения noise = a + ib;
  3. Имеется антенная решетка, на которую падает сумма 3 (j=3) плоских волн wk[ aj fj - амплитуда/частота волн; L = 1024; k = 0 .. L-1 ] Все это дело принимает антенная решетка (sk - принятый сигнал) - с аддитивным нормальным шумом noise все понятно и неприятностей он не доставляет, а вот как отфильтровать фазовые помехи XCk ? Изменяется фаза так: Пожалуйста, прошу - подскажите метод фильтрации этих самых фазовых искажений, куда смотреть и что искать?
  4. Всё понял, нашел ещё в Гоноровском целая глава с математикой есть. Спасибо за быстрые ответы!
  5. Подскажите толковой литературы, с хорошим описанием и математикой по кепстральному анализу и задачам решаемым с его помощью. Заранее благодарен!
  6. Задача (общее): Устройство для очистки речевого сигнала от шума (адаптивная фильтрация) Необходима схемотехническая реализация и код для тмс + по возможности реализация в железе За более подробной информацией в личку на форуме, или же на @почту: [email protected] * Если есть возможность, укажите сразу приблизительные сроки/стоимость работ
  7. Начальный курс понял - закажу процы, проштудирую дш, и буду уже ручками пробывать. Тогда уже конкретные вопросы будут. спасибо
  8. Есть задача и желание разобраться и освоить работу c TMS320. Первый заход в поисковики и форумы - выдал примерную картину для меня: "обсуждения каких-то конкретных проблем есть, решения есть - но такое ощущение что все как бы сразу уже умеют работать с ними, а начального уровня нигде не увидел". Для освоения данных процессоров есть простая задача: сделать на базе тмс320 цифровой фильтр н-ого порядка. Первый вопрос который сразу же задал себе - чем и как программировать, среда разработки и т.п. Вообще куча вопросов (потому что опыта работы с ними нет вообще, есть большой опыт проектирования девайсов на авр - там то инфы было завались). Надеюсь что поможете добрым словом, и данный тред будет полезен таким же новичкам 1. Среда разработки Ну тут вроде все прозрачно, почти все упоминания сводятся к Code Composer Studio. Вроде все хорошо тут и на си кодится ) 2. Программатор Вот здесь у меня оооочень большие вопросы и сомнения. Схем программаторов как таковых не нашел вообще нигде, на форумах у всех есть тестовые-платы которые стоят очень много и заводские программаторы-эмуляторы, которые стоят ещё дороже. Единственное что нашел так это Olimex TMS320-JTAG программатор-эмулятор + на форуме по нему отзывы тоже разношерстные. В общем я очень сильно задаюсь вопросом - как прошивать-то?. Или я действительно оплошался, наивно полагая что заказав сэмпл проца с техаса и спаяв/купив дешевый программатор можно начать работать? 3. Какой проц взять? Из вашего личного опыта - с каким семейством проще начать работу и изучение? Пока склоняюсь, что надо заказывать TMS320FC28xx - исходя только из тех соображений, что именно их можно прошивать бюджетным программатором от Olimeх. 4. Примеры, схемы И ещё один нюанс который не очень нравиться - почти нет схем, примеров проектов на данных процах. Все юзают отладочные платы, которые мне не под силу достать. Хоть парочку бы простеньких реализаций, посмотреть обвязку, как программить и подключать - хоть что-то. В даташите тоже ооочень скудно. Так что вот, пока смотрю как на большой черный ящик, у которого приоткрыл крышку - но пока все равно ничего не видно. Но желание осилить это дело есть - прошу добрых людей направить в нужную сторону и помочь добрым постом )
  9. Всё, вроде разобрался - нужно быть более аккуратным при подборе коэффициентов. Сигнал действительно можно восстановить с любой точностью, для гармонического сигнала - ещё можно и форму подсгладить. * на рисунку 250 точек на период - это число может быть теоретически любым Всем спасибо кто помогал!
  10. Пытаюсь сделать интерполяцию синком - не получается немного ... Вот формула, для восстановления сигнала: x(t) - исходный сигнал Fmax - частота сигнала, пусть Fmax = 1000 Гц dt = 1/2Fmax (отсчеты идут через этот интервал времени) dt = 1/2*1000 = 0.0005 При это допустим что ацп выдает нам 13 отсчетов сигнала на период. Сам же период T = 1/f = 0.001. Вот на интервале времени в 1 период я и хочу восстановить сигнал. Тогда суммирование будет идти от n=0 до n=2Fmax*T=2000*0.001=2 // Всего 2 отсчета будет использоваться, а не все 13? // s(n*dt) - это как раз сами отсчеты которые у меня есть. // Это массив с отсчетами, которые у меня есть за 1 период data_01[0]:= 1.10929; data_01[1]:= 1.02396; data_01[2]:= 0.85501; data_01[3]:= 0.54537; data_01[4]:= 0.31164; data_01[5]:= 0.08533; data_01[6]:= 0.02226; data_01[7]:= 0.09275; data_01[8]:= 0.26341; data_01[9]:= 0.56763; data_01[10]:= 0.81249; data_01[11]:= 1.0388; data_01[12]:= 1.09445; ... //константы, что обговорили выше: f_max:=1000; dt:= 0.0005; x:= 0.0004; // вычисление значения восстановленного сигнала x(t) в точке x for n:=0 to 2 do begin buff:= data_01[n]*sin(2*3.14*f_max*(x-n*dt))/(2*3.14*f_max*(x-n*dt)); result:= result+buff; end; Я получаю 1,0849 - довольно близкий отсчет. Пробую строить сам график, беру 100 точек интерполяции с шагом в 0.0004 for j:=1 to 100 do begin result:=0; // обнуляю результат вычисления для каждой новой точки dx:= j*0.0004; // шаг восстановления: 0.0004, 0.0008, 0.0016 и.т.д. for n:=0 to 2 do begin buff:= data_01[n]*sin(2*3.14*f_max*(dx-n*dt))/(2*3.14*f_max*(dx-n*dt)); result:= result+buff; end; // И добавляю вычесленную точку на график (x,y) Series2.AddXY(dx,result,'',clRed); В результате получаю вот такую картинку: синк он мне рисует ... но это не восстановленный сигнал. Как я понял - тут должна быть сумма синков - и тогда образуется нужное. Или я ошибаюсь? Помогите пожалуйста разобраться, а то голова кругом уже
  11. Измерять нужно амплитуду. Про цифровую интерполяцию интересно! Пойду искать информацию по этой теме, спасибо за идею. * Если кто нибудь знает хорошую ссылку на алгоритм/или мат. описание интерполяции sinc(x) прошу поделится
  12. Да, сейчас тоже пересчитал - получается что ацп правильно работает - и там получается 10 точек на период. Буду пытаться увеличить частоту дискретизации каким то образом. Непонятно пока - сколько этих точек на период в среднем необходимо для более менее верной оцифровки? Или это определяется исходя из личных условий задачи? Вы как считаете?
  13. ATMega16 управляет внешним АЦП TLV1570 по встроенному SPI и пытаемся оцифровать гармонический сигнал с частотами до 20кгц. Немного о TLV1570 - 8ми канальный 10ти разрядный последовательный АЦП 1.25MSPS. Входные напряжения: 0 .. 5В По теореме Котельникова, частота дискретизации: Fдиcкр > 2Fmax В моём случае 2Fmax = 40кГц, а частота дискретизации АЦП по даташиту считается так: Fдискр = 1/16*Fsclk (на каждую выборку нужно передать 2 байта) (в обвязке к ATMega стоит резонатор на 16МГц, при настройках SPI получил: Fsclk = 4Mhz ) => Fдиск = 1\16*4Mhz = 250кГц Т.е. мы укладываемся с головой. Частота дискретизации 250 кГц, а сигнал 20кГц Код прошивки такой: while (1) { for (i=0;i<100;i++) { ADC_CS = 0; adc_result_hi[i] = spi(0x00); adc_result_low[i] = spi(0x60); ADC_CS = 1; } for (i=0;i<100;i++){ putchar(adc_result_hi[i]); putchar(adc_result_low[i]); } } * я сначала собираю отсчеты по 100 точек и сохраняю их в буффер, а затем отправляю по UART на COM порт в ПК. (так быстрее производительность, т.к. отправка по уарту занимает значительное время) Просимулировал этот код в VMLAB, получил следующие тайминги: С учетом всех погрешностей на запись в переменные и т.п - получил, что снятие одного отсчета займет 10мкс - т.е. частота дискретизации 100кГц - все равно укладываемся. Итак, на практике вот что я получаю: Оцифровка сигнала частотой 10кГц амплитуда около 1В: Здесь около 10ти точек на период. Качество оцифровки неудовлетворительное. Сразу же в настройках SPI выставил галочку SCLK x2 Rate - т.е. удвоили частоту тактирующего импульса (я предполагал что и качество оцифровки увеличится в 2 раза) Вот как получилось с этой настройкой: Оцифровка сигнала частотой 10кГц амплитуда около 1В (SPI SCLK x2 rate): Получилось 13 точек на период - совсем небольшой прирост =( Мучил код, пробывал и так и сяк, симулировал. Вот как получается, если после получения отсчета от АЦП - сразу выплевывать его на UART: while (1) { ADC_CS = 0; putchar(spi(0x00)); putchar(spi(0x60)); ADC_CS = 1; } Совсем не так как хотелось бы. * Сигнал с меньшей частотой оцифровывает прелестно. Вот пример оцифровки синуса с частотой 1кГц: Здесь меня всё устраивает. Около 90 точек на период. Качество отличное Прошу помощи - оцифровкой занимаюсь в первый раз, как быть, вроде бы всё правильно - а на деле выходит совсем не то. Возможно код можно ещё как то более оптимизировать, или ещё где ошибку сделал? Прошу совета.
  14. Посоветуйте пожалуйста, какой макс взять для измерения переменного тока, не более 1 ампера, частотой до 200кгц. На сайте ищу у них - но пока не особо уверен что выбрать
  15. Даташит на AD9832 почитал, но там как то скользко, в общем вопрос простой: Возможно ли изменять амплитуду выходного сигнала с ДДС средствами встроенного ЦАПа?
×
×
  • Создать...