exponenta event banner

audioOscillator

Генерация синусоидальных, квадратных и пилообразных сигналов

Описание

audioOscillator Система object™ генерирует настраиваемые формы сигналов. Типичные виды использования включают генерацию тестовых сигналов для испытательных стендов и генерацию управляющих сигналов для звуковых эффектов. Свойства audioOscillator Системный объект определяет тип генерируемого сигнала.

Для генерации настраиваемых форм сигнала:

  1. Создать audioOscillator и задайте его свойства.

  2. Вызовите объект с аргументами, как если бы это была функция.

Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.

Создание

Описание

osc = audioOscillator создает объект системы звуковых осцилляторов, osc, со значениями свойств по умолчанию.

osc = audioOscillator(signalTypeValue) устанавливает для свойства SignalType значение signalTypeValue.

osc = audioOscillator(signalTypeValue,frequencyValue) задает свойству Frequency значение frequencyValue.

osc = audioOscillator(___,Name,Value) задает каждое свойство Name к указанному Value. Неопределенные свойства имеют значения по умолчанию.

Пример: osc = audioOscillator('SignalType','sine','Frequency',8000,'DCOffset',1) создает объект System, osc, которая генерирует синусоиды 8 кГц со смещением постоянного тока, равным единице.

Свойства

развернуть все

Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.

Если свойство настраивается, его значение можно изменить в любое время.

Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.

Тип сигнала, генерируемого audioOscillator объект, указанный как 'sine', 'square', или 'sawtooth'.

Формы сигналов генерируются с использованием алгоритмов, заданных sin, square, и sawtooth функции.

Настраиваемый: Нет

Типы данных: char | string

Частота генерируемого сигнала в Гц, заданная как действительный скаляр или вектор действительных скаляров, больших или равных 0.

  • Для синусоидальных сигналов укажите Frequency как скаляр или как вектор длины NumTones.

  • Для квадратной формы сигнала укажите Frequency как скаляр.

  • Для пилообразных форм сигналов укажите Frequency как скаляр.

Настраиваемый: Да

Типы данных: single | double

Амплитуда генерируемого сигнала, заданная как действительный скаляр или вектор действительных скаляров, больших или равных 0.

  • Для синусоидальных сигналов укажите Amplitude как вектор длины NumTones.

  • Для квадратной формы сигнала укажите Amplitude как скаляр.

  • Для пилообразных форм сигналов укажите Amplitude как скаляр.

Генерируемый сигнал умножается на значение, указанное на Amplitude на выходе, перед применением DCOffset.

Настраиваемый: Да

Типы данных: single | double

Нормализованное фазовое смещение генерируемого сигнала, определяемое как действительный скаляр или вектор действительных скаляров со значениями в диапазоне [0, 1]. Диапазон представляет собой нормированный 2δ-радиановый интервал.

  • Для синусоидальных сигналов укажите PhaseOffset как вектор длины NumTones.

  • Для квадратной формы сигнала укажите PhaseOffset как скаляр.

  • Для пилообразных форм сигналов укажите PhaseOffset как скаляр.

Настраиваемый: Нет

Типы данных: single | double

Значение, добавляемое к каждому элементу генерируемой формы сигнала, определяемое как действительный скаляр или вектор действительных скаляров.

  • Для синусоидальных сигналов укажите DCOffset как вектор длины NumTones.

  • Для квадратной формы сигнала укажите DCOffset как скаляр.

  • Для пилообразных форм сигналов укажите DCOffset как скаляр.

Настраиваемый: Да

Типы данных: single | double

Количество тональных сигналов синусоидальной формы, суммированных и затем сформированных звуковым генератором.

Отдельные тональные сигналы генерируются на основе значений, указанных Frequency, Amplitude, PhaseOffset, и DCOffset.

Настраиваемый: Нет

Зависимости

Чтобы включить это свойство, установите SignalType в значение 'sine'.

Типы данных: single | double

Рабочий цикл квадратной формы сигнала, заданный как скаляр в диапазоне [0, 1].

Рабочий цикл квадратной формы сигнала представляет собой процент одного периода, в котором форма сигнала превышает среднюю амплитуду. A DutyCycle значение 1 или 0 эквивалентно смещению DC.

Настраиваемый: Да

Зависимости

Чтобы включить это свойство, установите SignalType в значение 'square'.

Типы данных: single | double

Ширина пилы, заданная как скаляр в диапазоне [0, 1].

Ширина пилообразной волны определяет точку в периоде формы пилообразной волны, в котором происходит максимум.

Настраиваемый: Да

Зависимости

Чтобы включить это свойство, установите SignalType в значение 'sawtooth'.

Типы данных: single | double

Число выборок на кадр, указанное как положительное целое число в диапазоне [1, 192000].

Это свойство определяет длину вектора, audioOscillator вывод объекта.

Настраиваемый: Да

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Частота дискретизации генерируемого сигнала в Гц, заданная как положительный скаляр, превышающий в два раза значение, заданное частотой.

Настраиваемый: Да

Типы данных: single | double

Тип данных генерируемого сигнала, указанный как 'double' или 'single'.

Настраиваемый: Да

Типы данных: char | string

Использование

Описание

пример

waveform = osc() генерирует выходной сигнал формы сигнала, waveform. Тип сигнала определяется алгоритмом и свойствами объекта System, osc.

Выходные аргументы

развернуть все

Выходной сигнал звукового генератора, возвращаемый в виде вектора столбца с длиной, заданной параметром SamplesPerFrame собственность.

Типы данных: single | double

Функции объекта

Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:

release(obj)

развернуть все

createAudioPluginClassСоздать класс аудиоплагинов, реализующий функциональность объекта System
parameterTunerНастройка параметров объекта во время потоковой передачи
configureMIDIНастройка соединений MIDI между аудиообъектом и контроллером MIDI
disconnectMIDIОтключить элементы управления MIDI от аудиообъекта
getMIDIConnectionsПолучение MIDI-соединений аудиообъекта
cloneСоздать повторяющийся объект System
isLockedОпределить, используется ли объект System
releaseДеблокирование ресурсов и разрешение изменений значений свойств объекта системы и входных признаков
resetСброс внутренних состояний объекта System
stepЗапустить алгоритм объекта System

createAudioPluginClass и configureMIDI функции отображают настраиваемые свойства audioOscillator Системный объект для пользовательских параметров:

СобственностьДиапазонОтображениеЕдиницы
Frequency[0.1, 20000]регистрацияHz
Amplitude[0, 10]линейныйнет единиц
DCOffset[–10, 10]линейныйнет единиц
DutyCycle (доступно при установке SignalType кому 'square')[0, 1]линейныйнет единиц
Width (доступно при установке SignalType кому 'sawtooth')[0, 1]линейныйнет единиц

Примеры

свернуть все

Используйте audioOscillator для генерации синусоидальной волны переменной частоты.

Создайте звуковой генератор для генерации синусоидальной волны. Используйте настройки по умолчанию.

osc = audioOscillator;

Создайте область времени для визуализации синусоидальной волны переменной частоты, генерируемой звуковым генератором.

scope = timescope( ...
    'SampleRate',osc.SampleRate, ...
    'TimeSpanSource','Property','TimeSpan',0.1, ...
    'YLimits',[-1.5,1.5], ...
    'TimeSpanOverrunAction','Scroll', ...
    'ShowGrid',true, ...
    'Title','Variable-Frequency Sine Wave');

Поместите звуковой генератор в контур аудиопотока. Увеличьте частоту синусоидальной волны с 50-Hz приращениями.

counter = 0;
while (counter < 1e4)
    counter = counter + 1;
    sineWave = osc();
    scope(sineWave);
    if mod(counter,1000)==0
        osc.Frequency = osc.Frequency + 50;
    end
end

Настройка частоты звукового генератора с регулярными интервалами для создания мелодии. Воспроизведение мелодии на устройстве вывода звука.

Создайте структуру для хранения значений частоты нот в мелодии.

notes = struct('C4',261.63,'E4',329.63,'G4sharp',415.30,'A4',440,'B4',493.88, ...
    'C5',523.25,'D5',587.25,'D5sharp',622.25,'E5',659.25,'Silence',0);

Создать audioOscillator и audioDeviceWriter объекты. Используйте настройки по умолчанию.

osc = audioOscillator;
aDW = audioDeviceWriter;

Создайте вектор с начальной мелодией Fur Elise.

melody = [notes.Silence notes.Silence,...
    notes.E5 notes.D5sharp notes.E5 notes.D5sharp notes.E5 notes.B4 ...
        notes.D5 notes.C5 notes.A4 notes.A4 notes.Silence ...
    notes.C4 notes.E4 notes.A4 notes.B4 notes.B4 notes.Silence ...
    notes.E4 notes.G4sharp notes.B4 notes.C5 notes.C5 notes.Silence];

Укажите длительность заметки в секундах. В цикле аудиопотока вызовите звуковой осциллятор и запишите звук на аудиоустройство. Обновите частоту звукового генератора в noteDuration время шаги, чтобы следовать мелодии. Рекомендуется по завершении деблокировать объекты.

noteDuration = 0.3;
      
i = 1;
tic
while i < numel(melody)
    tone = osc();
    aDW(tone);
    if toc >= noteDuration
        i = i + 1;
        osc.Frequency = melody(i);
        tic
    end
end

release(osc)
release(aDW)

Создайте фильтр нижних частот низкочастотного генератора (LFO) с помощью audioOscillator в качестве управляющего сигнала.

Создать dsp.AudioFileReader и audioDeviceWriter Системные объекты для чтения из аудиофайла и записи на аудиоустройство. Создайте объект фильтра biquad, чтобы применить фильтрацию нижних частот к звуковому сигналу.

fileReader = dsp.AudioFileReader('Filename','Engine-16-44p1-stereo-20sec.wav');
deviceWriter = audioDeviceWriter('SampleRate',fileReader.SampleRate);
lowpassFilter = dsp.BiquadFilter( ...
    'SOSMatrixSource','Input port', ...
    'ScaleValuesInputPort',false);

Создайте объект звукового генератора. Звуковой генератор управляет частотой отсечки фильтра нижних частот в контуре аудиопотока.

osc = audioOscillator('SignalType','sawtooth', ...
    'DCOffset',0.05, ...
    'Amplitude',0.03, ...
    'SamplesPerFrame',fileReader.SamplesPerFrame, ...
    'SampleRate',fileReader.SampleRate, ...
    'Frequency',5);

В цикле фильтруйте аудиосигнал через фильтр нижних частот. Запишите выходной сигнал на аудиоустройство.

while ~isDone(fileReader)
    audioIn    = fileReader();
    ctrlSignal = osc();
    [B,A]      = designVarSlopeFilter(48,ctrlSignal(end));
    audioOut   = lowpassFilter(audioIn,B,A);
    deviceWriter(audioOut);
end

Рекомендуется после завершения деблокирования объектов.

release(osc)
release(fileReader)
release(deviceWriter)

Для получения более полной реализации фильтра LFO см. аудиоплюгинепример. LFOFilter в коллекции примеров аудиоплагинов.

Расширенные возможности

.
Представлен в R2016a