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

Вправа 1

Розглянемо роботу з wav-файлами на конкретному прикладі. Візьмемо для цього бадьорий акорд tada.wav, що входить у стандартний набір звуків Windows.

Насамперед довідаємося число відліків і каналів:

» wavesize = wavread('c:\windows\media\tada','size')

wavesize =42752 2

Як бачимо, цей стереозапис (2 канали) містить 42 752 відліків.

Зауваження

У розглянутих вправах і прикладах використовується файл tada.wav, що входить до складу Windows 98. У Windows 95 цей файл був монофонічним (одноканальним) і мав меншу частоту дискретизації.

Далі витягаємо інформацію про частоту дискретизації і число біт на відлік:

» [у, Fs, bits] = wavread('c:\windows\media\tada', 1)

y=

  1. 0

Fs =

22050

bits =

16

Отримані результати очевидні — частота дискретизації 22,05 КГц, використовується 16 біт на відлік (65 536 рівнів сигналу). «У навантаження» ми одержали значення першого відліку з обох каналів (вектор у).

Тепер ми можемо довідатися про файл дещо ще, наприклад визначити тривалість звучання. Для цього потрібно розділити число відліків (перший елемент отриманого раніше вектора wavesize) на частоту дискретизації Fs:

» wavesize(1)./Fs

ans =

1.9389

Результат — тривалість звуку в секундах.

Щоб довідатися, скільки пам'яті буде потрібно MATLAB для збереження всього запису, потрібно перемножити число відліків і число каналів, а потім збільшити результат ще в 8 разів. Можна відразу ж поділити отримане значення на 1024, щоб одержати відповідь у кілобайтах, або на 10242, якщо очікуване число краще вимірювати мегабайтами:

» prod(wavesize)*8/1024

ans =

668

Витрата пам'яті виявляється цілком помірним (668 Кбайт), так що ми можемо дозволити собі зчитати файл у пам'ять цілком (не забудьте про крапку з комою наприкінці рядка):

» у = wavread('c:\windows\media\tada');

Тепер весь уміст файлу лічений у матрицю в. Перевіримо її розміри:

» size(y)

ans =

42752 2

Як бачите, розміри співпадають з отриманою раніше інформацією про файл: 42 752 відліку (рядків), два канали (стовпця).

Щоб «оглянути поглядом» звуковий сигнал, виведемо його у вигляді графіка — окремо для правого і лівого каналів стереозапису, використовуючи для цього функцію subplot :

» subplot(2, 1, 1)

» plot(y(:, 1))

» subplot(2, 1,)

» plot(y(:, 2))

Результат показаний на мал. 6.1. Майте на увазі, що через велике число відліків для побудови графіка на повільному комп'ютері може знадобитися час.

Рис. 6.1. Графік звукового сигналу

Якщо при виводу графіка розширення по горизонталі має більше значення, чим по вертикалі, можна скористатися функцією strips, спеціально призначеною для відображення довгих сигналів у «нарізаному» на фрагменти виді (фрагменти виводяться друг під другом). Синтаксис виклику функції strips наступний: strips(x, N)

Тут х — вектор відліків сигналу (двовимірні масиви не допускаються), N — число відліків у кожному фрагменті (цей параметр можна опустити, за замовчуванням розмір фрагмента складає 200 відліків).

Як приклад виведемо за допомогою функції strips графік першого (лівого) каналу сигналу tada.wav (мал. 6.2):

» strips(y(:,1), 10000)

Рис. 6.2. Графік сигналу, виведений за допомогою функції strips

Над поміщеним у змінну MATLAB звуковим сигналом можна виконувати будь-яке перетворення, а потім відтворити отриманий звук або зберегти його у виді нового wav-файлу. Про все це піде мова в декількох наступних розділах. Можна також зберегти сигнал на диску як змінну MATLAB (у виді МАТ-файлу).

Функція wavread не є вбудованою — вона цілком написана мовою MATLAB з використанням засобів роботи з двоїчними файлами. Якщо вас цікавить структура wav-файлів і організація їхнього зчитування, спробуйте розібратися в тексті функції wavread — файл wavread.m розташований у каталозі MATLAR12\TOOLBOX\MATLAB\AUDIO.

MATLAB вміє працювати тільки з незжатими wav-файлами (формат РСМ). При спробі зчитати файл, у якому використаний який-небудь з методів стиску інформації, буде видане повідомлення «Data compression format (...) is not supported».

ЗАУВАЖЕННЯ

У MATLAB мається також функція auread, що дозволяє зчитувати звукові файли формату AU, використовуваного в основному на UNIX-платформах NeXT і SUN.

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