Main Content

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)는 지정된 각 속성이 지정된 값으로 설정된 DC 블로커 System object인 dcblker을 만듭니다. 각 속성 이름을 작은따옴표로 묶습니다.

예: dcblker = dsp.DCBlocker('Algorithm','FIR')

속성

모두 확장

달리 나타내지 않는 이상 속성은 조정 불가형입니다. 즉, 객체를 호출한 후에는 그 값을 변경할 수 없습니다. 호출하면 객체가 잠기며 release 함수를 사용하여 잠금을 해제할 수 있습니다.

속성이 조정 가능형인 경우 언제든지 해당 값을 변경할 수 있습니다.

속성값 변경에 대한 자세한 내용은 MATLAB에서 System object를 사용하는 시스템 설계를 참조하십시오.

DC 오프셋 추정을 위한 알고리즘으로, 다음 중 하나로 지정됩니다.

  • 'IIR' –– 객체가 좁은 저역통과 타원 필터를 기반으로 재귀적 추정값을 사용합니다. Order 속성은 필터의 차수를 설정하고 NormalizedBandwidth 속성은 대역폭을 설정합니다. 일반적으로 이 알고리즘은 FIR 알고리즘보다 메모리를 더 적게 사용하며 더 효율적입니다.

  • 'FIR' –– 객체가 유한한 개수의 과거 입력 샘플을 기반으로 하는 비재귀적 이동평균 추정값을 사용합니다. Length 속성은 샘플 수를 설정합니다. FIR 필터는 선형 위상 응답을 가지며 신호에 위상 왜곡을 유발하지 않습니다. IIR 필터는 더 적은 메모리를 필요로 하며 더 효율적으로 구현할 수 있습니다.

  • 'CIC' –– 객체가 데시메이션 인자가 1이고 NormalizedBandwidth 속성을 사용하여 지연차가 계산되는 CIC 데시메이터를 사용합니다. 이 알고리즘은 두 섹션을 사용하여 첫 번째 사이드로브 감쇠량이 필터의 메인로브보다 최소 25dB 아래에 있도록 합니다. 이 알고리즘은 고정소수점 입력이 필요하며 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차원 배열로 지정됩니다.

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

데이터형: single | double | int8 | int16 | int32 | fi
복소수 지원 여부:

출력 인수

모두 확장

DC 성분이 제거된 신호로, 벡터, 행렬 또는 N차원 배열로 반환됩니다. 출력 차원은 입력 차원과 일치합니다.

데이터형: single | double | int8 | int16 | int32 | fi
복소수 지원 여부:

객체 함수

객체 함수를 사용하려면 System object를 첫 번째 입력 인수로 지정합니다. 예를 들어 이름이 obj인 System object의 시스템 리소스를 해제하려면 다음 구문을 사용하십시오.

release(obj)

모두 확장

fvtoolVisualize frequency response of DSP filters
stepSystem object 알고리즘 실행
release리소스 해제 및 System object 속성값과 입력 특성 변경 허용하기
resetSystem object의 내부 상태 재설정

예제

모두 축소

IIR, FIR, "Subtract mean" 추정 알고리즘을 사용하여 입력 신호의 DC 성분을 제거합니다.

15Hz 톤, 25Hz 톤, 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');

1초마다 DC 블로커를 통해 입력 신호를 전달합니다. 1초씩의 증분으로 DC 블로커를 구현하여 수렴 시간의 차이를 관찰할 수 있습니다.

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

처음 1초 동안 세 가지 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)));

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 블로커를 적용한 후의 스펙트럼과 비교합니다. FIR 추정 알고리즘을 사용하기 위해 DC 블로커를 활성화합니다.

3개 톤으로 구성되고 DC 오프셋 1을 갖는 입력 신호를 만듭니다. 샘플링 주파수를 1kHz로 설정하고 신호 지속 시간을 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;

FIR 알고리즘을 사용하여 DC 오프셋을 추정하는 DC blocker 객체를 만듭니다.

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';

DC 블로커를 통해 입력 신호 x를 전달하여 출력 신호 y를 생성합니다.

y = dcblker(x);

첫 번째 스펙트럼 분석기를 사용하여 입력 신호의 주파수 특성을 표시합니다. 15Hz, 20Hz, 25Hz의 톤과 DC 성분이 명확히 표시됩니다.

hsa(x)

두 번째 스펙트럼 분석기를 사용하여 출력 신호의 주파수 특성을 표시합니다. DC 성분이 제거되었습니다.

hsb(y)

알고리즘

모두 확장

DC 블로커는 입력 신호에서 DC 성분을 뺍니다. IIR, FIR, CIC 또는 "Subtract mean" 알고리즘을 사용하여 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에 개발됨