ЛР3(а) > Робота цифрового сигнального процесору з даними у форматі з фіксованою точкою: квантування даних

Тема: Вивчення ефектів квантування даних (синусоїдального сигналу та голосових сигналів)

 Завдання А

Ефект квантування синусоїдального сигналу

Для дослідження ефектів квантування вхідного сигналу потрібно звільнитися від правих бітів в значеннях відліків вхідного сигналу, а потім оцінити зроблені зміни. Змінюючи число бітів зміщенням вправо, можна отримати вихідний набір даних з довжиною слова 14 біт, 12 біт і т.д. Приклад реалізації такої програми наведений нижче:

#define    BUF_SIZE 40

 

const int sineTable[BUF_SIZE]=

{0x0000,0x01E0,0x03C0,0x05A0,0x0740,0x08C0,0x0A00,0x0B20,

0x0BE0,0x0C40,0x0C60,0x0C40,0x0BE0,0x0B20,0x0A00,0x08C0,

0x0740,0x05A0,0x03C0,0x01E0,0x0000,0xFE20,0xFC40,0xFA60,

0xF8C0,0xF740,0xF600,0xF4E0,0xF420,0xF3C0,0xF3A0,0xF3C0,

0xF420,0xF4E0,0xF600,0xF740,0xF8C0,0xFA60,0xFC40,0x0000};    

int out16[BUF_SIZE];     /* 16 bits output sample buffer */

int out12[BUF_SIZE]; /* 12 bits output sample buffer */

int out8[BUF_SIZE]; /* 8 bits output sample buffer */

int out6[BUF_SIZE]; /* 6 bits output sample buffer */

void main()

{

int i;

    
 

for (i = 0; i < BUF_SIZE-1; i++)

{

out16[i] = sineTable[i];         /* 16-bit data */

out12[i] = sineTable[i]&0xfff0;     /* Mask off 4-bit*/

out8[i] = sineTable[i]&0xff00;     /* Mask off 8-bit*/

out6[i] = sineTable[i]&0xfc00;     /* Mask off 10-bit*/

}

}

Даний приклад симулює аналогово-цифровий перетворювач з різним значенням довжини слова. Замість операції зсуву, в програмі виконується маскування 4 (8 або 10) молодших значущих бітів. Таким чином, вхідні дані мають розрядність 12 (8 або 6) біт. Отримані значення амплітуд вхідних сигналів порівнюються з 16-розрядними даними.

 

1. Створіть новий проект у середовищі CCS; назвіть його expA та збережіть його у відповідній директорії. Напишіть програму expA.с на основі наведеного вище коду та збережіть її у відповідній директорії. Скопіюйте командний файл лінкера exp.cmd з попередньої лабораторної роботи, та збережіть його у відповідній директорії. Додайте обидва файла до проекту. Підключить бібліотеку засобів динамічної підтримки rst55.lib (розташована у директорії C:\ti\c5500\cgtools\lib). Запустіть програму на компіляцію.

2. Після вдалої компіляції, завантажте програму до процесора. Відкрийте графічні вікна середовища CCS для перегляду значень чотирьох вихідних масивів out16, out12, out10, out6. Приклад настройки графічного вікна показаний на рис.1.

 


 

Рис.1 Приклад настройки графічного вікна для виведення масиву out16.

 

3. Запустіть програму на виконання за допомогою команди RUN. Порівняйте графічні результати для кожного вихідного масиву даних та поясніть різницю у формах сигналів.

 

Завдання Б

Квантування голосових сигналів

 

Існує багато пристроїв, від сотових телефонів до MP3 плеєрів, які обробляють голосові (аудіо) сигнали, використовуючи ЦСП. Мета даного завдання – зрозуміти вплив явища квантування на аудіо сигнал. Для цього використовується фрагмент оцифрованого голосового сигналу, наданий у файлі timit1.asc, як вхідні дані для обробки. Нижче наведений текст програми expB.c для виконання даного завдання:

 

#define    FILELENGTH 27956 /* # of sample of input file timit1.asc */

int indata,out16,out12,out8,out4;

void main(void)

{

int i;

for(i = 0; i < FILELENGTH; i++)

{

out16 = indata&0xffff; /* Direct output to simulate a 16-bit A/D */

out12 = indata&0xfff0; /* Direct output to simulate a 12-bit A/D */

out8 = indata&0xff00; /* Direct output to simulate an 8-bit A/D */

out4 = indata&0xf000; /* Direct output to simulate a 4-bit A/D */

}

}

1. Створіть новий проект у середовищі CCS; назвіть його expВ та збережіть його у відповідній директорії. Напишіть програму expВ.с на основі наведеного вище коду та збережіть її у відповідній директорії. Скопіюйте командний файл лінкера exp.cmd з попередньої лабораторної роботи, та збережіть його у відповідній директорії. Додайте обидва файла до проекту. Підключить бібліотеку засобів динамічної підтримки rst55.lib (розташована у директорії C:\ti\c5500\cgtools\lib). Вкажіть ім’я для генерації файлу карти пам’яті. Запустіть програму на компіляцію. Використайте цифровий голосовий файл timit1.dat (розміщений в директорії з допоміжними програмами до даної лабораторної роботи), як вхідний сигнал для обробки.

2. Для підключення зовнішніх файлів, в середовищі CCS використовуються пробні точки (це було описано в першій лабораторній роботі). В даному завданні необхідно зазначити пробну точку для підключення вхідного голосового файлу до змінної з іменем indata. Додаткові пробні точки необхідно встановити для запису чотирьох вихідних змінних out16, out12, out8 та out4 у зовнішні файли. У першій лабораторній роботі був розглянутий формат зовнішніх файлів, та значення окремих даних у заголовку цього файлу (це стосується і файлу timit1.dat). Інформація заголовку файлу timit1.dat та її значення наведена нижче:

 

Magic number

Format

Starting address

Page number

Length

1651

2

C4

1

1

 

Magiс number – системний код, завжди дорівнює 1651;

Format – формат даних (значення 2 означає integer);

Starting address – початкова адреса розміщення змінної у пам’яті даних процесора, до якої будуть записуватися значення з вхідного файлу (0хС4 в прикладі поданому вище);

Page number – вказівник сторінки пам’яті (номер 1 визначає сторінку пам’яті даних);

Length – довжина блоку даних, що передаються кожного разу. Відкрийте файл timit1.dat за допомогою текстового редактору, та перевірте формат заголовку.

3. Завантажте програму до процесора. Встановіть пробні точки в рядках 9, 10, 11 та 12 файлу expB.c (команди присвоєння значень змінним out16, out12, out8 та out4 ) для вводу та виводу даних в зовнішні файли. Відкрийте файл карти пам’яті *.map, та знайдіть адреси розташування змінних indata, out16, out12, out8 та out4 . За допомогою команди FileFile I/O підключіть вхідний файл timit1.dat до пробної точки в 9 рядку. Для цього в полі адресу Address вкажіть фізичну адресу розташування змінної indata з карти пам’яті, а в полі розміру блока даних Lendth вкажіть 1. Підключіть вихідні файли (у полі вибору типу файлу вкажіть – *.dat (Integer) ) до пробних точок у рядках 9, 10, 11 та 12. Для цього в полі адресу Address вкажіть фізичну адресу розташування відповідної змінної out16, out12, out8 та out4 з карти пам’яті, а в полі розміру блока даних Lendth вкажіть 1. Запустіть програму на виконання в режимі анімації.

4. Через деякий час припиніть виконання програми. Для перегляду даних відкрийте згенеровані файли за допомогою програми MathLab або Exel. Побудуйте графіки та поясніть отримані результати.