exponenta event banner

wavetableSynthesizer

Генерация периодического сигнала из одноцикловых сигналов

Описание

wavetableSynthesizer Система object™ генерирует периодический сигнал с настраиваемыми свойствами. Периодический сигнал определяется одноцикловой формой сигнала, кэшируемой как Wavetable собственность вашего wavetableSynthesizer объект.

Для формирования периодического сигнала:

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

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

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

Создание

Описание

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

waveSynth = wavetableSynthesizer(wavetableValue) устанавливает для свойства Wavetable значение wavetableValue.

waveSynth = wavetableSynthesizer(wavetableValue,frequencyValue) задает свойству Frequency значение frequencyValue.

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

Пример: waveSynth = wavetableSynthesizer('Amplitude',2,'DCOffset',2.5) создает объект System, waveSynth, который генерирует синусоидальный сигнал по умолчанию с амплитудой 2 и сдвигом постоянного тока 2,5.

Свойства

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

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

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

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

Одноцикловая форма сигнала, заданная как вектор вещественных значений. Алгоритм wavetableSynthesizer индексирует в одноступенчатую форму волны для синтеза периодической волны.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Описание

пример

waveform = waveSynth() генерирует периодический сигнал, waveform. Тип сигнала определяется алгоритмом и свойствами wavetableSynthesizer Системный объект, waveSynth.

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

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

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

Типы данных: 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 функции отображают настраиваемые свойства wavetableSynthesizer Системный объект для пользовательских параметров:

СобственностьДиапазонОтображениеЕдиница
Frequency[0.1, 20000]регистрацияHz
Amplitude[0, 10]линейныйничего
DCOffset[–10, 10]линейныйничего

Примеры

свернуть все

Определите и постройте график сигнала с одним циклом.

values = -1:0.1:1;
singleCycleWave = ones(100,1) * values;
singleCycleWave = reshape(singleCycleWave,numel(singleCycleWave),1);

plot(singleCycleWave)
xlabel('Index')
ylabel('Amplitude')

Figure contains an axes. The axes contains an object of type line.

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

waveSynth = wavetableSynthesizer(singleCycleWave,10);

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

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

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

counter = 0;
while (counter < 1e4)
    counter = counter + 1;
    staircaseWave = waveSynth();
    scope(staircaseWave)
    if mod(counter,1000)==0
        waveSynth.Frequency = waveSynth.Frequency + 10;
    end
end

Образец аудиофайла и сохраните его в Wavetable свойство wavetableSynthesizer object™ системы. Используйте синтезатор сигналов для управления образцом звука.

Чтение всего аудиофайла. Вырезать интересный звук из аудио и затем воспроизвести его.

[audio,fs] = audioread('MainStreetOne-16-16-mono-12secs.wav');

aSound = audio(2.5e4:5e4);
sound(aSound,fs)

Создайте синтезатор сигналов с помощью аудиоклипа. Продолжительность engine аудиоклип numel(aSound)/fs секунд. В wavetableSynthesizer, установите Frequency до 1/( длительность клипа). Сгенерированный сигнал теперь воспроизводится с той же скоростью, с которой он был записан.

duration = numel(aSound)/fs;
waveSynth = wavetableSynthesizer('Wavetable',aSound,'SampleRate',fs, ...
    'Frequency',1/duration);

Создание audioDeviceWriter для записи на аудиоустройство.

deviceWriter = audioDeviceWriter('SampleRate',fs);

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

timeElapsed = 0;
while timeElapsed < 9
    audioWave = waveSynth();
    deviceWriter(audioWave);
    
    if (timeElapsed > 3) && (timeElapsed < 6)
        waveSynth.Frequency = waveSynth.Frequency + 0.001;
    elseif timeElapsed > 6
        waveSynth.Frequency = waveSynth.Frequency - 0.002;
    end
    
    timeElapsed = timeElapsed + waveSynth.SamplesPerFrame*(1/fs);
end

Изменение Wavetable свойство wavetableSynthesizer объект при обработке потока. Визуализируйте сигнал и воспроизводите полученный звук.

Создание сигнала с одним циклом для wavetableSynthesizer для индексации в. Создайте объект синтезатора сигналов.

t = 0:0.001:1;
exponent = 5;
waveTable = [t.^exponent,fliplr(t.^exponent)] - 0.5;

waveSynth = wavetableSynthesizer('Wavetable',waveTable);

Создать dsp.ArrayPlot объект для построения графика сигнала при его изменении во времени. Создание audioDeviceWriter объект для прослушивания сигнала, выводимого вашим волновым синтезатором.

arrayPlotter = dsp.ArrayPlot('YLimits',[-1,1],'PlotType','Line');
deviceWriter = audioDeviceWriter;

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

tic
while toc < 10
    exponent = exponent - 0.01;
    waveSynth.Wavetable = [t.^abs(exponent),fliplr(t.^abs(exponent))] - 0.5;
    
    arrayPlotter(waveSynth.Wavetable')
    
    deviceWriter(waveSynth());
end

release(deviceWriter)

Создать wavetableSynthesizer для генерации формы сигнала. Создать timescope для визуализации формы сигнала. Создание audioDeviceWriter для записи звука на звуковую карту.

fs = 44.1e3;
wvSynth = wavetableSynthesizer('SampleRate',fs);

scope = timescope( ...
    'SampleRate',wvSynth.SampleRate, ...
    'TimeSpanSource','Property','TimeSpan',1, ...
    'YLimits',[-2,2], ...
    'TimeSpanOverrunAction','Scroll', ...
    'ShowGrid',true);

deviceWriter = audioDeviceWriter('SampleRate',wvSynth.SampleRate);

Звонить parameterTuner открытие пользовательского интерфейса для настройки параметров синтезатора сигналов во время потоковой передачи.

parameterTuner(wvSynth)

Figure Audio Parameter Tuner: wavetableSynthesizer [wvSynth] contains an object of type uigridlayout.

В цикле аудиопотока:

  1. Вызовите синтезатор сигналов без аргументов для вывода одного кадра данных.

  2. Визуализация данных с использованием области времени.

  3. Запишите кадр звука на аудиоустройство для прослушивания.

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

duration = 15;
numIterations = round(wvSynth.SampleRate*duration/wvSynth.SamplesPerFrame);
for i = 1:numIterations
    audioOut = wvSynth();
    scope(audioOut)
    deviceWriter(audioOut);
    drawnow limitrate % required to update parameter
end

Figure Audio Parameter Tuner: wavetableSynthesizer [wvSynth] contains an object of type uigridlayout.

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

release(deviceWriter)
release(wvSynth)
release(scope)

Алгоритмы

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

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

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

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