Сергиенко А.Б. Цифровая обработка сигналов (2002) (1095939), страница 32
Текст из файла (страница 32)
п. Узнать частоту дискретизации можно, используя при вызове функции второй выходной параметр: [у. гз] - иачгеаб('т)1епап)е'); При этом переменная гз получает значение, равное частоте дискретизации в герцах. Чтобы узнать, сколько уровней сигнала содержится в звуковом файле (точнее, число бит на отсчет), необходимо добавить третий выходной параметр: [у, гз. ))11з] - иачгеаб('т11епап)е'): Еще два параметра, которые часто хочется знать заранее, — это число отсчетов и каналов записи. Для получения данной информации нужно вызвать функцию иачгевб с двумя входными параметрами. Первый — это по-прежнему имя файла, вторым же должна быть текстовая строка ' з1хе".
изчез)ге - иачгеаб['т11епапе'. 'зтае'); В отличие от предыдущих вариантов вызова функции, в данном случае не производится считывания самих звуковых данных. Из тчач-файла лишь извлекается служебная информация, которая возвращается в виде двухэлементного вектора- строки (в приведенном примере — ивчез1хе).
Первый элемент вектора содержит число отсчетов, второй — число каналов. Наконец, имеется и важнейшая возможность считывания данных из тчач-файла не целиком, а отдельными фрагментами (без этого нельзя было бы работать с большими файлами). Для этого также используется второй входной параметр функции ивчгезб. Если этот параметр является числом, будет считано соответствующее количество отсчетов (начиная с первого): у - иачгеаб('т11епапе', й): Если же нужный фрагмент расположен не в начале файла, придется указать его начало и конец, В этом случае второй входной параметр функции иачгеаб должен представлять собой двухэлементный вектор: у - иачгеаб('т11епаяе'.
(п1 п2]); В результате в переменную у будут считаны отсчеты с номерами от п1 до п2 включительно (нумерация отсчетов, как и элементов матриц в МАТЕАВ, начинается с единицы). При этом считываются все каналы звукозаписи, Возможности считывания информации из отдельных каналов не предусмотрено. СОВЕТ Как видите, получить информацию о частоте дискретизации и числе бит на отсчет можно только одновременно со считыванием звуковых данных. Если необходимо получить зту информацию заранее, до основной работы со звуком, можно считать всего один отсчет: (у, Ез. о)сз] - иачгеаб['т11епаве'. 1): 180 Глава 3. дискретные сигналы Рассмотрим работу с тчач-файлами на конкретном примере.
Возьмем для этого бодрый аккорд сас)а.аач, входяший в стандартный набор звуков Ъ'1пг)отчз. Прежде всего узнаем число отсчетов и каналов: » иаче51ге = изчгеай('сЛи1пйси51иег)1а11аг)а', '51ге') иаче51те = 42752 2 Как видим, эта стереозапись (2 канала) содержит 42 752 отсчета. ЗАМЕЧАНИЕ В рассматриваемых примерах используется файл )аов.ччач, входящий в состав чч'1пбоччв 98. В Ъ%пдои5 95 этот файл был монофоническим (одноканальным) н имел меньшую частоту дискретизации. Только что приведенный вызов функции иачгеай вернет для него вектор 127459 1] (27 459 отсчетов н один канал). Далее извлекаем информацию о частоте дискретизации и числе бит на отсчет: » [у, Г5, 6115] - иачгезй'с:)и)п0еи5)ие01а11айа', 1) У = О 0 Г5 22050 Ь115 16 Полученные результаты очевидны — частота дискретизации 22,05 кГц, используется 16 бит на отсчет (65 536 уровней сигнала).
«В нагрузку» мы получили значения первого отсчета из обоих каналов (вектор у). Теперь мы можем узнать о файле кое-что еще, например определить продолжительность звучания. Для этого нужно разделить число отсчетов (первый элемент полученного ранее вектора иаче51хе) на частоту дискретизации Гз: » изче51ге( 1)/Г5 ап5 = 1.9389 Результат — длительность звука в секундах. Чтобы узнать, сколько памяти потребуется МАТ[.АВ для хранения всей записи, нужно перемножить число отсчетов и число каналов, а затем увеличить результат еще в 8 раз. Можно сразу же поделить полученное значение на 1024, чтобы получить ответ в килобайтах, или на 1024,, если ожидаемое число лучше изме- 2 рять мегабайтами: » ргсй(иаче51ге)*8/1024 ЗП5 668 Расход памяти оказывается вполне умеренным (668 Кбайт), так что мы можем позволить себе считать файл в память целиком (не забудьте про точку с запятой в конце строки): » у = иачгеаг)['с:1и1пПои5)л)е01а)1айа'): 181 Получение данных иэ внешних источников Теперь все содержимое файла считано в матрицу у.
Проверим ее размеры: » 512Е(У) 605 42752 2 Как видите, размеры совпадают с полученной ранее информацией о файле: 42 752 отсчета (строк), два канава (столбца). Чтобы «окинуть взглядом» звуковой сигнал, выведем его в виде графика — отдельно для правого и левого каналов стереозаписи, используя для этого функцию 50Ьр)01 (подробнее об использовании этой функции речь пойдет в разделе «Одновременный вывод нескольких графиков» приложения А): » 50Ьр101(2, 1.
1) » р101(у(:, 1)) » 5иЬр101(2. 1, 2) » р101(у(:, 2)) Результат показан на рис. 3.32. Имейте в виду, что из-за большого числа отсчетов для построения графика на медленном компьютере может потребоваться ощутимое время. 0.2 -0.2 -0.4 0 0,5 1 1.5 2 2.5 3 3.5 4 4.5 х10"' 0.4 0.2 -0.4 0 0.5 1 1.5 2 2.5 3 3.5 4 4,5 х10 Рис. 3.32. График звукового сигнала Если при выводе графика разрешение по горизонтали имеет большее значение, чем по вертикали, можно воспользоваться функцией 51Г1рз, специально предназначенной для отображения длинных сигналов в «нарезанном» на фрагменты виде (фрагменты выводятся друг под другом).
синтаксис вызова функции эьг1 рэ следующий: 51г)р5(х. М) Здесь х — вектор отсчетов сигнала (двумерные массивы не допускаются), й— число отсчетов в каждом фрагменте (этот параметр можно опустить, по умолчанию размер фрагмента составляет 200 отсчетов). Глава 3. Дискретныв сигналы В качестве примера выведем с помощью функции зтг1рз график первого (левого) канала сигнала 1аг(алчач (рис. 3.33): » з~г1рз(у(:,1), 10000) 10000 20000 30000 40000 0 2000 4000 6000 8000 10000 Рис. 3.33. График сигнала, выведенный с помощью функции в1прв Над помещенным в переменную МАТ).АВ звуковым сигналом можно выполнять любые преобразования, а затем воспроизвести полученный звук или сохранить его в виде нового тчач-файла.
Обо всем этом пойдет речь в нескольких следующих разделах. Можно также сохранить сигнал на диске как переменную МАТ1.АВ (в виде МАТ-файла) — см. раздел «Ввод и вывод данных» приложения А. Функция иачгеа0 не является встроенной — она целиком написана на языке МАТ).АВ с использованием средств работы с двоичными файлами. Если вас интересует структура тчач-файлов и организация их считывания, попробуйте разобраться в тексте функции иачгеай — файл ччачгеаг).т расположен в каталоге МАТ) АВВ12~Т001.ВОХ~МАТЫВ~А0010. МАТ).АВ умеет работать только с несжатыми ткач-файлами (формат РСМ).
При попытке считать файл, в котором использован какой-либо из методов сжатия информации, будет выдано сообщение «Пата сотргезгйоп (огщат (...) Ь пот зцрроггесЬ, ЗАМЕЧАНИЕ В МАТ1.АВ имеется также функция аптек, которая позволяет считывать звуковые файлы формата А(), используемого в основном на ()Х1Х-платформах ХеХТ и Я)Х. Запись иач-файлов Чтобы записать вектор (или матрицу) на диск в виде ччач-файла, используется функция натиг(те: начиг11е(у, Ез. й'.
'т1)епаае') 183 Получение данных из внешних источников Здесь у — записываемые данные (вектор для монофонической записи, двух- столбцовая матрица — для создания стереофайла), Гз — частота дискретизации в герцах, М вЂ” число бит на отсчет (8 или 16), ' Г11епаве' — имя создаваемого файла, Выходных параметров у данной функции нет. Параметры М и Гз можно опускать, при этом используются значения по умолчанию — М - 16 и Гз = 8000: натиг)ге(у, Е5.
'111епаее') начнг11е(у, '111епаее') Записываемые данные должны быть вещественными и лежать в диапазоне -1...1. Значения, выходящие из этого диапазона, будут «обрезаны» и сделаны равными х1. ЗАМЕЧАНИЕ В МАТЬАВ имеется также функция ацтчт! се, которая позволяет записывать звуковые файлы в формате АБ, используемом в основном на (Лч)1Х-платформах )ч(еХТ и 81)Ы, Воспроизведение звука Если ваш компьютер оборудован звуковой картой, то, помимо работы с тчачфайлами, вы имеете и возможность воспроизведения векторов и матриц в звуковом виде. Для этого имеются целых три функции — зоват), зоцпозс и мачр1ау, В простейшем случае все три функции вызываются одинаково и обеспечивают воспроизведение вектора у (или двухстолбцовой матрицы — для стереозвука), содержащего отсчеты сигнала, с заданной частотой дискретизации ез (в герцах); 5оцпо(у.
Г5) 5оцпо5с(у, Г5) начр!ау(у, Е5) Различие между этими функциями заключается в предоставляемых ими дополнительных возможностях. ФУНКЦИЯ ЗОиПб Функция зонов обеспечивает воспроизведение сигнала с заданными частотой дискретизации и числом уровней (бит на отсчет); 5оцпо(У. Е5. Ы15) Здесь у — вектор или двухстолбцовая матрица отсчетов сигнала, Гз — частота дискретизации в герцах,ыгз — число бит на отсчет (8 или 16), Параметры Ы15 и Гз можно опускать, при этом будут использоваться их значе- ния по умолчанию Гз 8192 и Ысз 16.