Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

firls

최소제곱 선형 위상 FIR 필터 설계

설명

예제

b = firls(n,f,a)n차 FIR 필터의 n+1개 계수를 포함하는 행 벡터 b를 반환합니다. 결과로 생성되는 필터의 주파수 및 진폭 특성은 벡터 fa로 지정된 특성과 일치합니다.

예제

b = firls(n,f,a,w)w를 사용하여 주파수 Bin에 가중치를 적용합니다.

예제

b = firls(___,ftype)은 반대칭(홀수) 필터를 설계합니다. 여기서 ftype은 필터를 미분기 또는 힐베르트 변환기로 지정합니다. ftype은 위에 열거된 모든 입력 구문과 함께 사용할 수 있습니다.

예제

모두 축소

0.25π0.3π 사이의 천이 영역을 갖고 차수가 255인 FIR 저역통과 필터를 설계합니다. 필터의 크기 응답과 위상 응답을 표시합니다.

b = firls(255,[0 0.25 0.3 1],[1 1 0 0]);
freqz(b,1)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

이상적인 미분기는 D(ω)=jω로 지정되는 주파수 응답을 갖습니다. 0.9π를 초과하는 주파수를 감쇠하고 차수가 30인 미분기를 설계합니다. 주파수가 π로 정규화되기 때문에 진폭에 인자 π를 포함시킵니다. 필터의 영위상 응답을 표시합니다.

b = firls(30,[0 0.9],[0 0.9*pi],'differentiator');

zerophase(b,1)

Figure contains an axes object. The axes object with title Zero-Phase Response, xlabel Normalized Frequency ( times blank pi blank rad/sample), ylabel Amplitude contains an object of type line.

조각별 선형 통과대역을 갖는 24차 반대칭 필터를 설계합니다.

F = [0 0.3 0.4 0.6 0.7 0.9]; 
A = [0 1.0 0.0 0.0 0.5 0.5];
b = firls(24,F,A,'hilbert');

원하는 주파수 응답과 실제 주파수 응답을 플로팅합니다.

[H,f] = freqz(b,1,512,2);
plot(f,abs(H))
hold on
for i = 1:2:6, 
   plot([F(i) F(i+1)],[A(i) A(i+1)],'r--')
end
legend('firls design','Ideal')
grid on
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude')

Figure contains an axes object. The axes object with xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Magnitude contains 4 objects of type line. These objects represent firls design, Ideal.

FIR 저역통과 필터를 설계합니다. 통과대역 범위는 DC에서 0.45π rad/sample 사이입니다. 저지대역 범위는 0.55π rad/sample에서 나이퀴스트 주파수 사이입니다. 최소제곱 피팅의 대역 가중치를 변경하여, 서로 다른 세 개의 설계를 만듭니다.

첫 번째 설계에서는 저지대역 가중치를 통과대역 가중치보다 100배 높게 만듭니다. 저지대역의 크기 응답이 0에 가까운 평탄한 응답이어야 하는 경우, 이 사양을 사용하십시오. 통과대역 리플이 저지대역 리플보다 약 100배 높습니다.

bhi = firls(18,[0 0.45 0.55 1],[1 1 0 0],[1 100]);

두 번째 설계에서는 통과대역 가중치가 저지대역 가중치보다 100배 높도록 가중치를 바꿉니다. 통과대역의 크기 응답이 1에 가까운 평탄한 응답이어야 하는 경우, 이 사양을 사용하십시오. 저지대역 리플이 통과대역 리플보다 약 100배 높습니다.

blo = firls(18,[0 0.45 0.55 1],[1 1 0 0],[100 1]);

세 번째 설계에서는 두 대역에 동일한 가중치를 지정합니다. 그러면 통과대역과 저지대역의 리플이 비슷한 필터가 생성됩니다.

b = firls(18,[0 0.45 0.55 1],[1 1 0 0],[1 1]);

세 개 필터의 크기 응답을 시각화합니다.

hfvt = fvtool(bhi,1,blo,1,b,1,'MagnitudeDisplay','Zero-phase');
legend(hfvt,'bhi: w = [1 100]','blo: w = [100 1]','b: w = [1 1]')

Figure Figure 1: Zero-phase Response contains an axes object. The axes object with title Zero-phase Response, xlabel Normalized Frequency ( times pi blank rad/sample), ylabel Amplitude contains 3 objects of type line. These objects represent bhi: w = [1 100], blo: w = [100 1], b: w = [1 1].

입력 인수

모두 축소

필터 차수로, 양의 실수형 스칼라로 지정됩니다.

정규화 주파수 점으로, 실수 값 벡터로 지정됩니다. 인수는 범위 [0, 1] 내에 있어야 합니다. 여기서 1은 나이퀴스트 주파수에 해당합니다. 벡터의 요소 개수는 항상 2의 배수입니다. 주파수는 비내림차순이어야 합니다.

f에 지정된 점에서 원하는 진폭으로, 벡터로 지정됩니다. fa는 길이가 동일해야 합니다. 길이는 짝수여야 합니다.

  • k가 홀수인 경우 점의 쌍 (f(k), f(k+1)) 간의 주파수에서 원하는 진폭은 점 (f(k), a(k))와 (f(k+1), a(k+1))을 연결하는 선분입니다.

  • k가 짝수인 경우 점의 쌍 (f(k), f(k+1)) 사이의 주파수에서 원하는 진폭은 지정되지 않습니다. 이러한 점 사이의 영역은 천이 영역이거나 특정 응용 사례에서 중요하지 않은 영역입니다.

각 주파수 대역의 피팅을 조정하는 데 사용되는 가중치로, 실수 값 벡터로 지정됩니다. w의 길이가 fa 길이의 절반이기 때문에 대역당 정확히 하나의 가중치가 있습니다.

기대칭을 갖는 선형 위상 필터의 필터 유형(유형 III 및 유형 IV)으로, 'hilbert' 또는 'differentiator'로 지정됩니다.

  • 'hilbert'b에 포함된 출력 계수는 관계 b(k) = –b(n + 2 – k), k = 1, ..., n + 1을 따릅니다. 이 필터 클래스는 힐베르트 변환기를 포함합니다. 힐베르트 변환기는 전체 대역에 걸쳐 원하는 진폭 1을 갖습니다.

  • 'differentiator' — 0이 아닌 진폭의 대역에 대해, 필터는 저주파수에서의 오차가 고주파수에서의 오차보다 훨씬 작도록 1/f2의 인자로 오차에 가중치를 적용합니다. 주파수에 비례하는 진폭 특성을 갖는 FIR 미분기의 경우, 이러한 필터는 최대 상대 오차(원하는 진폭에 대한 오차 비율의 최댓값)를 최소화합니다.

출력 인수

모두 축소

필터 계수로, 길이가 n + 1인 행 벡터로 반환됩니다. 계수는 오름차순입니다.

세부 정보

모두 축소

필터 길이와 천이 폭 간의 부조화

필터 길이와 천이 폭의 곱이 큰 필터를 설계할 경우 다음과 같은 경고 메시지가 표시될 수 있습니다. Matrix is close to singular or badly scaled 다음 예제에서는 이러한 한계를 보여줍니다.

b = firls(100,[0 0.15 0.85 1],[1 1 0 0]);
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =  2.228479e-18.
freqz(b,1)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

이 경우 필터 계수 b가 원하는 필터를 나타내지 않을 수 있습니다. 주파수 응답을 살펴보면 필터를 확인할 수 있습니다.

알고리즘

firls는 원하는 주파수 대역에서 이상적인 조각별 선형 함수와 필터의 크기 응답 간의 가중 적분 제곱 오차를 최소화하는, 선형 위상 FIR 필터를 설계합니다.

참고 문헌 [2]에는 firls의 이론적 접근 방식이 설명되어 있습니다. 이 함수는 MATLAB® \ 연산자를 사용하여 크기가 대략 n\2인 내적 행렬을 포함하는 선형 연립방정식을 풉니다.

이러한 필터는 유형 I(n이 홀수)과 유형 II(n이 짝수) 선형 위상 필터입니다. 벡터 fa는 필터의 주파수-진폭 특성을 지정합니다.

  • f는 0에서 1 사이의 범위에 지정된 주파수 점의 쌍으로 구성된 벡터입니다. 여기서 1은 나이퀴스트 주파수에 해당됩니다. 주파수는 오름차순이어야 합니다. 중복된 주파수 점이 허용됩니다.

  • af에 지정된 점에서 원하는 진폭을 포함하는 벡터입니다.

    k가 홀수인 경우 점의 쌍 (f(k), f(k+1)) 간의 주파수에서 원하는 진폭 함수는 점 (f(k), a(k))와 (f(k+1), a(k+1))을 연결하는 선분입니다.

    k가 짝수인 경우 점의 쌍 (f(k), f(k+1)) 사이의 주파수에서 원하는 진폭 함수는 지정되지 않습니다. 이러한 영역은 천이 영역, 즉 "무관(Don't Care)" 영역입니다.

  • fa는 길이가 같습니다. 이 길이는 짝수여야 합니다.

아래 그림은 원하는 진폭 응답을 정의할 때 f 벡터와 a 벡터 간의 관계를 보여줍니다.

이 함수는 유형 I, II, III, IV 선형 위상 필터를 설계합니다. 유형 I과 유형 II는 각각 짝수 n과 홀수 n에 대한 디폴트 필터이고, 'hilbert' 플래그와 'differentiator' 플래그는 유형 III(n이 짝수인 경우)과 IV(n이 홀수인 경우) 필터를 만듭니다. 필터는 유형에 따라 각기 다른 대칭성과 해당 주파수 응답에 대한 제약 조건을 가집니다(자세한 내용은 [1] 항목 참조).

선형 위상 필터 유형필터 차수계수의 대칭성응답 H(f), f = 0응답 H(f), f = 1(나이퀴스트)

유형 I

짝수

b(k)=b(n+2k),k=1,...,n+1

제한 사항 없음

제한 사항 없음

유형 II

홀수

b(k)=b(n+2k),k=1,...,n+1

제한 사항 없음

H(1) = 0

유형 III

짝수

b(k)=b(n+2k),k=1,...,n+1

H(0) = 0

H(1) = 0

유형 IV

홀수

b(k)=b(n+2k),k=1,...,n+1

H(0) = 0

제한 사항 없음

참고 문헌

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Discrete-Time Signal Processing. Upper Saddle River, NJ: Prentice Hall, 1999.

[2] Parks, Thomas W., and C. Sidney Burrus. Digital Filter Design. Hoboken, NJ: John Wiley & Sons, 1987, pp. 54–83.

확장 기능

C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.

버전 내역

R2006a 이전에 개발됨

모두 확장

참고 항목

| | |