Генерировать дискретные синусоидальные волны
dsp.SineWave Система object™ генерирует реальный или комплексный многоканальный синусоидальный сигнал с независимой амплитудой, частотой и фазой в каждом выходном канале.
Как для действительных, так и для комплексных синусоид свойства Амплитуда (Amplitude), Частота (Frequency) и Сдвиг фазы (PhaseOffset) могут быть скалярами или N векторами длины, где N - количество каналов на выходе. При указании хотя бы одного из этих свойств в качестве вектора длины N к каждому из N каналов применяются скалярные значения, заданные для других свойств.
Для формирования дискретно-временного синусоидального сигнала:
Создать dsp.SineWave и задайте его свойства.
Вызовите объект с аргументами, как если бы это была функция.
Дополнительные сведения о работе системных объектов см. в разделе Что такое системные объекты?.
создает синусоидальный объект, который генерирует синусоиду с действительными значениями с амплитудой 1, частотой 100 Гц и фазовым сдвигом 0. По умолчанию объект синусоидальной волны генерирует только одну выборку.sine = dsp.SineWave
создает синусоидальный объект с заданным значением каждого свойства. Заключите каждое имя свойства в отдельные кавычки. sine = dsp.SineWave(Name,Value)
создает синусоидальный объект со свойством Amplitude, равным sine = dsp.SineWave(amp,freq,phase,Name,Value)amp, свойство «Частота» имеет значение freq, свойство PhaseOffset имеет значение phaseи любые другие указанные свойства, для которых заданы указанные значения.
Если не указано иное, свойства не настраиваются, что означает невозможность изменения их значений после вызова объекта. Объекты блокируются при их вызове, и release функция разблокирует их.
Если свойство настраивается, его значение можно изменить в любое время.
Дополнительные сведения об изменении значений свойств см. в разделе Проектирование системы в MATLAB с использованием системных объектов.
Amplitude - Амплитуда синусоидальной волны1 (по умолчанию) | скаляр | векторАмплитуда синусоидальной волны, определяемая как одно из следующих значений:
scalar -- скаляр применяется ко всем каналам.
Вектор - вектор длины - N содержит амплитуды синусоидальных волн в каждом из N выходных каналов. Длина вектора должна совпадать со значением, указанным для свойств Frequency и PhaseOffset.
Настраиваемый: Да
Это свойство можно настроить, только если для свойства Method задано значение 'Trigonometric function' или 'Differential'.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
Frequency - Частота синусоидальной волны100 (по умолчанию) | скаляр | векторЧастота синусоидальной волны в Гц, определяемая как одно из следующих значений:
scalar -- скаляр применяется ко всем каналам.
Вектор - вектор длины - N содержит частоты синусоидальных волн в каждом из N выходных каналов. Длина вектора должна быть такой же, как заданная для свойств Amplitude и PhaseOffset.
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
PhaseOffset - Фазовое смещение синусоидальной волны0 (по умолчанию) | скаляр | векторФазовое смещение синусоидальной волны в радианах, указанное как одно из следующих значений:
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
ComplexOutput - Флаг, указывающий, является ли сигнал реальным или сложнымfalse (по умолчанию) | trueФлаг, указывающий, является ли форма сигнала действительной или сложной, определяется следующим образом:
false - Выходной сигнал формы сигнала является реальным.
true - Выходной сигнал сигнала сложен.
Method - Метод, используемый для генерации синусоид'Trigonometric function' (по умолчанию) | 'Table lookup' | 'Differential'Метод, используемый для генерации синусоид, указанный как один из следующих:
'Trigonometric function' - Объект вычисляет синусоиду путем выборки функции непрерывного времени.
'Table lookup' - Объект предварительно вычисляет уникальные выборки каждой выходной синусоиды в начале моделирования и по мере необходимости отзывает выборки из памяти.
'Differential' - Объект использует пошаговый алгоритм. Этот алгоритм вычисляет выходные выборки на основе выходных значений, вычисленных в предыдущее время выборки и предварительно вычисленных терминов обновления.
TableOptimization - Оптимизация таблицы значений синусов для скорости или памяти'Speed' (по умолчанию) | 'Memory'Оптимизация таблицы значений синусов для скорости или памяти, указанных как:
'Speed' - Таблица содержит k элементов, где k - количество входных выборок за один полный период синусоидальной волны. Период каждой синусоиды должен быть целым кратным 1/Fs, где Fs - значение свойства SampleRate. То есть каждый элемент свойства Frequency должен иметь вид Fs/m, где m - целое число, большее, чем 1.
'Memory' - Таблица содержит k/4 элементов.
Это свойство применяется только при установке Method свойство для 'Table lookup'.
SampleRate - Частота дискретизации выходного сигнала1000 (по умолчанию) | положительный скалярЧастота дискретизации выходного сигнала в Гц, заданная как положительный скаляр.
Пример: 44100
Пример: 22050
SamplesPerFrame - Количество выборок на кадр1 (по умолчанию) | положительное целое числоКоличество последовательных выборок от каждой синусоиды для буферизации в выходной кадр, указанное как положительное целое число.
Пример: 1000
Пример: 5000
Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
OutputDataType - Тип данных синусоидального выхода'double' (по умолчанию) | 'single' | 'Custom'Тип данных синусоидального выхода, указанный как 'double', 'single', или 'Custom'.
CustomOutputDataType - Длина выходного слова и дробиnumerictype([],16) (по умолчанию) | numerictype([],32,30)Выходные длины слов и дробей, определяемые как автоматически назначаемый числовой тип с длиной слова 16.
Пример: числовой тип ([], 32,30)
Пример: числовой тип ([], 16,15)
Это свойство применяется только при установке для свойства Method значения 'Table lookup' и свойство OutputDataType для 'Custom'.
sineOut - Синусоидальный выходСинусоидальный выходной сигнал, возвращаемый в виде вектора или матрицы. Свойство PerperFrame определяет количество строк в выходной матрице. Если свойство Frequency или PhaseOffset является вектором, длина вектора определяет количество столбцов (каналов) в выходной матрице. Если Frequency или PhaseOffset свойства - скаляр, то число каналов в выходной матрице равно 1.
Свойство OutputDataType задает тип данных вывода.
Типы данных: single | double | fi
Чтобы использовать функцию объекта, укажите объект System в качестве первого входного аргумента. Например, для освобождения системных ресурсов объекта System с именем obj, используйте следующий синтаксис:
release(obj)
Примечание.При использовании R2016a или более ранней версии замените каждый вызов объекта эквивалентным step синтаксис. Например, obj(x) становится step(obj,x).
Генерация синусоидальной волны с амплитудой 2, частотой 10 Гц и начальной фазой 0.
sine1 = dsp.SineWave(2,10); sine1.SamplesPerFrame = 1000; y = sine1(); plot(y)

Создайте две синусоидальные волны, смещенные на фазу pi/2 радиан.
sine2 = dsp.SineWave; sine2.Frequency = 10; sine2.PhaseOffset = [0 pi/2]; sine2.SamplesPerFrame = 1000; y = sine2(); plot(y)

В этом примере показано, как фильтровать шумные сигналы нижних частот в MATLAB и визуализировать исходные и отфильтрованные сигналы с помощью анализатора спектра. Пример Simulink см. в разделе Фильтрация кадров шумного синусоидального сигнала в Simulink.
Указать источник сигнала
Входной сигнал представляет собой сумму двух синусоидальных волн с частотами 1 кГц и 10 кГц. Частота дискретизации составляет 44,1 кГц.
Sine1 = dsp.SineWave('Frequency',1e3,'SampleRate',44.1e3); Sine2 = dsp.SineWave('Frequency',10e3,'SampleRate',44.1e3);
Создать фильтр нижних частот
Фильтр FIR нижних частот, dsp.LowpassFilterразрабатывает фильтр нижних частот FIR минимального порядка с использованием обобщенного алгоритма проектирования фильтра FIR Ремеза. Установите частоту полосы пропускания 5000 Гц, а частоту полосы останова 8000 Гц. Пульсация полосы пропускания составляет 0,1 дБ, а затухание полосы останова - 80 дБ.
FIRLowPass = dsp.LowpassFilter('PassbandFrequency',5000,... 'StopbandFrequency',8000);
Создать анализатор спектра
Настройте анализатор спектра для сравнения спектров мощности исходных и отфильтрованных сигналов. Единицы спектра - дБм.
SpecAna = dsp.SpectrumAnalyzer('PlotAsTwoSidedSpectrum',false, ... 'SampleRate',Sine1.SampleRate, ... 'NumInputPorts',2,... 'ShowLegend',true, ... 'YLimits',[-145,45]); SpecAna.ChannelNames = {'Original noisy signal','Low pass filtered signal'};
Укажите образцы для каждого кадра
В этом примере используется обработка на основе кадров, при которой данные обрабатываются по одному кадру за раз. Каждый кадр данных содержит последовательные выборки из независимого канала. Обработка на основе кадров является выгодной для многих приложений обработки сигналов, поскольку можно обрабатывать несколько выборок одновременно. Буферизация данных в кадры и обработка многопрофильных кадров данных позволяет увеличить вычислительное время алгоритмов обработки сигналов. Установите количество выборок на кадр равным 4000.
Sine1.SamplesPerFrame = 4000; Sine2.SamplesPerFrame = 4000;
Фильтрация шумового синусоидального сигнала
Добавьте нулевое среднее значение белого гауссова шума со стандартным отклонением 0,1 к сумме синусоидальных волн. Фильтрация результата с помощью фильтра FIR. Во время моделирования анализатор спектра показывает, что частоты выше 8000 Гц в сигнале источника ослаблены. Результирующий сигнал поддерживает пик на частоте 1 кГц, поскольку он падает в полосе пропускания фильтра нижних частот.
for i = 1 : 1000 x = Sine1()+Sine2()+0.1.*randn(Sine1.SamplesPerFrame,1); y = FIRLowPass(x); SpecAna(x,y); end release(SpecAna)

Полосовой фильтр - дискретно-временной синусоидальный сигнал, состоящий из трех синусоид на частотах 1 кГц, 10 кГц и 15 кГц.
Создайте полосовой фильтр FIR Equiripple, сначала создав объект спецификации конструкции полосового фильтра, а затем сконструировав фильтр с использованием этих спецификаций.
Расчетный полосовой фильтр
Создание объекта спецификации конструкции полосового фильтра с помощью fdesign.bandpass.
bandpassSpecs = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', ... 1/4,3/8,5/8,6/8,60,1,60);
Перечислите доступные методы конструирования для этого объекта.
designmethods(bandpassSpecs)
Design Methods for class fdesign.bandpass (Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2): butter cheby1 cheby2 ellip equiripple kaiserwin
Для проектирования фильтра Equiripple выберите 'equiripple'.
bpFilter = design(bandpassSpecs,'equiripple','Systemobject',true)
bpFilter =
dsp.FIRFilter with properties:
Structure: 'Direct form'
NumeratorSource: 'Property'
Numerator: [1x37 double]
InitialConditions: 0
Show all properties
Визуализация частотной характеристики проектируемого фильтра.
fvtool(bpFilter,'Fs',44100)
Создание синусоидального сигнала
Создайте сигнал, который представляет собой сумму трех синусоид с частотами 1 кГц, 10 кГц и 15 кГц. Инициализируйте анализатор спектра для просмотра исходного сигнала и отфильтрованного сигнала.
Sine1 = dsp.SineWave('Frequency',1e3,'SampleRate',44.1e3,'SamplesPerFrame',4000); Sine2 = dsp.SineWave('Frequency',10e3,'SampleRate',44.1e3,'SamplesPerFrame',4000); Sine3 = dsp.SineWave('Frequency',15e3,'SampleRate',44.1e3,'SamplesPerFrame',4000); SpecAna = dsp.SpectrumAnalyzer('PlotAsTwoSidedSpectrum',false, ... 'SampleRate',Sine1.SampleRate, ... 'NumInputPorts',2,... 'ShowLegend',true, ... 'YLimits',[-240,45]); SpecAna.ChannelNames = {'Original noisy signal','Bandpass filtered signal'};
Синусоидальный сигнал фильтра
Фильтрация синусоидального сигнала с помощью разработанного полосового фильтра. Просмотрите исходный сигнал и отфильтрованный сигнал в анализаторе спектра. Тональный сигнал на частоте 1 кГц отфильтровывается и ослабляется. Тональный сигнал на частоте 10 кГц не изменяется, и тональный сигнал на частоте 15 кГц слегка ослабляется, поскольку он появляется в переходной полосе фильтра.
for i = 1 : 1000 x = Sine1()+Sine2()+Sine3(); y = bpFilter(x); SpecAna(x,y); end release(SpecAna)

Действительная дискретная синусоида определяется как:
2āfn + start)
где A - это амплитуда, f - частота в Гц, а (в радианах) - начальная фаза, или фазовый сдвиг.
Комплексная синусоида определяется как:
2āfn +
Метод тригонометрической функции вычисляет синусоиду в i-ом канале, yi, путем выборки непрерывной функции.
(комплекс)
с периодом Ts, где указывается Ts во времени выборки.
В каждый момент времени выборки алгоритм оценивает синусоидальную функцию в соответствующем значении времени в пределах первого цикла синусоиды. Ограничивая тригонометрические оценки первым циклом каждой синусоиды, алгоритм избегает неточности вычисления синуса очень больших чисел. Это ограничение также исключает возможность нарушения непрерывности во время расширенных операций, когда абсолютная переменная времени может перетекать. Таким образом, этот метод позволяет избежать требований к памяти метода поиска таблицы за счет многих других операций с плавающей запятой.
Метод поиска в таблице предварительно вычисляет уникальные выборки каждой выходной синусоиды в начале моделирования и при необходимости возвращает выборки из памяти. Поскольку таблица конечной длины может быть построена только при повторении всех выходных последовательностей, способ требует, чтобы период каждой синусоиды на выходе был равномерно разделен на период выборки. То есть 1/( fIts) = ki должно быть целым значением для каждого канала i = 1, 2,..., N.
Когда алгоритм оптимизирует таблицу значений синуса для Speedтаблица, построенная для каждого канала, содержит элементы ki. Когда оптимизация для Memoryтаблица, построенная для каждого канала, содержит элементы ki/4.
Для длинных выходных последовательностей метод поиска таблицы требует гораздо меньше операций с плавающей запятой, чем любой из других методов. Однако способ может требовать значительно больше памяти, особенно для высоких скоростей выборки (длинные таблицы). Этот метод рекомендуется для моделей, предназначенных для эмуляции или генерации кода для аппаратных средств DSP, которые должны быть оптимизированы для скорости выполнения.
Примечание
Таблица подстановки для этого объекта построена из значений с плавающей запятой двойной точности. При использовании Table Lookup режим вычисления, максимальное значение точности, которое вы можете достичь на выходе, составляет 53 бита. Установка в качестве длины слова типа выходных данных значений, превышающих 53 бита, не повышает точность вывода.
Дифференциальный метод использует пошаговый алгоритм. Этот алгоритм вычисляет выходные выборки на основе выходных значений, вычисленных в предыдущее время выборки (и предварительно вычисленных терминов обновления), используя следующие идентификаторы.
cos (Ts) − sin (t) sin (Ts)
Уравнения обновления для синусоиды в i-ом канале, yi, поэтому могут быть записаны в матричной форме как
(2.dfit + (i) cos (2.dfit + (i))]
где в примере времени указывается Ts. Поскольку Ts является константой, правосторонняя матрица является константой и может быть вычислена один раз в начале моделирования. Затем вычисляют значение Aisin [2.dfi (t + Ts) + (i)] из значений sin (2.dfit + (i)) и cos (2.dfit + (i)) путем простого умножения матрицы на каждом временном шаге.
Этот режим обеспечивает уменьшенную вычислительную нагрузку, но подвержен дрейфу во времени из-за кумулятивной ошибки квантования. Поскольку метод не зависит от абсолютного значения времени, нет опасности нарушения непрерывности во время расширенных операций, когда абсолютная переменная времени может переполниться.
Примечания и ограничения по использованию:
У этого объекта нет настраиваемых свойств для создания кода.
См. Системные объекты в создании кода MATLAB (кодер MATLAB).
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.