![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_pattern.png)
![](https://electronix.ru/forum/uploads/set_resources_23/84c1e40ea0e759e3f1505eb1788ddf3c_default_photo.png)
GMavr
Участник-
Постов
18 -
Зарегистрирован
-
Посещение
Репутация
0 ОбычныйИнформация о GMavr
-
Звание
Участник
Контакты
-
ICQ
Array
Посетители профиля
1 219 просмотров профиля
-
Спасибо. Спасибо. Пока нет шума, полученный данным способом график АЧХ почти совпадает с тем, что должно быть в идеале. Пробовал также численное интегрирование. Результат чуть лучше, но не принципиально. А вот добавление даже небольшого шума заметно портит картину. fs = 10; N = 1024; tau = 10; t = 0:1/fs:(N-1)/fs; f = 0:fs/N:fs*(N-1)/N; y = 1-exp(-t/tau); % Реакция RC цепи на ступеньку (переходная функция) yn = y + (rand(size(t))-0.5)*0.01; % + шум % Комплексный коэффициент передачи, вычисленный по переходной функции K = fft(diff(y)); % Тоже + шум Kn = fft(diff(yn)); % Такой коэффициент передачи должен быть Kr = 1./(1+1i*2*pi*f*tau); plot(f(1:N/2), abs(K(1:N/2)), 'b',f(1:N/2), abs(Kn(1:N/2)), 'g', f(1:N/2), abs(Kr(1:N/2)), 'r'); legend('K', 'Kn', 'Kr'); Тут, наверно, ничего сделать нельзя. Придется ограничится максимальной частотой 1/20 от частоты дискретизации.
-
@Grizzly Спасибо за ответ и за ссылки. Но вопрос состоял немного не в этом. Есть массив значений переходной функции системы. Полученный экспериментально. Нужно по этим значениям оценить АЧХ системы. С экспериментальными данными ничего не выходит. Попробовал заполнить массив значениями переходной функции RC цепочки, для которой все хорошо известно. И тоже ничего не вышло. Можно, конечно, по известным входным и выходным данным построить фильтр (Виннеровское оценивание). И потом вычислить АЧХ этого фильтра. Но нет ли пути попроще? Да и результат такого подхода меня как-то не впечатлил, хотя этот способ более или менее рабочий. Вроде 1 коэффициент в числителе и 2 в знаменателе для цифрового аналога RC фильтра.
-
Можно подробнее? Формула из книжки и там именно Фурье. Лаплас вроде здесь не нужен. Так вроде в формуле K(w) = jwG(w) умножение на jw это учитывает? Нет?
-
Вычисление АЧХ по переходной функции. Возможно ли?
GMavr опубликовал тема в Алгоритмы ЦОС (DSP)
Вроде бы, теоретически, комплексный коэффициент передачи K(w) = jwG(w), где w - круговая частота, G(w) - преобразование Фурье от переходной функции. Так? Но вот рассмотрим в Matlab-е переходную функцию RC цепочки - y(t). tau=RC. fs = 10; N = 1024; tau = 10; t = 0:1/fs:(N-1)/fs; f = 0:fs/N:fs*(N-1)/N; y= 1-exp(-t/tau); Коэффициент передачи всем известен: Kr = 1./(1+1i*2*pi*f*tau); Как я ни пытался прикладывать ДПФ к массиву y, никак нужная зависимость не получается. Лучшая попытка: Y = fft(y); K=2i*pi*(0:N-1)/N.*Y+ y(N-1); Здесь предполагалось, что до прихода ступеньки на выходе 0, а последний элемент массива y(N-1) уже вышел на постоянное значение 1. В начале abs(K) и abs(Kr) практически одинаковые, но довольно быстро расходятся. Почему? Как правильно получить из y массив K с отсчетами комплексного коэффициента передачи? -
Да. Уверен что это ассемблер. Этот DSP - не отдельная микросхема. Это часть кодека (tlv320aicXXXX - там много таких). Документация на микросхему в целом есть. А вот на встроенный DSP - нет. Есть только некоторые готовые алгоритмы для него, которые по факту оказались не нужны. Для обработки данных используется Cortex M7. Но он уже не справляется. И к сожалению, нужны более сложные алгоритмы, чем генерация синуса. Идея - перебросить часть задач на DSP в кодеке. И не переделывать плату.
-
Есть микросхемка от Texas Instuments с DSP ядром внутри (точнее miniDSP). TI документацию на ядро давать не хочет. Есть желание задействовать DSP ядро в своих целях. Есть некоторое количество ассемблерных исходников. Но вот проблема - я впервые вижу подобный ассемблер. Вот к примеру генератор синуса: ;== Component Interface == ; .port ToneGenerator_1.Ch1_Out ToneGenerator_1_Ch_Out ; Data Declarations for output .data_miniDSP_D ToneGenerator_1_Ch_Out ; Data format 3.yy ; ;Coefficients Definitions .coeff_miniDSP_D ToneGenerator_1_Status =256 @5 ; .coeff_miniDSP_D ToneGenerator_1_alpha =0,8526401519775390625M1 @5+1 ; .coeff_miniDSP_D ToneGenerator_1_beta =-0,2612493038177490234375M1 @5+2 ; .coeff_miniDSP_D ToneGenerator_1_Amplitude =0,5M2 @5+3 ;not used but added to use same DLL as quad .coeff_miniDSP_D ToneGenerator_1_Minus_stopped =-25344 ;Data Definitions .data_miniDSP_D ToneGenerator_1_Out(n) .data_miniDSP_D ToneGenerator_1_Out(n-1) .data_miniDSP_D ToneGenerator_1_Out(n-2) .data_miniDSP_D ToneGenerator_1_Status(n) .data_miniDSP_D ToneGenerator_1_Status(n-1) ; ; .codeblock ToneGenerator_1_Block target=miniDSP_D, cycles=15, stream=Primary, component=ToneGenerator_1 acc_init ToneGenerator_1_Status data_one compare ToneGenerator_1_Minus_stopped data_one compare MinusOne_M1 ToneGenerator_1_Status(n-1) acc_init ToneGenerator_1_beta data_one write 0 ToneGenerator_1_Status(n) jump jmp_eq ToneGenerator_1_Stopped ;current status is start acc_init Zero data_one jump jmp_eq ToneGenerator_1_RunwoInit ;Do init here write 0 ToneGenerator_1_Out(n-2) acc_init MinusOne_M1 ToneGenerator_1_Out(n-2) write 0 ToneGenerator_1_Out(n-1) ;acc_2 ToneGenerator_1_alpha ToneGenerator_1_Out(n-1) // not required because Out(n-1) is zero jump jmp ToneGenerator_1_Run ToneGenerator_1_RunwoInit: ;nop balance acc_init MinusOne_M1 ToneGenerator_1_Out(n-2) acc_2 ToneGenerator_1_alpha ToneGenerator_1_Out(n-1) nop nop ToneGenerator_1_Run: jump jmp ToneGenerator_1_Done; ToneGenerator_1_Stopped: acc_init Zero data_one nop ;nop balance nop nop nop nop nop ToneGenerator_1_Done: write 0 ToneGenerator_1_Out(n) write 0 ToneGenerator_1_Ch_Out .endcodeblock Формулы, по которым он работает: Out (n) = 2*ToneGenerator_1_alpha * Out (n-1) - Out (n-2) Инициализация: Out (-1) = 0 Out (-2) = ToneGenerator_1_beta Кто-нибудь сталкивался с подобным ассемблером? Может быть есть какая-то документация на DSP процессор, у которого похожий ассемблер? Если кому интересно acc_init a b помещает в аккумулятор a*b, т.е. Акк = a*b acc a b -> Акк = Акк + a*b acc_2 a b -> Акк = Акк + 2*a*b Есть еще команды Init_abs, Writef, Writecoeff, mult, Acc_abs, AC_R_AC, AC_F_AC, AC_RW_AC, ACC_INIT_DATAPAD, ACC_SUB И так далее. Полный список можно вытащить из компилятора. Но вот что они делают? И зачем так много NOP-ов в исходниках?
-
Я разобрался сам. Лучше всего помогла установка диода D6 типа MBR0540 и резистора Rg номиналом 330 Ом (см. схему из первого поста). После этой доработки наводки в УКВ диапазоне практически исчезли. Как я понял, проблема была в следующем. В момент включении транзистора Q1 через диод D5 протекает ток в прямом направлении. Быстро выключиться диод не может (нужно время для обратного восстановления). Получается цепь с низким сопротивлением: Q1, D5, транзистор внутри микросхемы, резисторы Rs1 и Rs2. На эту цепь подано значительное напряжение (сетевое). Возникает короткий импульс тока (видимо, более 1 ампера). Этот импульс заставляет "звенеть" какую-то цепь (частота "звона" ~150 МГц). Соответственно, резистор Rg замедляет включение транзистора Q1, что приводит к сокращению амплитуды этого выброса. Если не поставить диод D5, транзистор Q1 будет медленно выключаться, что создает риск пробоя транзистора внутри микросхемы (он попытается разорвать цепь с напряжением в несколько сотен Вольт, а предельная величина напряжения сток-исток для него всего 20 Вольт) . На КВ светильник все равно дает заметные помехи. Поставил Ld1 3.3 мГн и Cx1 0.047 мкФ. Стало чуть получше. Но на КВ видимо шумят все. Экспериментировал дорогой лампочкой Gauss - шум конечно меньше, но не намного. В общем, своей цели я добился. Убрал помехи на УКВ.
-
Каюсь. Забыл сказать. Действительно, левее диодного моста по схеме из даташита в реальном светильнике есть только предохранитель в виде резистора. В общем, эксперименты я начал с синфазного дросселя, который практически ничего не изменил. 4 витка сетевого провода на кольце R16x9.6x6.3 феррит N87. Кольцо маленькое, но больше всунуть в светильник трудно. (Приемник, конечно, плохой прибор. Шумит. А также или как-то иначе, не поймешь) Спасибо. Этого документа не видел. Не додумался, что светильник может и с этой стороны что-то излучать. Буду экспериментировать. Меня вот что беспокоит. Как я понял из осциллограмм, при включении ключевого транзистора возникает колебательный переходной процесс с довольно коротким периодом. Может лучше подавить его? А то места в светильнике мало и поставить большие фильтры во все места не получится (хотя что-то поставить придется). Зачем вообще в даташите нарисован резистор Rg? А диод D6? Из каких соображений их выбрать?
-
В каком смысле неэкранированный? Фото источника питания светодиодов в светильнике прилагаю. Этот дроссель экранированный? В приемнике, работающем от сети, помех наводится больше. Но и с приемником, работающем от батарей помех не намного меньше. Список отличий реальной схемы от datasheet-а: 1) вместо элементов CE1, CE2, D2, D3, D4 стоит просто фильтрующий электролит 10 мкФ/400В; 2) элементов Rg, D6 нет (затвор Q1 подключен напрямую к +12В); 3) между истоком и стоком Q1 установлен конденсатор (вероятно 10нФ/1КВ); 4) C5 и Rt1 отсутствуют (хотя место под них на плате предусмотрено); 5) параллельно светодиодам установлен диод в обратном (по сравнению со светодиодами) включении.
-
Купил LED светильник ESTARES DLS-8 (8 ватт). Работает нормально, но при включенном светильнике стоящий недалеко УКВ приемник начинает сильно шипеть. Хочется это как-то побороть. В приложении - 3 осциллограммы. первая: 1-й канал - сигнал с 10 витков провода, намотанных на ферритовом кольце, через которое продет один из проводов питания светильника (типа токовый трансформатор); 2-й канал - виток, состоящий из провода "земли" щупа осциллографа, замкнутого на сам щуп (рамка диаметром ~5см) расположенный рядом со светильником. вторая - 1-й канал крупно. третья - 2-й канал крупно. Схема светильника основана на китайской микросхеме bp2808 - http://www.satistronics.com/myfiles/file/led/BP2808.pdf Схема из datasheet-а -последняя картинка. Схема драйвера светильника более или менее совпадает. Вместо хитрой конструкции CE1, CE2, D2, D3, D4 стоит просто фильтрующий электролит 10 мкФ/400В. Цепи Rg, D6 нет. Параллельно светодиодам установлен диод в обратном (по сравнению со светодиодами) включении. В общем, подозрение, что ключ Q1 открывается как-то не так из-за его управления по истоку. Но что конкретно происходит - не понимаю. Видимо цепь Rg, D6 должна как-то помочь. На в имеющемся драйвере ее нет, а в datasheet-е не указаны ни рекомендуемые номиналы, ни формулы для ее расчета. Можете что-то посоветовать?
-
Все оказалось просто. Период таймерного прерывания был кратен периоду интересующего меня прерывания. Причем эти периоды задавались разными кварцами. Соответственно, с некоторой периодичностью, они ничинали накладываться. Значит, обработчик таймера держит прерывания запрещенными в течении 180мкс (для моей конфигурации).
-
Это все мне известно. Но правилом хорошего тона является запрет прерываний на короткий промежуток времени. А 180 мкс, мне кажется, уже много. Кроме того удивляет хорошая периодичность и редкость этого явления - раз в 200 секунд (+/- несколько секунд). Чего это Linux делает с таким периодом?
-
Имеется плата с ADM5120. На ней работает Linux (OpenWrt KAMIKAZE). Ядро 2.6.23.14. Измеряю время с момента выставления сигнала запроса на прерывание до входа в обработчик прерывания. Обычно оно составляет десятки микросекунд (20...30мкс). Однако, периодически - раз в ~200 секунд, случаются выбросы до 180 мкс. Причем несколько прерываний обрабатываются с большой задержкой, а далее опять задержка маленькая. Такое ощущение, что есть некий процесс, запрещающий прерывания на значительное время, активизирующийся раз в 200 секунд. Что это может быть? Можно ли его (процесс) выключить? Очень хочется, чтобы обработчик прерывания делал свое дело через равные промежутки времени.
-
По слухам, зрительные и слуховые ощущения человека имеют логарифмическую зависимость. Соответственно, на каждом шаге нужно менять среднюю мощность, выделяемую на светодиоде в какое-то число раз.
-
EPM3032 и JTAG
GMavr ответил GMavr тема в Работаем с ПЛИС, области применения, выбор
cms: Я пока только сомневаюсь, но несовсем ясно, как же функционирует пин двойного назначения. Обман программатора не имеет смысла т.к. при этом требуется нормальный чип. И что с ним делать после прошивки? В помойку?