audioOscillator

Сгенерируйте синус, квадрат и пилообразные формы волны

Описание

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

Сгенерировать настраиваемые формы волны:

  1. Создайте audioOscillator объект и набор его свойства.

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

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.

Создание

Описание

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) создает Системный объект, osc, который генерирует синусоиды на 8 кГц со смещением DC одного.

Свойства

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

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

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

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (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π-radian интервал.

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

  • Для квадратных форм волны задайте PhaseOffset как скаляр.

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

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

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

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

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

  • Для квадратных форм волны задайте DCOffset как скаляр.

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

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

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

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

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

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

Зависимости

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

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

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

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

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

Зависимости

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

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

Пилообразная ширина в виде скаляра в области значений [0, 1].

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

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

Зависимости

Чтобы включить это свойство, установите 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. Тип формы волны задан алгоритмом и свойствами Системного объекта, osc.

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

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

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

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

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

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

release(obj)

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

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

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

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

Примеры

свернуть все

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

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

osc = audioOscillator;

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

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

Поместите аудио генератор в цикл аудиопотока. Увеличьте частоту своей синусоиды с шагом на 50 Гц.

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;

Создайте вектор с начальной мелодией Фур Элис.

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) фильтр lowpass, с помощью audioOscillator как управляющий сигнал.

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

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

Создайте аудио объект генератора. Ваши аудио средства управления генератором частота среза lowpass просачиваются цикл аудиопотока.

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

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

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 см. audiopluginexample. LFOFilter в галерее Audio Plugin Example.

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

Смотрите также

|

Введенный в R2016a