Страница 38 из 130
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 18:18:27
Alexeyslav
В чем же оно вредит? LC и RC - фильтры одного порядка, только в случае RC-фильтра на резисторе будут потери и соответственно передаточный коэффициент меньше. и чем больше резистор тем больше потерь. В LC-фильтре будут только активные потери на сопротивлении дросселя, а это считанные Омы...
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 18:22:11
oleg110592
как собираетесь 8кбит поток подавать на шим
частота семплирования 8КГц - 125мкс
Каждые 125мкс извлекаем данные из буфера, записываем в регистр шима. Можно брать данные прямо с ацп.
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 18:30:26
Alexeyslav
RC-фильтр первого порядка, если у него частота среза 4кГц то 8кГц им будет подавлено на 6Дб. Конечно бить по ушам уже не будет но это всего в 2..3 раз меньше - слышно будет еще как. Если городить нормальный фильтр, то это нужен минимум 3-го порядка... с высокой добротностью. Ну да, это возможно но слишком сложная схемотехника получится, уж лучше поднять частоту ШИМ на порядок, и аналоговая схемотехника сильно упростится.
Если мы поднимаем частоту на порядок, то тот же фильтр первого порядка даёт нам уже 20дБ ослабления побочной частоты(в 10 раз), не говоря уже о том что она оказывается вне слышимого диапазона. И динамик сам по себе становится еще одним фильтром первого порядка для такого ультразвука.
И если уж быть точным до конца, поток там не 8кБит, а 64Кбит == 8кБайт.
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 18:44:09
a5021
Не поясните, зачем такой поток для передачи голоса?
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 18:56:05
oleg110592
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 19:12:16
a5021
Для передачи 3000гц нужна полоса в 64к ? Котельников с Шенноном показывают вам кулаки и обзывают нехорошими словами.
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 19:16:20
oleg110592
обман - 3400Гц
Как следует из теоремы Котельникова, для того, чтобы однозначно восстановить исходный сигнал, частота дискретизации должна более чем в два раза превышать наибольшую частоту в спектре сигнала.
https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 0%B8%D0%B8
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 19:21:18
a5021
Сможете самостоятельно умножить 3400 на 2 ?
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 19:27:13
oleg110592
6800Гц, если "более чем в два раза", ближайшая стандартная дискретизация 8 000 Гц
Некоторые из используемых частот дискретизации звука:
8 000 Гц — телефон, достаточно для речи, кодек Nellymoser;
11 025 Гц;
12 000 Гц (на практике встречается редко);
16 000 Гц;
22 050 Гц — радио;
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 19:35:50
a5021
Совершенно верно. А 64к нафига тогда?
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 19:36:51
oleg110592
поток там не 8кБит, а 64Кбит == 8кБайт.
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 19:45:03
Alexeyslav
Тут с теоремой Котельникова небольшая засада... она вообще утверждает что МОЖНО ВОССТАНОВИТЬ но на практике вы видели чтобы приняв такой поток данных и что-то восстанавливали? Это надо ресемплер, математику и т.д. но чисто математически можно восстановить да, спору нет. На практике проще поднять частоту семплирования и использовать доступный частотный диапазон не полностью, тогда погрешность восстановления не будет бросаться в глаза.
Не стоит путать количество семплов в секунду и плотностью потока данных. Для простого случая, когда нет никакого сжатия 8 бит на 8К семплов дают поток в 64Кбит, в цифровой телефонии же те же 16 бит 8К семплов ужимают до потока 9.6Кбит.
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 19:57:43
a5021
oleg110592 писал(а):поток там не 8кБит, а 64Кбит == 8кБайт.
ДОжили. Биты с байтами путать начали? Для передачи речи без компрессии достаточно потока 8к. Килобит, если что.
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 20:07:35
oleg110592
a5021 писал(а):Для передачи речи без компрессии достаточно потока 8к. Килобит, если что.
дожили не мы а вы
8 килобит в сек это 1 кбайт в секунду, тогда частота сэмплирования получается около 1000Гц - ни в какие ворота
Для простого случая, когда нет никакого сжатия 8 бит на 8К семплов дают поток в 64Кбит
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 21:49:44
ugashet
Доброго времени уважаемые котоведы, начинаю работать с stm8s, помогите с кодом под IAR (желательно без SPL), по измерению длительности внешнего импульса, прерывание по захвату на TIM1 или TIM2, длительность импульса от 5 до 100 миллисекунд. Спасибо!
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 21:58:10
a5021
Re: Программирование STM8
Добавлено: Вс июн 07, 2015 23:48:58
Alexeyslav
Отлично, 8К частота дискретизации... а АЦП у тебя 1-битный? только с 1-битным АЦП можно получить 8Кбит/сек при 8К частоте.
Re: Программирование STM8
Добавлено: Пн июн 08, 2015 00:25:59
a5021
Вы АЦП с ШИМ-сигналом не путайте только. Один восьмибитный семпл, подающийся в регистр сравнения таймера на выходе канала ШИМ превращается ровно в один импульс. Один импульс это сколько бит?
Re: Программирование STM8
Добавлено: Пн июн 08, 2015 01:25:53
Kinder_Surprise
длительность импульса от 5 до 100 миллисекунд.
Для прерываний не имеет особого значения. Всё расширяется программными счётчиками.
Для TIM2 по входу TI2 будет примерно так:
настраиваем таймер
Код: Выделить всё
TIM2->PSCR = 0;
TIM2->CCMR1 |= TIM2_CCMR_CCxS_1; // 10: CC1 channel is configured as input, IC1 is mapped on TI2FP1
TIM2->CCMR2 |= TIM2_CCMR_CCxS_0; // 01: CC2 channel is configured as input, IC2 is mapped on TI2FP2
TIM2->CCER1 &= ~TIM2_CCER1_CC1P; // 0: Capture is done on a rising edge of TI2F
TIM2->CCER1 |= TIM2_CCER1_CC2P; // 1: Capture is done on a falling edge of TI2F
TIM2->CR1 |= TIM2_CR1_URS;
TIM2->CCER1 |= TIM2_CCER1_CC1E; // Capture enabled
TIM2->CCER1 |= TIM2_CCER1_CC2E; // Capture enabled
TIM2->IER |= TIM2_IER_CC1IE;
TIM2->IER |= TIM2_IER_CC2IE;
TIM2->IER |= TIM2_IER_UIE;
TIM2->CR1 |= TIM2_CR1_CEN; // Counter Enable
прерывания
Код: Выделить всё
INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
{
cnt_ref_ovf++;
TIM2->SR1 &= ~TIM2_SR1_UIF;
}
INTERRUPT_HANDLER(TIM2_CAP_COM_IRQHandler, 14)
{
if(TIM2->SR1 & TIM2_SR1_CC1IF)
{
cnt_ref_ovf_CC1 = cnt_ref_ovf;
TIM2->SR1 &= ~TIM2_SR1_CC1IF;
}
if(TIM2->SR1 & TIM2_SR1_CC2IF)
{
cnt_ref_ovf_CC2 = cnt_ref_ovf;
temp1 = (uint16_t)(TIM2->CCR1H) << 8;
temp1 |= (cnt_ref_ovf_CC1 * 65536) | TIM2->CCR1L;
temp2 = (uint16_t)(TIM2->CCR2H) << 8;
temp2 |= (cnt_ref_ovf_CC2 * 65536) | TIM2->CCR2L;
value = temp2 - temp1;
TIM2->EGR |= TIM2_EGR_UG; // Update Event
nop();
nop();
TIM2->SR1 = 0;
cnt_ref_ovf = 0;
cnt_ref_ovf_CC1 = 0;
cnt_ref_ovf_CC2 = 0;
}
}
value и будет длительностью импульса в тиках таймера.
Re: Программирование STM8
Добавлено: Пн июн 08, 2015 05:35:08
Alexeyslav
... который следует со скоростью 2048Кбит/сек. Иначе нужный звук не закодировать!
У вас какая-то каша в голове с этими битами и байтами.