• Регистрация
Sancho
Sancho +69.25
н/д

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

30.04.2019

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

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

 


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

 

Инициализация
Первый шагом создадим объект с аналоговым входом (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)

Теги

    30.04.2019

    Комментарии