Чтение данных со звуковой карты.

Alexey Antipin
28.01.2014 18:57:50
Как правило, процесс сбора данных с внешнего устройства состоит из следующих четырех этапов:
1.   Инициализация: создание объекта устройства.
2.   Настройка: добавление каналов и управление процессом сбора данных через параметры устройства.
3.   Выполнение: запуск устройства с последующим сбором или пересылкой данных.
4.   Завершение: удаление объекта устройства.



Чтобы убедиться, что основная частота камертона составляет 440 Гц, сигнал оцифровывается и передается  в MATLAB  для анализа. Это установка для примера описанного ниже.

В этом примере мы проверим, что основная (наименьшая) частота камертона составляет 440 Гц. Для этого будем использовать микрофон и звуковую карту, чтобы записать звуковые данные. А после применим к ним операцию БПФ и найдем частоты камертона.Начнем с записи двух секунд звукового сигнала на одном из каналов звуковой карты. Так как основная частота камертона составляет 440 Гц, то можно выбрать наименьшую частоту дискретизации равную 8000 Гц.
Затем установим камертон рядом с микрофоном, придадим ему вибрацию и запустим сбор данных. Данная сессия сбора данных описана ниже.

Инициализация.
Первый шагом создадим объект с аналоговым входом (AI) для звуковой карты.

Код
 AI = analoginput('winsound');

Настройка.
Затем добавим к AI один канал и установим частоту дискретизации 8000 Гц и время сбора данных 2 с.

Код
addchannel(AI, 1);
Fs = 8000;                     % Частота дискретизации 8000 Гц
set (AI, 'SampleRate', Fs)
duration = 2;                  % Сбор будет длиться 2 секунды
set(AI, 'SamplesPerTrigger', duration*Fs;

Сбор данных.
Теперь мы готовы начать сбор данных. По умолчанию, триггер устройства настроен на запуск по команде start. Перед этим нужно ударить по камертону, чтобы он начал вибрировать и издавать звук (свист будет также работать J).

Код
start(AI);

Чтобы списать все данные.
Код
data = getdata(AI);

Завершение работы с устройством.
Как только все данные получены, можно завершить сессию сбора данных, удалив объект AI из пространства переменных.

Код
delete(AI)

Обработка результатов.
Теперь определим частотные компоненты сигнала и отобразим результаты. Сначала рассчитаем абсолютное значение от БПФ данных.

Код
 xfft = abs(fft(data));

A затем преобразуем его в дБ и выделим реальные частотные компоненты.
Код
 mag = 20*log10(xfft);
 mag = mag(1:end/2);


Результаты показывают основную частоту около 440 Гц и первую гармонику около 880 Гц. Простейший путь найти основную частоту:
Код
[ymax,maxindex]=max(mag);

Ответ: 441 Гц.

Применение других видов оборудования.
Этот пример можно повторить и с другими устройствами, изменив всего две строчки кода. Например, возьмем многофункциональную карту от National Instruments и создадим для нее объект аналогового ввода:

Код
AI=analoginput('nidaq','Dev1');
addchannel(AI,0)

Аналогично, если бы мы использовали плату сбора данных компании Measurement Computing, наш код выглядел бы так:
Код
AI=analoginput('mcc',8);
addchannel(AI,1)
Просмотров: 7329
Комментариев: 0
Добавить комментарий
    Добавить комментарий