Блокируйте компонент DC (смещение) от входного сигнала
dsp.DCBlocker
Система object™ удаляет смещение DC из каждого канала (столбец) входного сигнала. Операция запускается в зависимости от времени, чтобы постоянно оценить и удалить смещение DC.
Блокировать компонент DC входного сигнала:
Создайте dsp.DCBlocker
объект и набор его свойства.
Вызовите объект с аргументами, как будто это была функция.
Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты? MATLAB.
создает Системный объект блокировщика DC, dcblker
= dsp.DCBlockerdcblker
, блокировать компонент DC от каждого канала (столбец) входного сигнала.
создает Системный объект блокировщика DC, dcblker
= dsp.DCBlocker(Name,Value
)dcblker
, с каждым заданным набором свойств к заданному значению. Заключите каждое имя свойства в одинарные кавычки.
Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их и release
функция разблокировала их.
Если свойство является настраиваемым, можно изменить его значение в любое время.
Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты (MATLAB).
Algorithm
— Алгоритм для оценки DC возмещен'IIR'
(значение по умолчанию) | 'FIR'
| 'CIC'
| 'Subtract mean'
Алгоритм для оценки смещения DC, заданного как одно из следующего:
'IIR'
– Объект использует рекурсивную оценку на основе узкого, lowpass эллиптический фильтр. Наборы свойств Порядка порядок фильтра и наборы свойств NormalizedBandwidth его пропускная способность. Этот алгоритм обычно использует меньше памяти, чем КИХ-алгоритм и более эффективен.
'FIR'
– Объект использует нерекурсивную оценку скользящего среднего значения на основе конечного числа прошлых входных выборок. Наборы свойств Длины количество выборок. КИХ-фильтр имеет линейный фазовый отклик и не вызывает искажения фазы к сигналу. БИХ-фильтр требует меньшей памяти и более эффективен, чтобы реализовать.
'CIC'
– Объект использует CIC decimator с фактором децимации 1, чья дифференциальная задержка вычисляется с помощью свойства NormalizedBandwidth. Это использует два раздела, чтобы гарантировать, что первое затухание бокового лепестка на по крайней мере 25 дБ ниже основного лепестка фильтра. Этот алгоритм требует входных параметров фиксированной точки и может использоваться в генерации HDL-кода.
'Subtract mean'
– Объект вычисляет средние значения столбцов входной матрицы и вычитает средние значения из входа. Этот метод не сохраняет состояние между входными параметрами.
Можно визуализировать БИХ, КИХ и ответы CIC при помощи fvtool
функция.
NormalizedBandwidth
— Нормированная пропускная способность БИХ lowpass или CIC-фильтра
(значение по умолчанию) | действительный скаляр, больше, чем 0 и меньше чем 1Нормированная пропускная способность БИХ или CIC-фильтра, заданного как действительный скаляр, больше, чем 0 или меньше, чем 1. Нормированная пропускная способность используется, чтобы оценить компонент DC входного сигнала.
Это свойство применяется только, когда вы устанавливаете свойство Algorithm на 'IIR'
или 'CIC'
.
Order
— Порядок БИХ lowpass эллиптический фильтр
(значение по умолчанию) | целое число, больше, чем 3Порядок БИХ lowpass эллиптический фильтр, который используется, чтобы оценить уровень DC, заданный как целое число, больше, чем 3.
Это свойство применяется только, когда вы устанавливаете свойство Algorithm на 'IIR'
.
Length
— Количество прошлых входных выборок используется в КИХ-алгоритме
(значение по умолчанию) | положительное целое числоКоличество прошлых входных выборок, используемых в КИХ-алгоритме, чтобы оценить рабочее среднее значение, заданное как положительное целое число.
Это свойство применяется только, когда вы устанавливаете свойство Algorithm на 'FIR'
.
удаляет компонент DC из каждого канала (столбец) входа и возвращает выходной параметр.dcblkerOut
= dcblker(input
)
input
— Входной сигналВвод данных к объекту блокировщика DC, заданному как вектор, матрица или N-D массив.
Пример: t = (0:0.001:100)'; x = sin (30*pi*t) + 1;
Типы данных: single
| double
| int8
| int16
| int32
| fi
Поддержка комплексного числа: Да
dcblkerOut
— Сигнал с удаленным компонентом DCСигнал с удаленным компонентом DC, возвратился как вектор, матрица или N-D массив. Выходные размерности совпадают с входными размерностями.
Типы данных: single
| double
| int8
| int16
| int32
| fi
Поддержка комплексного числа: Да
Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj
, используйте этот синтаксис:
release(obj)
fvtool | Визуализируйте частотную характеристику фильтров DSP |
Примечание: Если вы используете R2016a или ранее, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj (x) становится шагом (obj, x).
Удалите компонент DC входного сигнала с помощью БИХ, КИХ, и вычтите средние алгоритмы оценки.
Создайте сигнал, состоявший из тона на 15 Гц, тона на 25 Гц и смещения DC.
t = (0:0.001:100)'; x = sin(30*pi*t) + 0.33*cos(50*pi*t) + 1;
Создайте три объекта блокировщика DC для трех алгоритмов оценки.
dc1 = dsp.DCBlocker('Algorithm','IIR','Order', 6); dc2 = dsp.DCBlocker('Algorithm','FIR','Length', 100); dc3 = dsp.DCBlocker('Algorithm','Subtract mean');
В течение каждой секунды времени передайте входной сигнал через блокировщики DC. Путем реализации блокировщиков DC с 1 вторым шагом можно наблюдать различия во времени сходимости.
for idx = 1 : 100 range = (1:1000) + 1000*(idx-1); y1 = dc1(x(range)); % IIR estimate y2 = dc2(x(range)); % FIR estimate y3 = dc3(x(range)); % Subtract mean end
Постройте входные и выходные данные для трех блокировщиков DC в течение первой секунды времени и покажите среднее значение для каждого сигнала. Средние значения для трех типов алгоритма показывают что FIR
и Subtract mean
алгоритмы сходятся более быстро.
plot(t(1:1000),x(1:1000), ... t(1:1000),y1, ... t(1:1000),y2, ... t(1:1000),y3); xlabel('Time (sec)') ylabel('Amplitude') legend(sprintf('Input DC:%.3f',mean(x)), ... sprintf('IIR DC:%.3f',mean(y1)), ... sprintf('FIR DC:%.3f',mean(y2)), ... sprintf('Subtract mean DC:%.3f',mean(y3)));
Примечание: Если вы используете R2016a или ранее, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj (x) становится шагом (obj, x).
Сравните спектр входного сигнала со смещением DC к спектру того же сигнала после применения блокировщика DC. Позвольте блокировщику DC использовать FIR
алгоритм оценки.
Создайте входной сигнал, состоявший из трех тонов, и это имеет смещение DC 1. Установите частоту дискретизации на 1 кГц и установите длительность сигнала на 100 секунд.
fs = 1000; t = (0:1/fs:100)'; x = sin(30*pi*t) + 0.67*sin(40*pi*t) + 0.33*sin(50*pi*t) + 1;
Создайте объект блокировщика DC, который использует КИХ-алгоритм, чтобы оценить смещение DC.
dcblker = dsp.DCBlocker('Algorithm','FIR','Length',100);
Создайте спектр анализатор с набором блоков питания к dBW
и частотный диапазон [-30 30]
отобразить частотную характеристику входного сигнала. Используя clone
функционируйте, создайте второй спектр анализатор, чтобы отобразить ответ выхода. Затем используйте Title
свойство спектра анализаторы, чтобы пометить их.
hsa = dsp.SpectrumAnalyzer('SampleRate',fs, ... 'PowerUnits','dBW','FrequencySpan','Start and stop frequencies',... 'StartFrequency',-30,'StopFrequency',30,'YLimits',[-200 20],... 'Title','Signal Spectrum'); hsb = clone(hsa); hsb.Title = 'Signal Spectrum After DC Blocker';
Передайте входной сигнал, x
, через блокировщик DC, чтобы сгенерировать выходной сигнал, y
.
y = dcblker(x);
Используйте первый спектр анализатор, чтобы отобразить характеристики частоты входного сигнала. Тоны в 15, 20, и 25 Гц, и компонент DC, ясно отображаются.
hsa(x)
Используйте второй спектр анализатор, чтобы отобразить характеристики частоты выходного сигнала. Компонент DC был удален.
hsb(y)
Примечание: Если вы используете R2016a или ранее, заменяете каждый вызов объекта с эквивалентным синтаксисом шага. Например, obj (x) становится шагом (obj, x).
Удалите смещение DC из сигнала фиксированной точки при помощи блокировщика DC. Блокировщик DC использует метод фильтрации lowpass CIC, чтобы оценить смещение DC.
Сгенерируйте случайные двоичные данные.
data = randi([0 1],1.2e5,1);
Создайте 64-QAM Системный объект модулятора и модулируйте данные путем выполнения его алгоритма.
mod = comm.RectangularQAMModulator('ModulationOrder',64, ... 'BitInput',true); modOut = mod(data);
Определите контрольные точки созвездия для модулятора.
cRefPts = constellation(mod);
Добавьте AWGN в модулируемый сигнал при помощи соответствующего Системного объекта и выполнения его алгоритма.
noise = comm.AWGNChannel('EbNo', 14.75, ... 'BitsPerSymbol', 6, ... 'SignalPower', 42, ... 'SamplesPerSymbol', 1); noisyOut = noise(modOut);
Отобразите график рассеивания сигнала с шумом при помощи объекта схемы созвездия. Красный плюс маркеры показывает идеальные местоположения символа.
constDiag = comm.ConstellationDiagram('Name','Noisy Constellation',... 'ReferenceConstellation',cRefPts, ... 'XLimits',[-8 8],'YLimits',[-8 8]); constDiag(noisyOut)
Добавьте смещение DC 1 к модулируемому сигналу.
noisyOut = noisyOut + 1;
Отобразите спектр сигнала. Скачок на уровне 0 кГц происходит из-за введенного смещения.
specAna = dsp.SpectrumAnalyzer(... 'YLimits',[-40,40], ... 'Title','Noisy Spectrum with DC Offset'); specAna(noisyOut);
Просмотрите эффект смещения DC на созвездии. Созвездие переключило один модуль направо.
constDiag(noisyOut)
constDiag.Name = 'Noisy Constellation with DC Offset';
Преобразуйте сигнал с шумом в объект фиксированной точки со знаком, который имеет 16-битный размер слова и 11-битную дробную длину.
noisyOut = fi(noisyOut,1,16,11);
Удалите смещение путем создания объекта блокировщика DC. Объект использует алгоритм CIC, чтобы оценить смещение DC.
dcblker = dsp.DCBlocker('Algorithm','CIC');
Визуализируйте частотную характеристику CIC оценка фильтра.
fvtool(dcblker)
Передайте смещение, сигнал с шумом через блокировщик DC и преобразуйте его выход в двойное.
dcBlockerOutFxP = dcblker(noisyOut); dcBlockerOut = double(dcBlockerOutFxP);
Постройте спектр сигнала, чтобы показать эффект удаления смещения DC. Скачок на уровне 0 кГц был удален.
specAna(dcBlockerOut);
specAna.Title = 'Noisy Spectrum with DC Removed';
Постройте созвездие и проверьте, что сигнал переключил назад налево.
constDiag(dcBlockerOut)
constDiag.Name = 'Noisy Constellation with DC Removed';
Чтобы видеть эффекты удаления смещения DC, варьируйтесь значение NormalizedBandwidth
свойство в объекте блокировщика DC.
Блокировщик DC вычитает компонент DC из входного сигнала. Можно оценить компонент DC при помощи БИХ, КИХ, CIC, или вычесть средний алгоритм.
Передайте входной сигнал через БИХ lowpass эллиптический фильтр.
Эллиптический БИХ-фильтр имеет неравномерность в полосе пропускания 0,1 дБ и затухание в полосе задерживания 60 дБ. Вы задаете нормированную пропускную способность и порядка фильтра.
Передайте входной сигнал через КИХ-фильтр, который использует нерекурсивное скользящее среднее значение от конечного числа прошлых входных выборок.
КИХ-коэффициенты фильтра даны как ones(1,Length)/Length
, где вы задаете Length
. КИХ-структура фильтра является прямой формой, я транспонировал структуру.
Передайте входной сигнал через CIC-фильтр. Поскольку CIC-фильтр усиливает сигнал, усиление фильтра оценено и вычтено из оценки DC.
Каскадный интегрально-гребенчатый (CIC) фильтр состоит из двух пар расчески интегратора. Эти пары помогают гарантировать, что пик первого бокового лепестка ответа фильтра ослабляется по крайней мере на 25 дБ относительно пика основного лепестка. Нормированная пропускная способность на 3 дБ используется, чтобы вычислить дифференциальную задержку. Задержка используется, чтобы определить усиление CIC-фильтра. Инверсия усиления фильтра используется в качестве множителя, который применяется к выходу CIC-фильтра. Это гарантирует, что совокупное усиление оценки DC составляет 0 дБ.
Следующее уравнение характеризует совокупный ответ величины фильтра и множителя:
Bnorm является нормированной пропускной способностью, таким образом что 0 <Bnorm <1.
M является дифференциальной задержкой выборок.
N является количеством разделов, равных 2.
Установите дифференциальную задержку, M, к самому маленькому целому числу, таким образом что |H(ejω) | <1 / √ 2. Если M известен, усиление CIC-фильтра вычисляется как MN. Поэтому, чтобы точно компенсировать усиление фильтра, множитель установлен в (1/M) N.
Вычислите среднее значение каждого столбца входного сигнала и вычтите среднее значение из входа. Например, если вход [1 2 3 4; 3 4 5 6], затем набор Блокировщика DC к этому режиму выходные параметры [-1 - 1 - 1 - 1; 1 1 1 1].
[1] Nezami, M. “Оценка производительности Основополосных Алгоритмов для Прямого Преобразования Тактическое программное обеспечение Заданные Получатели: Коррекция Разбаланса I/Q, Отклонение Изображений, Удаление DC и Формирование каналов”. MILCOM, 2002.
Указания и ограничения по применению:
Смотрите системные объекты в Генерации кода MATLAB (MATLAB Coder).
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.