audioOscillator

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

Описание

The 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) создает Системный объект, 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].

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

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

Зависимости

Чтобы включить это свойство, установите 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.

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

расширить все

Сигнал выхода от аудио генератора, возвращенный как вектор-столбец с длиной, заданной 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]журнал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) lowpass фильтра, используя audioOscillator как сигнал управления.

Создание dsp.AudioFileReader и audioDeviceWriter Системные объекты для чтения с аудио файла и записи в аудио устройство. Создайте объект биквадного фильтра, чтобы применить 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