Страница 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
исходя из диапазона частот голоса
https://ru.wikipedia.org/wiki/%D0%A7%D0 ... 1%81%D0%B0

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 19:12:16
a5021
Для передачи 3000гц нужна полоса в 64к ? Котельников с Шенноном показывают вам кулаки и обзывают нехорошими словами.

Re: Программирование STM8

Добавлено: Вс июн 07, 2015 19:16:20
oleg110592
обман - 3400Гц :shock:
Как следует из теоремы Котельникова, для того, чтобы однозначно восстановить исходный сигнал, частота дискретизации должна более чем в два раза превышать наибольшую частоту в спектре сигнала.
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)
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Кбит/сек. Иначе нужный звук не закодировать!

У вас какая-то каша в голове с этими битами и байтами.