Сгенерируйте дискретную синусоиду
dsp.SineWave
Система object™ генерирует действительный или комплексный, многоканальный синусоидальный сигнал с независимой амплитудой, частотой и фазой в каждом выходном канале.
И для действительных и для комплексных синусоид, Амплитуды, Частоты и свойств PhaseOffset могут быть скаляры или векторы длины-N, где N является количеством каналов в выходе. Когда вы задаете по крайней мере одно из этих свойств как вектор длины-N, скалярные значения, заданные для других свойств, применяются к каждому из каналов N.
Сгенерировать дискретное время синусоидальный сигнал:
Создайте dsp.SineWave
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.
создает объект синусоиды, который генерирует синусоиду с действительным знаком с амплитудой 1, частотой 100 Гц и смещением фазы 0. По умолчанию объект синусоиды генерирует только одну выборку.sine
= dsp.SineWave
создает объект синусоиды с каждым заданным набором свойств к заданному значению. Заключите каждое имя свойства в одинарные кавычки. sine
= dsp.SineWave(Name,Value
)
создает объект синусоиды с Амплитудным набором свойств к sine
= dsp.SineWave(amp,freq,phase,Name,Value
)amp
, Набор свойств частоты к freq
, Набор свойств PhaseOffset к phase
, и anyother задал набор свойств к заданным значениям.
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их и release
функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).
Amplitude
— Амплитуда синусоиды
(значение по умолчанию) | скаляр | векторАмплитуда синусоиды в виде одного из следующего:
скаляр – скаляр применяется ко всем каналам.
вектор – вектор длины-N содержит амплитуды синусоид в каждом N каналы выхода. Длина вектора должна быть эквивалентной, который задал для свойств Frequency и PhaseOffset.
Настраиваемый: да
Это свойство является настраиваемым только когда вы метод установки для любого 'Trigonometric function'
или 'Differential'
.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
Frequency
— Частота синусоиды
(значение по умолчанию) | скаляр | векторЧастота синусоиды в Гц в виде одного из следующего:
скаляр – скаляр применяется ко всем каналам.
вектор – вектор длины-N содержит частоты синусоид в каждом N каналы выхода. Длина вектора должна быть эквивалентной, который задал для свойств Amplitude и PhaseOffset.
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
PhaseOffset
— Смещение фазы синусоиды
(значение по умолчанию) | скаляр | векторСмещение фазы синусоиды в радианах в виде одного из следующего:
скаляр – скаляр применяется ко всем каналам.
вектор – вектор длины-N содержит смещения фазы синусоид в каждом N каналы выхода. Длина вектора должна быть эквивалентной, который задал для свойств Amplitude и Frequency.
Типы данных: 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
— Частота дискретизации выходного сигнала
(значение по умолчанию) | положительная скалярная величинаЧастота дискретизации выходного сигнала в Гц в виде положительной скалярной величины.
Пример: 44100
Пример: 22050
SamplesPerFrame
— Количество выборок на систему координат
(значение по умолчанию) | положительное целое числоКоличество последовательных выборок от каждой синусоиды, чтобы буферизовать в выход структурирует в виде положительного целого числа.
Пример: 1000
Пример: 5000
Типы данных: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputDataType
— Тип данных синусоиды выводится'double'
(значение по умолчанию) | 'single'
| 'Custom'
Тип данных синусоиды выводится в виде 'double'
единственный
, или 'Custom'
.
CustomOutputDataType
— Выведите слово и дробные длиныnumerictype([],16)
(значение по умолчанию) | numerictype([],32,30)
Выведите слово и дробные длины в виде числового типа автосо знаком с размером слова 16.
Пример: numerictype ([], 32,30)
Пример: numerictype ([], 16,15)
Это свойство применяется только, когда вы устанавливаете свойство Method на 'Table lookup'
и свойство OutputDataType к 'Custom'
.
sineOut
— Sine wave выводитсяSine wave выходной параметр, возвращенный как вектор или матрица. Свойство SamplesPerFrame определяет количество строк в выходной матрице. Если Частота или свойство PhaseOffset являются вектором, длина вектора определяет количество столбцов (каналы) в выходной матрице. Если Frequency
или PhaseOffset
свойства являются скаляром, затем количество каналов в выходной матрице равняется 1.
Наборы свойств OutputDataType тип данных выхода.
Типы данных: single
| double
| fi
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием 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)
Сгенерируйте две синусоиды, возмещенные фазой радианов пи/2.
sine2 = dsp.SineWave; sine2.Frequency = 10; sine2.PhaseOffset = [0 pi/2]; sine2.SamplesPerFrame = 1000; y = sine2(); plot(y)
В этом примере показано, как к lowpass фильтруют сигнал с шумом в MATLAB и визуализируют исходные и отфильтрованные сигналы с помощью спектра анализатор. Для версии Simulink этого примера смотрите Системы координат Фильтра Шумного Синусоидального сигнала в Simulink.
Задайте источник сигнала
Входной сигнал является суммой двух синусоид с частотами 1 кГц и 10 кГц. Частота дискретизации составляет 44,1 кГц.
Sine1 = dsp.SineWave('Frequency',1e3,'SampleRate',44.1e3); Sine2 = dsp.SineWave('Frequency',10e3,'SampleRate',44.1e3);
Создайте фильтр Lowpass
КИХ-фильтр lowpass, dsp.LowpassFilter
, проектирует КИХ минимального порядка фильтр lowpass с помощью обобщенного КИХ-алгоритма создания фильтра Remez. Установите частоту полосы пропускания на 5 000 Гц и частоту полосы задерживания к 8 000 Гц. Неравномерность в полосе пропускания составляет 0,1 дБ, и затухание в полосе задерживания составляет 80 дБ.
FIRLowPass = dsp.LowpassFilter('PassbandFrequency',5000,... 'StopbandFrequency',8000);
Создайте Анализатор Спектра
Настройте спектр анализатор, чтобы сравнить спектры мощности исходных и отфильтрованных сигналов. Модули спектра являются dBm.
SpecAna = dsp.SpectrumAnalyzer('PlotAsTwoSidedSpectrum',false, ... 'SampleRate',Sine1.SampleRate, ... 'NumInputPorts',2,... 'ShowLegend',true, ... 'YLimits',[-145,45]); SpecAna.ChannelNames = {'Original noisy signal','Low pass filtered signal'};
Задайте выборки на систему координат
Этот пример использует основанную на системе координат обработку, где данные обрабатываются один кадр за один раз. Каждая система координат данных содержит последовательные выборки от независимого канала. Основанная на системе координат обработка выгодна для многих приложений обработки сигналов, потому что можно обработать несколько выборок целиком. Путем буферизации данных в системы координат и обработки мультидемонстрационных кадров данных, можно улучшить вычислительное время алгоритмов обработки сигналов. Определите номер выборок на систему координат к 4 000.
Sine1.SamplesPerFrame = 4000; Sine2.SamplesPerFrame = 4000;
Отфильтруйте шумный синусоидальный сигнал
Добавьте нулевой средний белый Гауссов шум со стандартным отклонением 0,1 к сумме синусоид. Отфильтруйте результат с помощью КИХ-фильтра. При выполнении симуляции спектр анализатор показывает, что частоты выше 8 000 Гц в исходном сигнале ослабляются. Получившийся сигнал обеспечивает пик на уровне 1 кГц, потому что это падает в полосе пропускания фильтра lowpass.
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 кГц.
Спроектируйте КИХ полосовой фильтр 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)
Синусоида дискретного времени с действительным знаком задана как:
где A является амплитудой, f является частотой в Гц, и φ является начальной фазой или смещением фазы, в радианах.
Комплексная синусоида задана как:
Метод тригонометрической функции вычисляет синусоиду в канале ith, yi, путем выборки непрерывной функции
с периодом Ts, где вы задаете Ts в шаге расчета.
В каждом шаге расчета алгоритм оценивает синусоидальную функцию при значении подходящего времени в первом цикле синусоиды. Путем ограничения тригонометрических оценок к первому циклу каждой синусоиды алгоритм избегает неточности вычисления синуса очень больших количеств. Это ограничение также устраняет возможность разрыва во время расширенных операций, когда абсолютное время переменное переполнение силы. Этот метод поэтому избегает требований памяти метода поиска по таблице за счет операций намного более с плавающей точкой.
Метод поиска по таблице предварительно вычисляет уникальные выборки каждой выходной синусоиды в начале симуляции и вспоминает выборки из памяти по мере необходимости. Поскольку таблица конечной длины может только быть создана, когда все выходное повторение последовательностей, метод требует, чтобы период каждой синусоиды в выходе был равномерно делимым к периоду расчета. Таким образом, 1 / (подгонки) = ki должен быть целочисленным значением для каждого канала i = 1, 2..., N.
Когда алгоритм оптимизирует таблицу значений синуса для Speed
, таблица, созданная для каждого канала, содержит ki элементы. Когда оптимизация для Memory
, таблица, созданная для каждого канала, содержит ki/4 элементы.
Для длинных выходных последовательностей метод поиска по таблице требует гораздо меньшего количества операций с плавающей точкой, чем любой из других методов. Однако метод может потребовать значительно большей памяти, специально для высоких частот дискретизации (длинные таблицы). Этот метод рекомендуется для моделей, которые предназначаются, чтобы эмулировать или сгенерировать код для оборудования DSP, которое должно быть оптимизировано для скорости выполнения.
Интерполяционная таблица для этого объекта создается из значений с плавающей точкой с двойной точностью. Когда вы используете Table Lookup
режим расчета, максимальная сумма точности, которой можно достигнуть в выходе, составляют 53 бита. Установка размера слова типа выходных данных к значениям, больше, чем 53 бита, не улучшает точность вашего выхода.
Дифференциальный метод использует инкрементный алгоритм. Этот алгоритм вычисляет выходные выборки на основе выходных значений, вычисленных в предыдущем шаге расчета (и предварительно вычисленные условия обновления) путем использования следующих тождеств.
Уравнения обновления для синусоиды в канале ith, yi, могут поэтому быть написаны в матричной форме как
где вы задаете Ts в шаге расчета. Поскольку Ts является постоянным, правая матрица является константой и может быть вычислена однажды в начале симуляции. Значение Aisin [2πfi (t+Ts) + ϕi] затем вычисляется из значений sin (2πfit +ϕi) и because(2πfit +ϕi) простым умножением матриц на каждом временном шаге.
Этот режим предложения уменьшал вычислительную загрузку, но подвергается дрейфу в зависимости от времени из-за совокупной ошибки квантования. Поскольку метод не зависит от абсолютной временной стоимости, нет никакой опасности разрыва во время расширенных операций, когда абсолютное время переменное переполнение силы.
Указания и ограничения по применению:
Этот объект не имеет никаких настраиваемых свойств для генерации кода.
Смотрите системные объекты в Генерации кода MATLAB (MATLAB Coder).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.