dsp.DCBlocker
입력 신호에서 DC 성분(오프셋) 차단
설명
dsp.DCBlocker
System object™는 입력 신호의 각 채널(열)에서 DC 오프셋을 제거합니다. 이 동작은 DC 오프셋을 지속적으로 추정하고 제거하기 위해 시간의 흐름에 따라 실행됩니다.
입력 신호의 DC 성분을 차단하려면 다음을 수행하십시오.
dsp.DCBlocker
객체를 만들고 속성을 설정합니다.함수를 호출하듯이 인수를 사용하여 객체를 호출합니다.
System object의 작동 방식에 대한 자세한 내용은 System object란? 항목을 참조하십시오.
이 객체는 특정 조건에서 C/C++ 코드 생성과 SIMD 코드 생성을 지원합니다. 자세한 내용은 코드 생성 항목을 참조하십시오.
생성
속성
달리 나타내지 않는 이상 속성은 조정 불가형입니다. 즉, 객체를 호출한 후에는 그 값을 변경할 수 없습니다. 호출하면 객체가 잠기며 release
함수를 사용하여 잠금을 해제할 수 있습니다.
속성이 조정 가능형인 경우 언제든지 해당 값을 변경할 수 있습니다.
속성값 변경에 대한 자세한 내용은 MATLAB에서 System object를 사용하는 시스템 설계를 참조하십시오.
Algorithm
— DC 오프셋 추정을 위한 알고리즘
'IIR'
(디폴트 값) | 'FIR'
| 'CIC'
| 'Subtract mean'
DC 오프셋 추정을 위한 알고리즘으로, 다음 중 하나로 지정됩니다.
'IIR'
–– 객체가 좁은 저역통과 타원 필터를 기반으로 재귀적 추정값을 사용합니다. Order 속성은 필터의 차수를 설정하고 NormalizedBandwidth 속성은 대역폭을 설정합니다. 일반적으로 이 알고리즘은 FIR 알고리즘보다 메모리를 더 적게 사용하며 더 효율적입니다.'FIR'
–– 객체가 유한한 개수의 과거 입력 샘플을 기반으로 하는 비재귀적 이동평균 추정값을 사용합니다. Length 속성은 샘플 수를 설정합니다. FIR 필터는 선형 위상 응답을 가지며 신호에 위상 왜곡을 유발하지 않습니다. IIR 필터는 더 적은 메모리를 필요로 하며 더 효율적으로 구현할 수 있습니다.'CIC'
–– 객체가 데시메이션 인자가 1이고 NormalizedBandwidth 속성을 사용하여 지연차가 계산되는 CIC 데시메이터를 사용합니다. 이 알고리즘은 두 섹션을 사용하여 첫 번째 사이드로브 감쇠량이 필터의 메인로브보다 최소 25dB 아래에 있도록 합니다. 이 알고리즘은 고정소수점 입력이 필요하며 HDL 코드 생성에 사용할 수 있습니다.'Subtract mean'
–– 객체가 입력 행렬 열의 평균을 구하고 입력값에서 평균을 뺍니다. 이 방법은 입력 간에 상태를 유지하지 않습니다.
fvtool
함수를 사용하여 IIR 응답, FIR 응답, CIC 응답을 시각화할 수 있습니다.
NormalizedBandwidth
— 저역통과 IIR 또는 CIC 필터의 정규화된 대역폭
0.001
(디폴트 값) | 0보다 크고 1보다 작은 실수형 스칼라
IIR 또는 CIC 필터의 정규화된 대역폭으로, 0보다 크거나 1보다 작은 실수형 스칼라로 지정됩니다. 정규화된 대역폭은 입력 신호의 DC 성분을 추정하는 데 사용됩니다.
종속 관계
이 속성은 Algorithm 속성을 'IIR'
또는 'CIC'
로 설정한 경우에만 적용됩니다.
Order
— 저역통과 IIR 타원 필터의 차수
6
(디폴트 값) | 3보다 큰 정수
DC 레벨 추정에 사용되는 저역통과 IIR 타원 필터의 차수로, 3보다 큰 정수로 지정됩니다.
종속 관계
이 속성은 Algorithm 속성을 'IIR'
로 설정한 경우에만 적용됩니다.
Length
— FIR 알고리즘에서 사용되는 과거 입력 샘플 수
50
(디폴트 값) | 양의 정수
동적 평균을 추정하기 위해 FIR 알고리즘에서 사용되는 과거 입력 샘플 수로, 양의 정수로 지정됩니다.
종속 관계
이 속성은 Algorithm 속성을 'FIR'
로 설정한 경우에만 적용됩니다.
사용
설명
는 입력의 각 채널(열)에서 DC 성분을 제거하고 출력을 반환합니다.dcblkerOut
= dcblker(input
)
입력 인수
input
— 입력 신호
벡터 | 행렬 | N차원 배열
DC blocker 객체에 대한 데이터 입력값으로, 벡터, 행렬 또는 N차원 배열로 지정됩니다.
예: t = (0:0.001:100)'; x = sin(30*pi*t) + 1;
데이터형: single
| double
| int8
| int16
| int32
| fi
복소수 지원 여부: 예
출력 인수
dcblkerOut
— DC 성분이 제거된 신호
벡터 | 행렬 | N차원 배열
DC 성분이 제거된 신호로, 벡터, 행렬 또는 N차원 배열로 반환됩니다. 출력 차원은 입력 차원과 일치합니다.
데이터형: single
| double
| int8
| int16
| int32
| fi
복소수 지원 여부: 예
객체 함수
객체 함수를 사용하려면 System object를 첫 번째 입력 인수로 지정합니다. 예를 들어 이름이 obj
인 System object의 시스템 리소스를 해제하려면 다음 구문을 사용하십시오.
release(obj)
예제
DC 성분을 제거하고 결과 표시하기
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)));
DC 블로커 전과 후의 주파수 응답
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 성분을 추정할 수 있습니다.
IIR
IIR 저역통과 타원 필터를 통해 입력 신호를 전달합니다.
타원 IIR 필터는 통과대역 리플 0.1dB 및 저지대역 감쇠량 60dB을 가집니다. 정규화된 대역폭과 필터 차수를 지정합니다.
FIR
유한개의 과거 입력 샘플로부터의 비재귀적 이동평균을 사용하는 FIR 필터를 통해 입력 신호를 전달합니다.
FIR 필터 계수는 ones(1,Length)/Length
로 지정됩니다. 여기서 Length
는 FIR 알고리즘에서의 과거 입력 샘플 수입니다. FIR 필터 구조는 Direct form I 전치 구조입니다.
CIC
CIC 필터를 통해 입력 신호를 전달합니다. CIC 필터가 신호를 증폭하기 때문에 필터 이득이 추정되고 DC 추정값에서 이 값을 뺍니다.
CIC(종속 연결 적분기-콤) 필터는 두 개의 적분기-콤 쌍으로 구성됩니다. 이러한 쌍은 필터 응답의 첫 번째 사이드로브 피크가 메인로브 피크를 기준으로 최소 25dB 감쇠되도록 합니다. 정규화된 3dB 대역폭은 지연차를 계산하는 데 사용됩니다. 지연은 CIC 필터의 이득을 결정하는 데 사용됩니다. 필터 이득의 역수는 승수로 사용되며 CIC 필터의 출력에 적용됩니다. 따라서 DC 추정값의 총 이득이 0dB가 됩니다.
다음 방정식은 필터와 승수의 집계 크기 응답을 특징짓습니다.
Bnorm은 0 < Bnorm < 1을 충족하는 정규화된 대역폭입니다.
M은 지연차입니다(단위: 샘플).
N은 섹션 수로, 2입니다.
지연차 M을 |H(ejω)| < 1/√2를 충족하는 가장 작은 정수로 설정합니다. 일단 M을 알면 CIC 필터의 이득은 MN으로 구해집니다. 따라서 필터 이득을 정확하게 보상하기 위해 승수가 (1/M)N으로 설정됩니다.
Subtract mean
입력 신호의 각 열의 평균값을 계산하고 입력값에서 이 평균값을 뺍니다. 예를 들어 입력값이 [1 2 3 4; 3 4 5 6]인 경우 DC Blocker가 이 모드로 설정되어 있으면 [-1 -1 -1 -1; 1 1 1 1]이 출력됩니다.
참고 문헌
[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.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
System Objects in MATLAB Code Generation (MATLAB Coder) 항목을 참조하십시오.
이 객체는 입력 신호의 데이터형이 single
형 또는 double
형인 경우 Intel® AVX2 코드 대체 라이브러리를 사용하는 SIMD 코드 생성도 지원합니다.
SIMD 기술은 생성되는 코드의 성능을 크게 향상시킵니다. 자세한 내용은 SIMD 코드 생성 항목을 참조하십시오. 이 객체에서 SIMD 코드를 생성하려면 Use Intel AVX2 Code Replacement Library to Generate SIMD Code from MATLAB Algorithms 항목을 참조하십시오.
HDL 코드 생성
HDL Coder™를 사용하여 FPGA 및 ASIC 설계를 위한 VHDL, Verilog 및 SystemVerilog 코드를 생성할 수 있습니다.
데이터형 double
형 및 single
형은 시뮬레이션에서는 지원되지만 HDL 코드 생성에서는 지원되지 않습니다.
미리 정의된 System object에서 HDL 코드를 생성하려면 HDL Code Generation from Viterbi Decoder System Object (HDL Coder) 항목을 참조하십시오.
버전 내역
R2014a에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)