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

lavrik

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

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Участник
    Участник
  1. Здравствуйте, нужен совет/помощь в реализации оценки энергии спектра. Глобальная задача - моделирование процесса очистки голосового сигнала от шума в реальном времени. Решил попробовать реализовать алгоритм, в котором есть данный этап. Т.к. обработка делается в реальном времени, то обработка производится небольшими фреймами по 160 сэмплов (при частоте дискретизации 8 кГц). Соответственно каждая из выборок прогоняется через БПФ, затем полученный спектр проходит через рекурсивное сглаживание первого порядка по времени, и вот дальше нужно оценить спектр по критерию энергии. Дальше есть несколько вариантов: http://forum.sources.ru/index.php?showtopi...mp;view=showall - оценка спектра по критерию энергии,расчет фильтра винера из кадра признанного шумом,собственно говоря фильтрация ( w=1-k*(ns/as), здесь k-степень подавления, ns-спектр шума, as-спектр шум + сигнал ),сглаживание по частоте и по времени,обпф и синтез методом сложения окон с перекрытием; и второй вариант - http://tka4.org/tka4/soft/Adaptive%20Noise...tion%20(R1).pdf - пункт 4.2.1 Оба способа схожи, но в первом отсутствуют какие-либо подробности реализации, а во втором - не могу верно математически интерпретировать предлагаемый метод. Пытался углубиться в первоисточник по данному методу - https://www.microsoft.com/en-us/research/wp.../tr-2000-86.pdf - не очень помогло, т.к. я довольно неискушён в математике . Хелп!
  2. А, понял. Так ШИМ пилу я находил в сети, очень много годных, чуть ли не пошаговых инструкций. У меня по условию есть 8-битный параллельный порт (читай GPIO) и SPI. Вот на базе этого и надо сварганить.... Но за внимание к проблеме спасибо! :)
  3. Одноногим? Расскажите пожалуйста.
  4. А вы знаете как сделать АЦП на двух ножках контроллера? Если знаете - подскажите, не знаете - пройдите, пожалуйста, мимо. Если вас так беспокоит характер этого задания - рассматриваете его в вакууме. Просто возникла задача и ее нужно решить.
  5. Уважаемый модератор! Я у меня были на выбор и другие задачи, но так сложилось что более реализуемой показалась эта. Я не думаю, что здесь нужно описывать всю ситуацию почему я пытаюсь куда-то трудоустроиться, почему моей квалификации недостаточно (потому что опыта можно сказать нет, а он приходит со стажем). Я всего лишь попросил совета, и не просто сижу и высиживаю время в ожидании ответа, а предлагаю свое понимание данного вопроса и прошу его подкорректировать, если оно не верно. Тем более что задача не особо тривиальная, ладно бы я тут не мог диодом поморгать или разобраться в полностью документированном интерфейсе.... Вы бы лучше подсказали, если знаете, а не ставили бы очевидные вопросы. Если бы я все понял - я бы не писал сюда.
  6. Хм, по условию задания, в используемом гипотетическом микроконтроллере есть SPI. Можно ли использовать для этого его следующим образом: настраивается в режиме Master, выводы MOSI и MISO замыкаются и контроллер начинает на MOSI посылать по восходящему фронту CLK число 0b11111111. Т.к. это эхо (пины входа и выхода замкнуты), то на MISO будет по нисходящему фронту приходить мгновенно ответ, в котором, как утверждает автор схемы, не все биты будут равны "1". И таких посылок должно быть такое количество, чтобы обеспечивалась достаточная точность, я правильно понимаю?
  7. Там просто говорится, что для расчета действующего значения нужно пользоваться формулой, которая содержит количество посланных и полученных единиц. А вот как фиксировать эти единицы не понятно... Я правильно понял?
  8. Понадобилось заняться таким извращением, как программный АЦП (тестовое задание для трудоустройства). Нашел такой вариант решения проблемы http://www.bytecraft.com/Low_Cost%2C_Low_S...mbedded_Systems Но не могу разобраться как работает, даже после перевода статьи...уже и схему в протеусе собрал, в надежде там на осциллографе что-то увидеть, но ничего так и не понял...говорю сразу, что со схемотехникой плоховато, поэтому не судите :(
  9. Проблема решилась заменой одного из конденсаторов кварца... правда почему он вышел из строя.... Спасибо за советы!
  10. Дело в том, что и на второй плате когда-то работала такая же конфигурация, как на первой...а сейчас не работает
  11. Так а почему в первом случае все заводится??? Или это какие-то недоговорки от Atmel? Или может быть я что-то невнимательно читал в даташите? Питание на обоих платах от USB одного компьютера, 5В, тут не должно быть ничего такого, шнуры пробовал менять...
  12. Всем привет, нужен совет. Есть две одинаковые платы, с ATmega 128 и подключенным кварцем на 7.3728 МГц. Одна из них затактирована от этого самого кварца и все чудесно работает, фьюзы настроены следующим образом: На второй точно такой же плате выставлены изначально стандартные фьюзы на 1 МГц от внутреннего генератора, при попытке выставить рабочую конфигурацию с первой платы кристалл блокируется, и разблокировать его можно при помощи параллельного программатора. Т.к. чип имеет не самый удобный корпус для постоянного монтажа/демонтажа, то после 2 таких попыток сконфигурировать фьюзы и следовавших им выпаиваний/запаиваний феном хочется уже наверняка разобраться, чтобы третья операция восстановления стала последней. Так в чем может быть проблема? Почему на одном чипе конфигурация работает, а на другом нет?
  13. Контроллер нужен как промежуточное устройство для декодирования в будущем...Это в общем-то не имеет отношения к делу. То, что не получается реализовать - это мостик UART-SPI.
  14. Очень нужна помощь Помогите кто чем может! :rolleyes:
  15. Форумчане, нужна помощь!!! Делаю по работе программатор на ATmega128 для той же самой ATmega. C одной стороны она подключена через SPI к программируемому чипу, с другой стороны к компьютеру по UART (FTDI VCP). Нужно наладить связь, грубо говоря, между программируемой ATmega и компом. В даташите раздел по ISP изучил, основные команды выписал. Сначала сделал программу, которая работает только с SPI и последовательно шлет нужные байты и в случае верного ответа программируемого чипа сообщает об этом. Работает. Но когда попытался прикрутить к этому всему комп через UART, то началась вакханалия. То ничего не приходит (истекает тайм-аут чтения com-порта), то приходит какой-то мусор, не поддающийся осмыслению. Например самая первая команда, после введения в режим ISP жертвы, это 10101100 01010011 11111111 11111111. В момент передачи третьего байта (11111111), должно придти в ответ 01010011, но в случае с участием компьютера, этот байт приходит почему-то после отсылки второго байта. :( Пишу в CVAVR. #include <mega128.h> #include <delay.h> #include <interrupt.h> char buffer_usb; char buffer_atmega; void uart1_init( void ) { // USART1 initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART1 Receiver: On // USART1 Transmitter: On // USART1 Mode: Asynchronous // USART1 Baud Rate: 115200 UCSR1A=(0<<RXC1) | (0<<TXC1) | (0<<UDRE1) | (0<<FE1) | (0<<DOR1) | (0<<UPE1) | (1<<U2X1) | (0<<MPCM1); UCSR1B=(1<<RXCIE1) | (0<<TXCIE1) | (0<<UDRIE1) | (1<<RXEN1) | (1<<TXEN1) | (0<<UCSZ12) | (0<<RXB81) | (0<<TXB81); UCSR1C=(0<<UMSEL1) | (0<<UPM11) | (0<<UPM10) | (0<<USBS1) | (1<<UCSZ11) | (1<<UCSZ10) | (0<<UCPOL1); UBRR1H=0x00; //115200*2 UBRR1L=0x03; } void spi_init (void) { // SPI initialization // SPI Type: Master // SPI Clock Rate: 115,200 kHz *2 // SPI Clock Phase: Cycle Start // SPI Clock Polarity: Low // SPI Data Order: MSB First SPCR=(1<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (1<<SPR1) | (0<<SPR0); SPSR=(1<<SPI2X); } void uart_putc1( int c ) { //ждем окончания передачи предыдущего байта while( ( UCSR1A & ( 1 << UDRE1 ) ) == 0 ); UDR1 = c; } void spi_putc( char cData) { /* Start transmission */ SPDR = cData; /* Wait for transmission complete */ while(!(SPSR & (1<<SPIF))) ; } interrupt [sPI_STC] void spi_isr(void) { cli(); buffer_atmega = SPDR; sei(); } interrupt [uSART1_RXC] void usart1_rxc_isr(void) { cli(); buffer_usb=UDR1; sei(); } void main (void) { DDRE=0b01000000; //Установка PE6 "Out" - "Reset" DDRB=0b00000111; //Установка PB1 "Out" - "SCK", установка PB2 "Out" - "MOSI/PDO", PB0 - SS uart1_init(); spi_init(); /*SET ISP*/ PORTB.1=0; // Set SCK - '0' delay_ms(15); PORTE.6=1; // Set RESET delay_ms(15); PORTE.6=0; delay_ms(15); PORTB.1=1; // Set SCK - '1' sei(); while (1){ if (buffer_usb !=0) { //spi_putc(buffer_usb); SPDR = buffer_usb; buffer_usb=0; }; if (buffer_atmega != 0) {uart_putc1(buffer_atmega); buffer_atmega=0;} }; } Пытался читать SPDR в прерывании по окончании передачи - бесполезно. Если вручную это делать - выкидывает всякий мусор. Поэтому прошу помочь наладить этот самый мостик из SPI-UART, который будет вменяемо передавать данные в две стороны. P.S. вообще не думал, что будет столько проблем с этим самым мостиком, потому что перед этим делал его из двух UART, для программирования LPC2366, и там все получилось очень прилично и без косяков, а тут... Хотелось бы, чтобы результат был таким, как с двумя UART.
×
×
  • Создать...