主要内容

dsp.DCBlocker

阻断输入信号中的 DC 分量(偏移量)

描述

dsp.DCBlocker System object™ 从输入信号的每个通道(列)中删除 DC 偏移量。该操作随时间运行以不断估计和消除 DC 偏移量。

要阻断输入信号的 DC 分量,请执行以下操作:

  1. 创建 dsp.DCBlocker 对象并设置其属性。

  2. 用参量调用高对象,就像它是函数一样。

要了解 System object 工作原理的更多信息,请参阅什么是 System object?

该对象在特定条件下支持 C/C++ 代码生成和 SIMD 代码生成。有关详细信息,请参阅代码生成

创建对象

描述

dcblker = dsp.DCBlocker 创建一个 DC 阻隔器 System object,即 dcblker,以阻断来自输入信号的每个通道(列)的 DC 分量。

示例

dcblker = dsp.DCBlocker(Name=Value) 使用一个或多个名称-值参量设置属性。例如,要将低通 IIR 或 CIC 滤波器的归一化带宽指定为 0.004,请将 NormalizedBandwidth 设置为 0.004。

示例

属性

全部展开

除非另有说明,否则属性是不可调的,这意味着在调用对象后无法更改属性值。当您调用对象时,对象会锁定,release 函数可以解锁它们。

如果某属性是可调的,您可以随时更改其值。

有关更改属性值的详细信息,请参阅使用 System object 在 MATLAB 中进行系统设计

用于估计 DC 偏移量的算法,指定为以下项之一:

  • "IIR" - 对象使用基于窄低通椭圆滤波器的递归估计。Order 属性设置滤波器的阶数,NormalizedBandwidth 属性设置其带宽。此算法通常比 FIR 算法使用的内存更少,效率更高。

  • "FIR" - 对象使用基于有限数量的过去输入采样的非递归移动平均值估计。Length 属性设置采样数。FIR 滤波器具有线性相位响应,不会对信号造成任何相位失真。IIR 滤波器需要更少的内存,实现起来更高效。

  • "CIC" - 对象使用 CIC 抽取器,抽取因子为 1,其微分延迟是使用 NormalizedBandwidth 属性计算的。它使用两个节来确保第一个旁瓣衰减比滤波器主瓣低至少 25 dB。此算法需要定点输入,可用于 HDL 代码生成。

  • "Subtract mean" - 对象计算输入矩阵各列的均值,并从输入中减去该均值。此方法不保留输入之间的状态。

您可以使用 fvtool 函数来可视化 IIR、FIR 和 CIC 响应。

IIR 或 CIC 滤波器的归一化带宽,指定为大于 0 且小于 1 的实数标量。归一化带宽用于估计输入信号的 DC 分量。

依赖关系

仅当 Algorithm 属性设置为 "IIR""CIC" 时,此属性才适用。

用于估计 DC 电平的低通 IIR 椭圆滤波器的阶数,指定为大于 3 的整数。

依赖关系

仅当 Algorithm 属性设置为 "IIR" 时,此属性才适用。

FIR 算法中用于估计滚动均值的过去输入采样数,指定为正整数。

依赖关系

仅当 Algorithm 属性设置为 "FIR" 时,此属性才适用。

用途

描述

dcblkerOut = dcblker(input) 从输入的每个通道(列)中删除 DC 分量,并返回输出。

示例

输入参量

全部展开

DC blocker 对象的数据输入,指定为向量、矩阵或 N 维数组。

数据类型: single | double | int8 | int16 | int32 | fi
复数支持:

输出参量

全部展开

删除了 DC 分量的信号,以向量、矩阵或 N 维数组形式返回。输出维度与输入维度匹配。

数据类型: single | double | int8 | int16 | int32 | fi
复数支持:

对象函数

要使用对象函数,请将 System object 指定为第一个输入参量。例如,要释放名为 obj 的 System object 的系统资源,请使用以下语法:

release(obj)

全部展开

freqzFrequency response of discrete-time filter System object
filterAnalyzerAnalyze filters with Filter Analyzer app
impzImpulse response of discrete-time filter System object
infoInformation about filter System object
coeffsReturns the filter System object coefficients in a structure
costEstimate cost of implementing filter System object
grpdelayGroup delay response of discrete-time filter System object
outputDelayDetermine output delay of single-rate or multirate filter
step运行 System object 算法
release释放资源并允许更改 System object 属性值和输入特性
reset重置 System object 的内部状态

示例

全部折叠

使用 IIR、FIR 和减去均值估计算法去除输入信号的 DC 分量。

创建一个由 15 Hz 音调、25 Hz 音调和 DC 偏移量组成的信号。

t = (0:0.001:100)';
x = sin(30*pi*t) + 0.33*cos(50*pi*t) + 1;

为三种估计算法创建三个 DC blocker 对象。

dc1 = dsp.DCBlocker(Algorithm="IIR",Order=6);
dc2 = dsp.DCBlocker(Algorithm="FIR",Length=100);
dc3 = dsp.DCBlocker(Algorithm="Subtract mean");

对于每一秒时间,都让输入信号通过 DC 阻隔器。通过以 1 秒为增量实现 DC blocker,您可以观察到收敛时间的差异。

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 blocker 的输入和输出数据,并显示每个信号的均值。三种算法类型的均值表明 FIRSubtract 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)));

Figure contains an axes object. The axes object with xlabel Time (sec), ylabel Amplitude contains 4 objects of type line. These objects represent Input DC:1.000, IIR DC:0.011, FIR DC:-0.000, Subtract mean DC:-0.000.

将具有 DC 偏移量的输入信号的频谱与应用 DC blocker 后的同一信号的频谱进行比较。启用 DC blocker 以使用 FIR 估计算法。

创建一个由三个音调组成的输入信号,其 DC 偏移量为 1。将采样频率设置为 1 kHz,并将信号持续时间设置为 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 blocker 对象,它使用 FIR 算法来估计 DC 偏移量。

dcblker = dsp.DCBlocker(Algorithm="FIR",Length=100);

创建一个频谱分析仪,其功率单位设置为 dBW,频率范围设置为 [-30 30],以显示输入信号的频率响应。使用 clone 函数创建第二个频谱分析仪来显示输出的响应。然后,使用频谱分析仪的 Title 属性来标记它们。

hsa = spectrumAnalyzer(SampleRate=fs, ...
    Method="welch",...
    AveragingMethod="exponential",...
    SpectrumUnits="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 blocker 以生成输出信号 y

y = dcblker(x);

使用第一个频谱分析仪以显示输入信号的频率特征。15、20 和 25 Hz 的音调以及 DC 分量清晰可见。

hsa(x)

使用第二个频谱分析仪显示输出信号的频率特征。DC 分量已删除。

hsb(y)

算法

全部展开

DC blocker 从输入信号中减去 DC 分量。您可以使用 IIR、FIR、CIC 或减去均值算法来估计 DC 分量。

参考

[1] Nezami, M. “Performance Assessment of Baseband Algorithms for Direct Conversion Tactical Software Defined Receivers: I/Q Imbalance Correction, Image Rejection, DC Removal, and Channelization.” MILCOM, 2002.

扩展功能

全部展开

版本历史记录

在 R2014a 中推出

全部展开