Positive 및 Negative Filter (MPEG TS Section Filter)
- 작성자
- 고친과정
2008년 2월 5일 : 처음씀
1.1. 구현
Filter는 어떤 입력으로부터의 Data에서 원하는 부분을 선별하기 위한 용도의 함수를 말합니다.
높은 트래픽 입력을 선별하는데 있어서 CPU가 처리하기 보다는 H/W 적인 FPGA등의 논리적인 회로 구현으로 이 연속적인 스트림 트래픽에서 내가 원하는 데이터인가 아닌가를 빠르게 선별하는데 유용할 수 있을겁니다.
Filter중에서 MPEG TS 의 SectionFilter 를 구현하는데 있어서 Positive 및 Negative Filter (MPEG TS Section Filter) 알고리즘으로 적절한 H/W 적인 Filter와 유사한 동작을 구현할수 있게 됩니다.
여기서 Positive mask 는 주어진 data 와 mask 값을 AND연산후 comp 와 비교하는 일반적인 mask 동작으로 특정 비트패턴을 일치조건으로 취하는 동작입니다.
반면에 Negative mask 는 주어진 data 와 mask 값을 AND연산후 주어진 비트패턴이 주어진 comp 값과 다른 경우 일치조건으로 취하는 동작입니다.
Positive mask 는 특정 비트열을 통과시키는 용도로 구현되며
Negative mask 는 현재조건이 변경되는 시점을 통과시키는 용도로 구현되는것이죠.
즉, 다음과 같이 스트림 입력에 대한 비트연산으로 통과(ACCEPT)/거부(DROP) 을 결정하는 스트림 이력에 대한 스위치 논리입니다.
높은 트래픽 입력을 선별하는데 있어서 CPU가 처리하기 보다는 H/W 적인 FPGA등의 논리적인 회로 구현으로 이 연속적인 스트림 트래픽에서 내가 원하는 데이터인가 아닌가를 빠르게 선별하는데 유용할 수 있을겁니다.
Filter중에서 MPEG TS 의 SectionFilter 를 구현하는데 있어서 Positive 및 Negative Filter (MPEG TS Section Filter) 알고리즘으로 적절한 H/W 적인 Filter와 유사한 동작을 구현할수 있게 됩니다.
여기서 Positive mask 는 주어진 data 와 mask 값을 AND연산후 comp 와 비교하는 일반적인 mask 동작으로 특정 비트패턴을 일치조건으로 취하는 동작입니다.
반면에 Negative mask 는 주어진 data 와 mask 값을 AND연산후 주어진 비트패턴이 주어진 comp 값과 다른 경우 일치조건으로 취하는 동작입니다.
Positive mask 는 특정 비트열을 통과시키는 용도로 구현되며
Negative mask 는 현재조건이 변경되는 시점을 통과시키는 용도로 구현되는것이죠.
즉, 다음과 같이 스트림 입력에 대한 비트연산으로 통과(ACCEPT)/거부(DROP) 을 결정하는 스트림 이력에 대한 스위치 논리입니다.
- Positive mask 의사 구현 (어떠한 입력과 일치하는 것을 ACCEPT 처리)
func bool positive_mask_filter(in_stream, mask, mode, comp, n) { positive_mask[0..n] = mask[0..n] & mode[0..n]; if ( (in_stream[0..n] & positive_mask[0..n]) == (comp[0..n] & positive_mask[0..n]) ) return ACCEPT; return DROP; }
- Negative mask 의사 구현 (어떠한 반복되는 동일한 입력 중에서 변화가 발생될 때만 ACCEPT 처리)
func bool negative_mask_filter(in_stream, mask, mode, comp, n) { negative_mask[0..n] = mask[0..n] & (~mode[0..n]); if ( ((in_stream[0..n] ^ comp[0..n]) & negative_mask[0..n]) != 0[0..n] ) return ACCEPT; return DROP; }
아래의 예제가 충분할지는 모르겠지만 대략 다음과 같이 구현된다고 보시면 됩니다. 당연히 H/W 설계적인 관점에서도 가능한 구조로 되어 있습니다.
거의 기능상 구현으로 봤을때는 Positive mask 만 있으면 충분합니다.
하지만 불필요한 반복적인 data를 무시하지 않기 때문에 CPU가 과도하게 피곤해지겠죠.
Negative mask 는 이러한 부하의 줄이는 목적으로 사용합니다.