Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_06.doc
Скачиваний:
4
Добавлен:
07.09.2019
Размер:
432.13 Кб
Скачать

Лабораторна робота № 6 Тема: ”Дискретні сигнали в matlab. Одержання даних із зовнішніх джерел”

Перетворення аналогового сигналу в цифровий і назад — це процеси, що виконуються апаратними засобами. MATLAB же, будучи програмним продуктом, може лише взаємодіяти з відповідним устаткуванням (така взаємодія здійснюється, наприклад, за допомогою пакета Data Acquisition). Крім того, у MATLAB передбачені засоби для відтворення і запису звуку, а також для роботи зі звуковими файлами формату wav. У даному розділі ми докладно розглянемо зчитування і запис wav-файлів, а також відтворення звуку. Детально розглядати питання взаємодії з устаткуванням введення/виведення даних через обмежений обсяг книги не представляється можливим, тому наприкінці глави буде приведений лише короткий огляд можливостей і демонстраційних прикладів пакета Data Acquisition.

Читання wav-файлів

Для зчитування wav-файлів у MATLAB використовується функція wavread. У найпростішому випадку вона може бути використана наступним чином:

у = wavread(‘fllename');

Тут filename — ім'я звукового файлу (розширення .wav указувати не обов'язково). В ім'я файлу необхідно включити повний шлях, за винятком тих випадків, коли файл знаходиться в поточному (для MATLAB) каталозі або в одному з каталогів, що входять у список пошуку MATLAB.

У результаті виклику функції в змінну y буде поміщений увесь вміст зазначеного файлу. Рядки матриці у відповідають відлікам сигналу, стовпці — каналам, яких у wav-файлі може бути кілька.

УВАГА

Перш ніж викликати функцію wavread у найпростішій формі, подумайте, чи вистачить вашому комп'ютеру ресурсів, щоб зчитати wav-файл у пам'ять цілком, адже всього одна хвилина стереозапису звуку, зробленої з CD-якістю (частота дискретизації 44,1 КГц), містить 60 с х 44 100 Гц х 2 канали = 5 292 000 відліків. MATLAB представить ці відліки у форматі плаваючою комою, затративши на кожен відлік 8 байт (формат double). Таким чином, одна хвилина звуку займе в пам'яті 42 336 000 байт (приблизно 40 Мбайт). Але ж звукові файли бувають і довші...

ЗАУВАЖЕННЯ

Приведений рядок виклику функції зовсім не випадково закінчується крапкою з комою. Цей символ подавляє вивід результатів на екран. Якщо його забрати, ви побачите ряди чисел, що біжать по екрану — весь вміст матриці у. Як правило, вивід цієї інформації не представляє інтересу. Якщо ви все-таки забули поставити наприкінці рядка крапку з комою, нічого страшного. Просто перервіть вивід, натиснувши клавіші Ctrl+C. Сама команда в цей момент уже виконана, матриця у сформована — ви перериваєте тільки вивід інформації на екран.

У звукових файлах відліки сигналу представлені цілими числами, що лежать у діапазоні -128...+127 (8 біт на відлік) або -32 768...+32 767 (16 біт на відлік). MATLAB нормує ці значення, приводячи їх до діапазону -1...+1.

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

[у, Fs] = wavread('filename');

При цьому змінна Fs одержує значення, рівне частоті дискретизації в герцах.

Щоб довідатися, скільки рівнів сигналу утримується в звуковому файлі (точніше, число біт на відлік), необхідно додати третій вихідний параметр:

[у, Fs, bits] = wavread('filename');

Ще два параметри, що часто хочеться знати заздалегідь, — це число відліків і каналів запису. Для одержання даної інформації потрібно викликати функцію wavread із двома вхідними параметрами. Перший — це як і раніше ім'я файлу, другим же повинний бути текстовий рядок ' size':

wavesize = wavread( filename', 'size');

На відміну від попередніх варіантів виклику функції, у даному випадку не виробляється зчитування самих звукових даних. З wav-файлу лише витягається службова інформація, що повертається у вигляді двухелементного вектора-рядка (у приведеному прикладі — wavesize). Перший елемент вектора містить число відліків, другий — число каналів.

Нарешті, мається і найважливіша можливість зчитування даних з wav-файлу не цілком, а окремими фрагментами (без цього не можна було б працювати з великими файлами). Для цього також використовується другий вхідний параметр функції wavread. Якщо цей параметр є числом, буде зчитана відповідна кількість відліків (починаючи з першого):

у = wavread(‘filename', N):

Якщо ж потрібний фрагмент розташований не на початку файлу, прийдеться вказати його початок і кінець. У цьому випадку другий вхідний параметр функції wavread повинний являти собою двухелементний вектор:

у = wavread('filename', [n1 n2]);

У результаті в змінну у будуть зчитані відліки з номерами від nl до n2 включно (нумерація відліків, як і елементів матриць у MATLAB, починається з одиниці). При цьому зчитуються всі канали звукозапису. Можливості зчитування інформації з окремих каналів не передбачено.

ПОРАДА

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

[у, Fs, bits] = wavread('filename', 1);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]