Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Своими руками

Своими руками Завершенные и текущие проекты, хард & софт

Ответ
 
Опции темы Опции просмотра
Старый 30.06.2014, 12:18   #26
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

Цитата:
Сообщение от Petr
Да возьмите наконец макетку и сделайте проект.
Делов на неделю максимум.
Если юзать протеус - ну на 2 недели.
Согласен, но это когда все необходимое имеется под рукой.

Только сейчас появилась определенность, какой именно микропроцессор (dsPIC33FJ64GP804 в корпусе TQFP44) будет использован в проекте. Когда он и еще некоторые компоненты проекта появятся в наличии, сложно сказать. А вот когда все будет присутствовать в наличии, тогда и буду собирать на макетке, если к тому времени еще не сделаю плату.

Это моя первая работа с dsPIC33 и пока нет достаточного опыта работы с ними, а также нет опыта в части, касающейся цифровой обработки сигнала и спросить толком некого, поскольку это очень специфическая тема. Это вопрос времени, надо читать книги, изучать матчасть.

С аналоговой частью проекта и с питанием устройства вопросов практически нет, поэтому там мало что изменится.

Зато очень много вопросов по цифровой части. Поэтому приходится пока моделировать проект в Proteus на том, что там есть в библиотеках, а не на том, что надо было бы.

Цитата:
Сообщение от Petr
Давайте обсудим правильный путь.
Давайте, на то это и форум.

Цитата:
Сообщение от Greg
она же вроде ещё и логарифм
Да, правильно, а как это можно сделать, пару слов писалось рядом в теме

PIC16F877A и MCP41010, работа по SPI

Цитата:
Сообщение от Greg
хотя насколько понимаю эти слуховые аппараты - там не только эквалайзер, но надо двигать весь спектр
По поводу эквалайзера - это отчасти верно, только здесь диапазон регулировки у каждого частотного фильтра намного шире: 0..100 дБ.

По поводу сдвига спектра - это отдельная тема для разговора, это используется очень редко и людей надо обучать пониманию транспонированной речи. Об этом можно прочитать в книге Эфрусси "Слуховые аппараты и аудиометры".
RTSAM вне форума   Ответить с цитированием
Старый 30.06.2014, 15:31   #27
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 45
Сообщений: 1,720
Вес репутации: 3316/87
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: ПО для цифрового слухового аппарата

Цитата:
Сообщение от RTSAM Посмотреть сообщение
Давайте, на то это и форум.
Для начала хорошо бы понять в цель проекта.
Если просто для обучения, себя и т.д.
Т.е. не предполагается, что кто то будет производить
и тем более носить данный аппарат - со схемотехникой все более
менее ОК.

Если все же нужно получить коммерческий продукт - это совсем иное.
И выбор процессора не факт, что правильный.
И не факт, что выбор именно процессора как такового - это правильно.
Скорее всего нет.
И тогда схемотехнику и выбор основы нужно обсудить с нуля.

Если предполагается изготовить один аппарат и использовать его
самому, тогда можно использовать и этот процессор.
Аппарат же будет тяжелым и прожорливым, но это не беда,
если "для себя".

А уж по поводу обработки сигнала... это по 5 направлений
в каждой озвученной ветви.

Так что напишите сначала цель работы и максимально
ожидаемый результат - тогда можно советовать.

Забыл добавить замечание:
В подобных проектах (я делал переговорные устройства)
крайне важна механическая (акустическая) часть.
От этого зависит необходимость использовать подавление
обратной (акустической) связи и фильтров.
Также использование/не использование задержек сигнала.
Также очень !! важны условия эксплуатации
(наличие постоянного внешнего шума, ударов и т.п.)
Без обсуждения ФАКТИЧЕСКОЙ конструкции корпуса
и результатов его экспериментального прогона
обсуждение фильтров не имеет смысла.

А что я вижу - странную схему в протеусе с непонятным назначением
и полным отсутствием программной поддержки (по ней можно было бы догадаться о целях).

Последний раз редактировалось Petr; 30.06.2014 в 15:39.
Petr вне форума   Ответить с цитированием
Старый 01.07.2014, 22:16   #28
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

Цитата:
Сообщение от Petr
Для начала хорошо бы понять в цель проекта.
Попробую прояснить ситуацию с данным проектом.

Данный проект делается для себя и в познавательном смысле, и в смысле применения.
Получать из этого коммерческий продукт - в планы не входит. Но при этом учитывается, что возможно кому-то будет интересно повторить этот проект, но уже скорректировав его под себя и свою аудиограмму.

Изучение возможности построить слуховой аппарат для себя используя чисто аналоговый путь решения поставленной задачи, привело к пониманию того, что этот путь уже изжил себя и в дальнейшем бесперспективен. Зато использование цифровой обработки сигнала дает большие преимущества, и имеет перспективы развития. Про преимущества цифровой обработки сигналов в СА в том числе уже было сказано до меня в первоисточниках.

Ожидаемый результат (программа минимум):
1. Работа, обработка сигнала в режиме реального времени.
2. Рабочая полоса частот: 0..4 кГц, частота дискретизации 8 кГц соответственно.
3. Точная коррекция слуха в пределах указанного диапазона частот.
4. Использование для целей коррекции FIR-фильтров (64 коэфф. минимум).
5. Использование в качестве дополнительных функций помимо коррекции потерь слуха подпрограмм обработки звука, т.е. библиотек "Speech" от Microchip (Noise Suppression, Acoustic Echo Cancellation, Linear Echo Cancellation, Equalizer).
6. Automatic Gain Control т.е. АРУ (схемотехника и/или программный).
7. Время работы от одного комплекта АКБ - 12 часов (по возможности).
8. Совместимость АКБ и батареек по типоразмеру и по емкости.
9. Носимое устройство свободно помещающееся в нагрудный и/или внутренний карман.

Если хватит ресурсов микроконтроллера, то как программу максимум можно рассматривать:
1. Расширение рабочей полосы частот до 8 кГц, как в промышленных СА.
2. Использование для целей коррекции FIR-фильтров с длиной до 512 коэфф. включительно.
3. Сохранение вышеописанного функционала не вошедшего в этот перечень.

По поводу условий эксплуатации могу сказать следующее:
1. Все что касается любых носимых, карманных устройств - актуально.
2. Микрофон либо на корпусе СА, либо как брелок на шнуре к наушнику(-ам).
3. К шуму в помещении и на улице, добавим шум в микрофоне от возможного трения об одежду, от ветра.
4. Подавление обратной акустической связи лишним никогда не бывает, хотя будут использованы наушники вставляемые в ушной канал (т.н. "бананы"), что позволит свести обратную акустическую связь к минимуму.

Последнюю, на текущий момент версию схемного решения (цель проекта) можно посмотреть здесь:

P-CAD_DHA_dsPIC33FJ64GP804+batt.pdf

Это то, что будет воплощаться в железе, и большая часть программного кода отработанная на модели в Протеусе будет переноситься и дописываться под это железо. Для скачивания и просмотра файлов регистрация на форуме cqham.ru пока не требуется.

Схема в Протеусе - это только приближенная модель цифровой части устройства позволяющая решить некоторые вопросы связанные с написанием кода.

Последний раз редактировалось RTSAM; 01.07.2014 в 22:24.
RTSAM вне форума   Ответить с цитированием
Старый 02.07.2014, 20:38   #29
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 45
Сообщений: 1,720
Вес репутации: 3316/87
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: ПО для цифрового слухового аппарата

Цитата:
Сообщение от RTSAM Посмотреть сообщение
Попробую прояснить ситуацию с данным проектом.

Данный проект делается для себя и в познавательном смысле, и в смысле применения.
Получать из этого коммерческий продукт - в планы не входит. Но при этом учитывается, что возможно кому-то будет интересно повторить этот проект, но уже скорректировав его под себя и свою аудиограмму.

Изучение возможности построить слуховой аппарат для себя используя чисто аналоговый путь решения поставленной задачи, привело к пониманию того, что этот путь уже изжил себя и в дальнейшем бесперспективен. Зато использование цифровой обработки сигнала дает большие преимущества, и имеет перспективы развития. Про преимущества цифровой обработки сигналов в СА в том числе уже было сказано до меня в первоисточниках.

Ожидаемый результат (программа минимум):
1. Работа, обработка сигнала в режиме реального времени.
2. Рабочая полоса частот: 0..4 кГц, частота дискретизации 8 кГц соответственно.
3. Точная коррекция слуха в пределах указанного диапазона частот.
4. Использование для целей коррекции FIR-фильтров (64 коэфф. минимум).
5. Использование в качестве дополнительных функций помимо коррекции потерь слуха подпрограмм обработки звука, т.е. библиотек "Speech" от Microchip (Noise Suppression, Acoustic Echo Cancellation, Linear Echo Cancellation, Equalizer).
6. Automatic Gain Control т.е. АРУ (схемотехника и/или программный).
7. Время работы от одного комплекта АКБ - 12 часов (по возможности).
8. Совместимость АКБ и батареек по типоразмеру и по емкости.
9. Носимое устройство свободно помещающееся в нагрудный и/или внутренний карман.

Если хватит ресурсов микроконтроллера, то как программу максимум можно рассматривать:
1. Расширение рабочей полосы частот до 8 кГц, как в промышленных СА.
2. Использование для целей коррекции FIR-фильтров с длиной до 512 коэфф. включительно.
3. Сохранение вышеописанного функционала не вошедшего в этот перечень.

По поводу условий эксплуатации могу сказать следующее:
1. Все что касается любых носимых, карманных устройств - актуально.
2. Микрофон либо на корпусе СА, либо как брелок на шнуре к наушнику(-ам).
3. К шуму в помещении и на улице, добавим шум в микрофоне от возможного трения об одежду, от ветра.
4. Подавление обратной акустической связи лишним никогда не бывает, хотя будут использованы наушники вставляемые в ушной канал (т.н. "бананы"), что позволит свести обратную акустическую связь к минимуму.

Последнюю, на текущий момент версию схемного решения (цель проекта) можно посмотреть здесь:

P-CAD_DHA_dsPIC33FJ64GP804+batt.pdf

Это то, что будет воплощаться в железе, и большая часть программного кода отработанная на модели в Протеусе будет переноситься и дописываться под это железо. Для скачивания и просмотра файлов регистрация на форуме cqham.ru пока не требуется.

Схема в Протеусе - это только приближенная модель цифровой части устройства позволяющая решить некоторые вопросы связанные с написанием кода.
Ваше четкое понимание целей радует.
Исходя из ситуации со схемой согласен.

По FIR фильтрам и их реализации на англоязычных ресурсах
информации полно. Но в поиске легко найти и на русском.
Первая же ссылка гугла:
http://habrahabr.ru/post/128140/
Кусок кода более менее адекватен.
Если добавить к нему вот этот камент:
Цитата:
Другой способ — поштучная обработка пришедших данных. То есть в рабочем массиве храните только число отсчетов равное порядку фильтра. На каждом новом сэмпле новый отсчет в массив добавляете, самый старый выкидываете и запускаете процедуру однократно (для одного сэмпла). Так чаще делается в DSP. Ну и подобная же архитектура используется в аппаратной реализации фильтра (ASIC/FPGA).
Я думаю понятно, что нужно реализовать FIFO очередь
семплов в виде круговой очереди (классическая очередь с
указателем начала и конца еще со времен DOS клавиатуры).
И к этой очереди применять фильтр по одному разу после
каждого сдвига кольца.
Я этот подход применял.
Все это затратно по ресурсам проца.
Не уверен в его возможностях, но может и потянет.

Примеры фильтров (Noise Suppression, Acoustic Echo Cancellation, Linear Echo Cancellation, Equalizer) не смотрел. Там может оказаться,
что ресурсов надо вагон. Не знаю.

Но в любом случае пробовать рекомендую на макетке.
Не теряйте время на ерунду.
Petr вне форума   Ответить с цитированием
Старый 02.07.2014, 22:02   #30
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

Petr, спасибо за ссылочку и пояснения по теме цифровых фильтров.

А что Вы скажете по поводу кода цифровых фильтров, генерируемого программой dsPIC Filter Designer Lite, разработанной Microchip? Этот код я часто вижу в примерах от той-же Microchip. Вам приходилось с этим сталкиваться, использовать этот код, прописывать этот код в теле основной программы?

И еще, как варианты фильтров - коды генерируемые Matlab, Winfilter, Filter solutions, что скажете насчет этого?
RTSAM вне форума   Ответить с цитированием
Старый 03.07.2014, 10:08   #31
Petr
Senior Member
 
Аватар для Petr
 
Регистрация: 25.02.2007
Возраст: 45
Сообщений: 1,720
Вес репутации: 3316/87
Petr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond reputePetr has a reputation beyond repute
По умолчанию Re: ПО для цифрового слухового аппарата

Цитата:
Сообщение от RTSAM Посмотреть сообщение
Petr, спасибо за ссылочку и пояснения по теме цифровых фильтров.

А что Вы скажете по поводу кода цифровых фильтров, генерируемого программой dsPIC Filter Designer Lite, разработанной Microchip? Этот код я часто вижу в примерах от той-же Microchip. Вам приходилось с этим сталкиваться, использовать этот код, прописывать этот код в теле основной программы?

И еще, как варианты фильтров - коды генерируемые Matlab, Winfilter, Filter solutions, что скажете насчет этого?
Код dsPIC Filter Designer Lite я не видел и не использовал.
А вот код из Matlab видел - нормальный.
(правда х.з. про какую версию Вы и про какую я ).

Я не думаю, что разница у всех велика.
Тут важно немного иное.
Основная часть кода должна быть кристально ясна программисту.
Это поможет правильно организовать работу с исходными
выборками и оптимизировать эту часть.
И самое главное - математика.
В готовых примерах часто типы данных ставят "с запасом",
ориентируясь на некий виртуальный проц. с бесконечной производительностью
и памятью. Зато код 100% верный.
Это все хорошо, но четко понимая работу мат. части
можно (и нужно) правильно выбрать размерности массивов и переменных,
учитывая разрядность используемого проца.
Иногда даже увеличивать разрядность, если это подравнивание
под разрядность asm операндов и экономит время.
В DSP задачах такие мелочи иногда дают значимый выигрыш.

Потому почитайте теорию по фильтрам, посмотрите код
(да хотя бы из той ссылки) и когда все станет ясно -
напишите прогу с несколькими фильтрами и погоняйте в железе.
Petr вне форума   Ответить с цитированием
Старый 31.08.2014, 23:28   #32
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

Попробовал запустить фильтры на 500 и 1000 Гц генерированные в dsPICfdlite. (FIR, Windowed, Band Pass, Kaiser, 64 taps)

Работу фильтров вижу, есть правильная реакция на изменение частоты входного сигнала, но есть некоторые непонятные моменты:
- уровень выходного сигнала фильтра, по отношению к входному, увеличился на порядок;
- искажена форма выходного сигнала (см. скриншот).

При использовании чужих файлов, тоже генерированных в dsPICfdlite, но взятых из проекта по цифровому стетоскопу, на выходе фильтра - вааще меандр (см. скриншот).

При компиляции своего проекта и проекта по стетоскопу вижу одни и те-же предупреждения, но не могу понять, насколько это критично для работы фильтра?

Вот пожалуй все, что касается фильтрации в исходном коде:

Файл main.c:
-----------------
Код:
#include <dsp.h>
#include "FIR_Filter.h"
#include "test_0500_q1.4.h"
#include "test_1000_q1.4.h"
...
// Call the FIRFilterInit routine to zero out the delay line
FIRFilterInit( &test_0500_q1Filter );     // Init Filter
FIRFilterInit( &test_1000_q1Filter );     // Init Filter
...
Файл ADC.c:
-----------------
Код:
void Init_ADC(void)
{
    AD1CON1bits.ADON = 0;               // A/D Operating Mode bit
    AD1CON1bits.ADSIDL = 0;             // A/D Stop in Idle Mode bit
    AD1CON1bits.AD12B = 0;              // 10-bit or 12-bit Operation Mode bit
    AD1CON1bits.FORM = 1;               // Data Output Format bits - signed int ?
    AD1CON1bits.SSRC = 2;               // Conversion Trigger Source Select bits (Timer_3)
    AD1CON1bits.ASAM = 1;               // A/D Sample Auto-Start bit

    AD1CON2bits.CSCNA = 1;              // Scan Input Selections for CH0+ S/H Input for MUX A Input Multiplexer Setting bit
    AD1CON2bits.BUFS = 0;               // Buffer Fill Status bit
    AD1CON2bits.SMPI = 15;            // Sample/Convert Sequences Per Interrupt Selection bits, every 16 bytes! /0
    AD1CON2bits.BUFM = 0;               // Buffer Mode Select bit
    AD1CON2bits.ALTS = 0;               // Alternate Input Sample Mode Select bit

    AD1CON3bits.ADRC = 0;               // A/D Conversion Clock Source bit
    //AD1CON3bits.SAMC = 0b1111;          // Auto-Sample Time bits ??? 0b1111
    AD1CON3bits.ADCS = 7;               // A/D Conversion Clock Select bits /0 ? =31+1 ? 63+1 ???
    
    //AD1CHS0 = 0;                        // ADC1 INPUT CHANNEL 0 SELECT REGISTER, connect AN0 to Ch0
    AD1CSSL = 3;                        // ADC1 INPUT SCAN SELECT REGISTER LOW, Set AN0, AN1 for input scan
    
    AD1PCFGL = 0xFFFC;                  // AN0, AN1 - Analog inputs (0)
    
    IFS0bits.AD1IF = 0;			            // Clear the A/D interrupt flag bit
    IEC0bits.AD1IE = 1;			            // Enable A/D interrupt 
    AD1CON1bits.ADON = 1;		            // Turn on the A/D converter
}
Файл interrupts.с:
------------------
Код:
#define NUM_SAMPLES 16
...
unsigned char sampling_tmrcnt;
unsigned int Filtered_Data_0[NUM_SAMPLES];
unsigned int Filtered_Data_1[NUM_SAMPLES];
...
void __attribute__((__interrupt__, __shadow__)) _T3Interrupt(void)
{
    IFS0bits.T3IF = 0;        // Clear Timer_3 interrupt flag
    TMR3 = 0x00;
    LATBbits.LATB14 = 1;
    LATBbits.LATB14 = 0;

    if (sampling_tmrcnt > 15)
        sampling_tmrcnt = 0;
    sampling_tmrcnt ++;

    if (prgm == 0)                                
        LATC = Filtered_Data_0[sampling_tmrcnt-1];
    else
        LATC = Filtered_Data_1[sampling_tmrcnt-1];

}

...

void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void)
{
    volatile unsigned int *adc_Ptr;          // pointer
    IFS0bits.AD1IF = 0;		             // Clear the ADC1 Interrupt Flag
    adc_Ptr = (unsigned int *)(& ADC1BUF0);  // ADCBUF0 address? p.39 datasheet


    BlockFIRFilter( &test_0500_q1Filter, &ADC1BUF0, Filtered_Data_0, NUM_SAMPLES );
    BlockFIRFilter( &test_1000_q1Filter, adc_Ptr, Filtered_Data_1, NUM_SAMPLES );
}
Файл test_0500_q1.s:
------------------
Код:
; ..............................................................................
;    File   test_0500_q1.s
; ..............................................................................

		.equ test_0500_q1NumTaps, 64

; ..............................................................................
; Allocate and initialize filter taps

		.section .xdata
		.align 128

test_0500_q1Taps:
.hword 	0x0004,	0x0007,	0x0008,	0x0005,	0xFFFA,	0xFFE2,	0xFFBE,	0xFF93,	0xFF6C
.hword 	0xFF5A,	0xFF70,	0xFFBF,	0x004C,	0x0111,	0x01EF,	0x02B8,	0x0333,	0x0327
.hword 	0x026B,	0x00FA,	0xFEF6,	0xFCA8,	0xFA7D,	0xF8ED,	0xF862,	0xF91E,	0xFB24
.hword 	0xFE35,	0x01D5,	0x0562,	0x0836,	0x09C6,	0x09C6,	0x0836,	0x0562,	0x01D5
.hword 	0xFE35,	0xFB24,	0xF91E,	0xF862,	0xF8ED,	0xFA7D,	0xFCA8,	0xFEF6,	0x00FA
.hword 	0x026B,	0x0327,	0x0333,	0x02B8,	0x01EF,	0x0111,	0x004C,	0xFFBF,	0xFF70
.hword 	0xFF5A,	0xFF6C,	0xFF93,	0xFFBE,	0xFFE2,	0xFFFA,	0x0005,	0x0008,	0x0007
.hword 	0x0004

; ..............................................................................
; Allocate delay line in (uninitialized) Y data space

		.section .ybss,  "b"
		.align 128

test_0500_q1Delay:
		.space test_0500_q1NumTaps*2

; ..............................................................................
; Allocate and intialize filter structure

		.section .data
		.global _test_0500_q1Filter

_test_0500_q1Filter:
.hword test_0500_q1NumTaps
.hword test_0500_q1Taps
.hword test_0500_q1Taps+test_0500_q1NumTaps*2-1
.hword 0xff00
.hword test_0500_q1Delay
.hword test_0500_q1Delay+test_0500_q1NumTaps*2-1
.hword test_0500_q1Delay

; ..............................................................................
; ..............................................................................
; Sample assembly language calling program
;  The following declarations can be cut and pasted as needed into a program
;		.extern	_FIRFilterInit
;		.extern	_BlockFIRFilter
;		.extern	_test_0500_q1Filter
;
;		.section	.bss
;
;	 The input and output buffers can be made any desired size
;	   the value 40 is just an example - however, one must ensure
;	   that the output buffer is at least as long as the number of samples
;	   to be filtered (parameter 4)
;input:		.space	40
;output:	.space	40
;		.text
;
;
;  This code can be copied and pasted as needed into a program
;
;
; Set up pointers to access input samples, filter taps, delay line and
; output samples.
;		mov	#_test_0500_q1Filter, W0	; Initalize W0 to filter structure
;		call	_FIRFilterInit	; call this function once
;
; The next 4 instructions are required prior to each subroutine call
; to _BlockFIRFilter
;		mov	#_test_0500_q1Filter, W0	; Initalize W0 to filter structure
;		mov	#input, W1	; Initalize W1 to input buffer 
;		mov	#output, W2	; Initalize W2 to output buffer
;		mov	#20, W3	; Initialize W3 with number of required output samples
;		call	_BlockFIRFilter	; call as many times as needed
Файл test_0500_q1.h:
------------------
Код:
#ifndef TEST_0500_Q1_H
#define TEST_0500_Q1_H

extern FIRFilterStructure test_0500_q1Filter;

#endif /* TEST_0500_Q1_H */

/* The following C-code fragment demonstrates how to call the filter routine
#include "FIR_Filter.h"
#include "test_0500_q1.h"

// NUM_SAMPLES defines the number of samples in one block of input data.
// This value should be changed as needed for the application
#define NUM_SAMPLES 100

{
   // Declare input and output sample arrays.
   int  inSamples[NUM_SAMPLES], outSamples[NUM_SAMPLES];


   // Call the FIRFilterInit routine to zero out the delay line
   FIRFilterInit( &test_0500_q1Filter );

   // Call BlockFIRFilter for each block of input samples
   // This routine would normally be called inside a FOR or a DO-WHILE loop
   // Only one instance has been shown
   BlockFIRFilter( &test_0500_q1Filter, &inSamples, &outSamples, NUM_SAMPLES );
}
*/
Кто работал с фильтрами, генерированные в dsPICfdlite, может подскажите где копать?
Возможно я что-то пропустил или неправильно сконфигурировал?
Миниатюры
dha_fir_out.PNG   dha_filtering_stet_filtr.PNG   dha_compiler_warn.PNG  
RTSAM вне форума   Ответить с цитированием
Старый 05.09.2014, 15:21   #33
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

В предыдущем посте забыл написать, что добротность фильтров выбрана равной 1,4. Как в библиотечных функциях группы "Speech" от Microchip.

Поправочка к предыдущему посту, массивы Filtered_Data_х[] - signed int (int)!

Обнаружил еще один интересный момент, разрывы(паузы) между прерываниями таймера_3, пакеты прерываний _16_16_16_ ? Как эти паузы можно убрать и с чем вообще это связано?

После некоторых изысканий удалось добиться некоторого улучшения в работе фильтра. В обработчик прерывания таймера_3 добавил строку
Код:
Filtered_Data_0[sampling_tmrcnt-1] -= 128;
хотя правильнее наверное было бы написать
Код:
Filtered_Data_0[sampling_tmrcnt-1] /= n;  // n=2,3,4,...?
но это почему-то не работает.

Код:
...
void __attribute__((__interrupt__, __shadow__)) _T3Interrupt(void)
{
    IFS0bits.T3IF = 0;        // Clear Timer_3 interrupt flag
    TMR3 = 0x00;
    LATBbits.LATB14 = 1;
    LATBbits.LATB14 = 0;

    if (sampling_tmrcnt > 15)
        sampling_tmrcnt = 0;
    sampling_tmrcnt ++;

    Filtered_Data_0[sampling_tmrcnt-1] -= 128;   // *** !?

    if (prgm == 0)                                
        LATC = Filtered_Data_0[sampling_tmrcnt-1];
    else
        LATC = Filtered_Data_1[sampling_tmrcnt-1];

}
...
После этого, результат уже похож на правду (см. скриншоты), но разрывы между прерываниями остались.
Миниатюры
dha_fir0500.200_shift-128.PNG   dha_fir0500.500_shift-128.PNG   dha_fir0500.800_shift-128.PNG  
RTSAM вне форума   Ответить с цитированием
Старый 12.09.2014, 11:35   #34
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

Повыдергивал первые "гвозди". Теперь фильтры по отдельности работают.

В файле Файл ADC.c исправил:
-------------------------------
Код:
void Init_ADC(void)
{
    ...
    AD1CON1bits.FORM = 2;               // Data Output Format bits - fractional
    ...
}
Файл interrupts.с:
------------------
Код:
fractional Filtered_Data_0[NUM_SAMPLES];     // sum of signals
fractional Filtered_Data_4[NUM_SAMPLES];     // 250 Hz
fractional Filtered_Data_5[NUM_SAMPLES];     // 500 Hz

...
void __attribute__((__interrupt__, __shadow__)) _T3Interrupt(void)
{
    IFS0bits.T3IF = 0;        // Clear Timer_3 interrupt flag
    TMR3 = 0x00;
    LATBbits.LATB14 = 1;
    LATBbits.LATB14 = 0;

    if (sampling_tmrcnt > 15)
        sampling_tmrcnt = 0;
    sampling_tmrcnt ++;

    Filtered_Data_4[sampling_tmrcnt-1] /= 64;   // *** or >>6
    Filtered_Data_5[sampling_tmrcnt-1] /= 64;   // *** or >>6

    
    Filtered_Data_0[sampling_tmrcnt-1] = 
        Filtered_Data_4[sampling_tmrcnt-1] +    // 250 Hz
        Filtered_Data_5[sampling_tmrcnt-1];     // 500 Hz

    LATC = Filtered_Data_0[sampling_tmrcnt-1];  // Sum of signals to output

}

...
void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void)
{
    IFS0bits.AD1IF = 0;		             // Clear the ADC1 Interrupt Flag
    
    BlockFIRFilter( &test_0250_q1Filter, &ADC1BUF0, Filtered_Data_4, NUM_SAMPLES );
    BlockFIRFilter( &test_0500_q1Filter, &ADC1BUF0, Filtered_Data_5, NUM_SAMPLES );
}
Разрывы (паузы) между прерываниями таймера_3 были связаны с производительностью микроконтроллера, динамика для 4(5)-фильтров (64 taps) такая:
11MIPS=0.43ms, 16MIPS=0.3ms, 30.4MIPS=0.15ms, 35MIPS=0.135ms, 40MIPS<=0.125ms, а это уже меньше чем промежуток между прерываниями таймера_3.
Вывод: если не хватает производительности - уменьшить число фильтров или чуть ухудшить их характеристики (число коэффициентов).

Теперь при суммировании выходных сигналов фильтров появился выброс на синусоиде, и что это, и как с этим бороться? У кого есть мнения, как вообще должно происходить это суммирование?

Кстати в том микроконтроллере, что использован для симуляции, Data Memory ограничена 2048 байт, а занято, в частности фильтрами (линиями задержек), уже 60%.
Миниатюры
Data Memory.PNG   sum_of_signals_2 fir_filter.PNG  
RTSAM вне форума   Ответить с цитированием
Старый 12.09.2014, 18:37   #35
Vlad27
Member
 
Регистрация: 27.02.2007
Адрес: Polotsk, Belarus
Сообщений: 72
Вес репутации: 205/39
Vlad27 has a spectacular aura aboutVlad27 has a spectacular aura aboutVlad27 has a spectacular aura about
По умолчанию Re: ПО для цифрового слухового аппарата

Я бы посоветовал использовать режим DMA для обработки (Ping-Pong Mode).
В один буфер данные пишутся из АЦП, другой в это время фильтруется. И так по
очереди. В ЦАП все сливается тоже по прерыванию DMA.
Vlad27 вне форума   Ответить с цитированием
Старый 12.09.2014, 20:41   #36
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

Спасибо за подсказку, Vlad27.

Когда буду переносить проект на dsIC33FJ128GP804, а там есть режим DMA, то обязательно это сделаю. В том микроконтроллере, на котором происходит моделирование в протеусе, DMA отсутствует.
Ближе к концу сентября, если все получится с комплектующими как мне пообещали, то будет готова плата-макет устройства на dsIC33FJ128GP804 и можно будет все пробовать в железе...
RTSAM вне форума   Ответить с цитированием
Старый 14.09.2014, 09:15   #37
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

Попробовал, из любопытства, пропустить сигнал последовательно через два фильтра ФВЧ 500Гц -> ПФ 1000Гц. Сигнал проходит на выход без того выброса который виден при суммировании 2-х ПФ.
RTSAM вне форума   Ответить с цитированием
Старый 15.09.2014, 15:09   #38
Vlad27
Member
 
Регистрация: 27.02.2007
Адрес: Polotsk, Belarus
Сообщений: 72
Вес репутации: 205/39
Vlad27 has a spectacular aura aboutVlad27 has a spectacular aura aboutVlad27 has a spectacular aura about
По умолчанию Re: ПО для цифрового слухового аппарата

Моделировать обработку сигнала можно в dsPICworks, я так свой 4-х канальный 7-ми
полосный, 16 КГц выборки АЦП эквалайзер разрабатывал.
Vlad27 вне форума   Ответить с цитированием
Старый 16.09.2014, 17:57   #39
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

Спасибо, про dsPICworks я в курсе. Пробовал смотреть в ней фильтры генерированные в dsPICfdlite, включал по одному, а вот интересно как в dsPICworks посмотреть результат работы сразу нескольких фильтров?

Кстати, Vlad27, а на каком микроконтроллере вы свое изделие запускали, и как суммировали выходные сигналы фильтров?
RTSAM вне форума   Ответить с цитированием
Старый 17.09.2014, 01:40   #40
Алексей
Senior Member
 
Регистрация: 25.02.2007
Сообщений: 462
Вес репутации: 578/46
Алексей is a name known to allАлексей is a name known to allАлексей is a name known to allАлексей is a name known to allАлексей is a name known to allАлексей is a name known to all
По умолчанию Re: ПО для цифрового слухового аппарата

Цитата:
Сообщение от RTSAM Посмотреть сообщение
Спасибо, про dsPICworks я в курсе. Пробовал смотреть в ней фильтры генерированные в dsPICfdlite, включал по одному, а вот интересно как в dsPICworks посмотреть результат работы сразу нескольких фильтров?
В свое время использовал для отладки язык python с библиотекой numpy, очень удобно. Пишется код фильтра, тут же создается буфер в который синтезируется шум с нужной амплитудой (просто случайные числа), тут же строится график до фильтра и после с помощью FFT, наглядно виден эффект. После этого код портируется на си/асм нужного проца, усилия в отладке требуются минимальные.

Для сложных моделей в принципе тоже подходит, но лучше осваивать предназначенные для этого продукты, а для фильтров с нуля — самое то.
Алексей вне форума   Ответить с цитированием
Старый 17.09.2014, 11:02   #41
IceS
Super Moderator
 
Регистрация: 01.03.2007
Адрес: St. Petersburg
Возраст: 38
Сообщений: 3,160
Вес репутации: 3463/102
IceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond reputeIceS has a reputation beyond repute
Отправить сообщение для IceS с помощью ICQ
По умолчанию Re: ПО для цифрового слухового аппарата

Цитата:
Сообщение от Алексей Посмотреть сообщение
В свое время использовал для отладки язык python с библиотекой numpy, очень удобно. Пишется код фильтра, тут же создается буфер в который синтезируется шум с нужной амплитудой (просто случайные числа), тут же строится график до фильтра и после с помощью FFT, наглядно виден эффект. После этого код портируется на си/асм нужного проца, усилия в отладке требуются минимальные.

Для сложных моделей в принципе тоже подходит, но лучше осваивать предназначенные для этого продукты, а для фильтров с нуля — самое то.
Мдя.. легких путей не ищем. Видимо с фитоном плотно работали?
Мат пакеты чем не устраивают?
MatLab, MatCad первый все выше описанное спокойно делает.
Второй в освоении более простой, но с экспортов в си возникнут проблемы, и в последствии не такой гибкий как Матлаб, но для старта - на много удобнее.

PS а есть еще всякие Matematica, Mapple и т.п.
__________________
- Готово, мастер !!!
- Что готово ???
- Сломал ...
IceS вне форума   Ответить с цитированием
Старый 17.09.2014, 18:34   #42
Алексей
Senior Member
 
Регистрация: 25.02.2007
Сообщений: 462
Вес репутации: 578/46
Алексей is a name known to allАлексей is a name known to allАлексей is a name known to allАлексей is a name known to allАлексей is a name known to allАлексей is a name known to all
По умолчанию Re: ПО для цифрового слухового аппарата

Цитата:
Сообщение от IceS Посмотреть сообщение
Видимо с фитоном плотно работали?
Мат пакеты чем не устраивают?
MatLab, MatCad первый все выше описанное спокойно делает.
Второй в освоении более простой, но с экспортов в си возникнут проблемы, и в последствии не такой гибкий как Матлаб, но для старта - на много удобнее.

PS а есть еще всякие Matematica, Mapple и т.п.
Ну йопт.., вы как будто через строчку мой пост прочитали..
Алексей вне форума   Ответить с цитированием
Старый 18.09.2014, 13:26   #43
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

Если я правильно понял, то в Matlab речь идет о

Start -> Toolboxes -> Signal Processing -> Filter Design & Analysis Tool (fdatool)

но там каждый раз идет работа только с одним фильтром и нет возможности запустить несколько фильтров (наборов коэффициентов) одновременно, или я не там смотрел?
RTSAM вне форума   Ответить с цитированием
Старый 18.09.2014, 20:06   #44
Алексей
Senior Member
 
Регистрация: 25.02.2007
Сообщений: 462
Вес репутации: 578/46
Алексей is a name known to allАлексей is a name known to allАлексей is a name known to allАлексей is a name known to allАлексей is a name known to allАлексей is a name known to all
По умолчанию Re: ПО для цифрового слухового аппарата

Цитата:
Сообщение от RTSAM Посмотреть сообщение
Если я правильно понял, то в Matlab речь идет о

Start -> Toolboxes -> Signal Processing -> Filter Design & Analysis Tool (fdatool)

но там каждый раз идет работа только с одним фильтром и нет возможности запустить несколько фильтров (наборов коэффициентов) одновременно, или я не там смотрел?
Не туда. fdatool для расчетов фильтра, симуляция — Simulink
Алексей вне форума   Ответить с цитированием
Старый 22.09.2014, 14:02   #45
Vlad27
Member
 
Регистрация: 27.02.2007
Адрес: Polotsk, Belarus
Сообщений: 72
Вес репутации: 205/39
Vlad27 has a spectacular aura aboutVlad27 has a spectacular aura aboutVlad27 has a spectacular aura about
По умолчанию Re: ПО для цифрового слухового аппарата

Цитата:
Сообщение от RTSAM Посмотреть сообщение
Кстати, Vlad27, а на каком микроконтроллере вы свое изделие запускали, и как суммировали выходные сигналы фильтров?
на dsPIC33FJ64GP804, суммировал при моделировании в dsPICWorks.
Эквалайзер написан на ассемблере.
Vlad27 вне форума   Ответить с цитированием
Старый 19.07.2015, 22:01   #46
RTSAM
Member
 
Аватар для RTSAM
 
Регистрация: 07.04.2014
Адрес: Крым
Сообщений: 48
Вес репутации: 130/12
RTSAM will become famous soon enoughRTSAM will become famous soon enough
По умолчанию Re: ПО для цифрового слухового аппарата

Появился макет, который уже частично работает.

На сегодняшний день актуальной является rev.005c, даже я бы сказал rev.005ce, т.е. доработанная.

На сегодняшний день работает все, что касается питания, а также НЧ узлы.
Из цифровой части реализовано:
- АЦП,
- LCD,
- таймеры,
- прерывания,
- управление по SPI.

Последний раз редактировалось RTSAM; 19.07.2015 в 22:09.
RTSAM вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос по импульсному инвертору для газоразряднойлампы dposm Общетехнические вопросы 12 23.03.2013 19:23
Скриншот с дисплея устройства: модуль для генерации bmp dimonomid Своими руками 32 20.12.2012 06:34
вопрос по оптике для видеокамеры-микроскопа. Sergey Общетехнические вопросы 14 27.10.2012 21:36
проблемка с PIC16F628A bereg_ok Продукция MICROCHIP 72 07.09.2007 11:00


Часовой пояс GMT +3, время: 03:52.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd. Перевод: zCarot