이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

designfilt

디지털 필터 설계

설명

예제

d = designfilt(resp,Name,Value)는 응답 유형 resp를 갖는 digitalFilter 객체 d를 설계합니다. 일련의 Name,Value 쌍을 사용하여 필터를 추가적으로 지정합니다. 허용되는 사양 세트는 응답 유형 resp에 따라 달라지며, 다음 항목의 조합으로 구성됩니다.

  • 주파수 제약 조건 - 필터가 원하는 동작을 보이는 주파수에 해당합니다. 'PassbandFrequency''CutoffFrequency'가 그러한 예입니다. 전체 목록은 이름-값 쌍의 인수에서 확인하십시오. 주파수 제약 조건은 항상 지정해야 합니다.

  • 크기 제약 조건 - 특정 주파수 범위에서의 필터 동작을 설명합니다. 'PassbandRipple''StopbandAttenuation'이 그러한 예입니다. 전체 목록은 이름-값 쌍의 인수에서 확인하십시오. 크기 제약 조건이 지정되지 않은 경우 designfilt는 디폴트 값을 제공합니다. 임의 크기 설계에서는 항상 원하는 진폭으로 구성된 벡터를 지정해야 합니다.

  • 'FilterOrder'. 일부 설계 방법에서는 사용자가 차수를 지정할 수 있습니다. 그 외의 설계 방법은 최소 차수 설계를 생성합니다. 즉, 지정된 제약 조건을 충족하는 가장 작은 필터를 생성합니다.

  • 'DesignMethod' - 필터를 설계하는 데 사용되는 알고리즘입니다. 제약된 최소제곱('cls')과 카이저 윈도우 생성('kaiserwin')이 그러한 예입니다. 일부 사양 세트의 경우에는 여러 설계 방법 중에서 하나를 선택할 수 있습니다. 그 밖의 경우에는 원하는 사양을 충족하는 단 하나의 방법만 사용할 수 있습니다.

  • 설계 옵션 - 지정된 설계 방법과 관련된 파라미터입니다. 'window' 방법의 경우 'Window', 임의 크기 등리플 설계의 경우 최적화 'Weights'가 그러한 예입니다. 전체 목록은 이름-값 쌍의 인수에서 확인하십시오. 설계 옵션이 지정되지 않은 경우 designfilt는 디폴트 값을 제공합니다.

  • 'SampleRate'는 필터가 동작하는 주파수입니다. designfilt의 디폴트 샘플 레이트는2Hz입니다. 이 값을 사용하는 것은 정규화 주파수로 작업하는 것과 동일합니다.

참고

명령줄에 불완전하거나 짝이 맞지 않는 이름-값 쌍 세트를 지정하면 designfilt필터 설계 도우미를 열도록 제안합니다. 필터 설계를 도와주는 이 도우미는 명령줄에 올바르게 수정된 MATLAB® 코드를 붙여 넣어 줍니다.

올바르지 않은 사양 세트를 사용하여 스크립트나 함수에서 designfilt를 호출하면 designfilt필터 설계 도우미를 열기 위한 링크가 포함된 오류 메시지를 발생시킵니다. 필터 설계를 도와주는 이 도우미는 함수나 스크립트에서 오류가 있는 코드를 주석으로 처리하고, 그다음 줄에 수정된 MATLAB 코드를 붙여 넣어 줍니다.

  • filterdataOut = filter(d,dataIn) 형식으로 사용하여 digitalFilter d로 신호를 필터링합니다.

  • fvtool을 사용하여 digitalFilter d를 시각화합니다.

  • d.Coefficients를 입력하여 digitalFilter d의 계수를 구합니다. IIR 필터의 경우, 계수는 2차섹션형(SOS)으로 표현됩니다.

  • digitalFilter 객체와 함께 사용할 수 있는 필터링 함수 및 분석 함수의 목록은 digitalFilter를 참조하십시오.

designfilt(d)를 사용하면 기존 디지털 필터 d를 편집할 수 있습니다. 이를 사용하면 필터 사양이 입력된 채로 필터 설계 도우미가 열리며 수정이 가능해집니다. 이는 digitalFilter 객체를 편집할 수 있는 유일한 방법입니다. 이 외의 경우, 해당 속성은 읽기 전용입니다.

예제

모두 축소

정규화된 통과대역 주파수 0.25π rad/s, 저지대역 주파수 0.35π rad/s, 통과대역 리플 0.5dB, 저지대역 감쇠량 65dB을 갖는 최소 차수 저역통과 FIR 필터를 설계합니다. 카이저 윈도우를 사용하여 필터를 설계합니다. 필터의 크기 응답을 시각화합니다. 이를 사용하여 랜덤 데이터로 구성된 벡터를 필터링합니다.

lpFilt = designfilt('lowpassfir','PassbandFrequency',0.25, ...
         'StopbandFrequency',0.35,'PassbandRipple',0.5, ...
         'StopbandAttenuation',65,'DesignMethod','kaiserwin');
fvtool(lpFilt)

dataIn = rand(1000,1);
dataOut = filter(lpFilt,dataIn);

차수 8, 통과대역 주파수 35kHz, 통과대역 리플 0.2dB을 갖는 저역통과 IIR 필터를 설계합니다. 샘플 레이트를 200kHz로 지정합니다. 필터의 크기 응답을 시각화합니다. 이를 사용하여 1000개 샘플로 구성된 랜덤 신호를 필터링합니다.

lpFilt = designfilt('lowpassiir','FilterOrder',8, ...
         'PassbandFrequency',35e3,'PassbandRipple',0.2, ...
         'SampleRate',200e3);
fvtool(lpFilt)

dataIn = randn(1000,1);
dataOut = filter(lpFilt,dataIn);

2차섹션형(SOS)으로 표현되는 필터 계수를 출력합니다.

sos = lpFilt.Coefficients
sos = 4×6

    0.2666    0.5333    0.2666    1.0000   -0.8346    0.9073
    0.1943    0.3886    0.1943    1.0000   -0.9586    0.7403
    0.1012    0.2023    0.1012    1.0000   -1.1912    0.5983
    0.0318    0.0636    0.0318    1.0000   -1.3810    0.5090

정규화된 저지대역 주파수 0.25π rad/s, 통과대역 주파수 0.35π rad/s, 통과대역 리플 0.5dB, 저지대역 감쇠량 65dB을 갖는 최소 차수 고역통과 FIR 필터를 설계합니다. 카이저 윈도우를 사용하여 필터를 설계합니다. 필터의 크기 응답을 시각화합니다. 이를 사용하여 랜덤 데이터로 구성된 1000개 샘플을 필터링합니다.

hpFilt = designfilt('highpassfir','StopbandFrequency',0.25, ...
         'PassbandFrequency',0.35,'PassbandRipple',0.5, ...
         'StopbandAttenuation',65,'DesignMethod','kaiserwin');
fvtool(hpFilt)

dataIn = randn(1000,1);
dataOut = filter(hpFilt,dataIn);

차수 8, 통과대역 주파수 75kHz, 통과대역 리플 0.2dB을 갖는 고역통과 IIR 필터를 설계합니다. 샘플 레이트를 200kHz로 지정합니다. 필터의 크기 응답을 시각화합니다. 랜덤 데이터로 구성된 1000개 샘플의 벡터에 필터를 적용합니다.

hpFilt = designfilt('highpassiir','FilterOrder',8, ...
         'PassbandFrequency',75e3,'PassbandRipple',0.2, ...
         'SampleRate',200e3);
fvtool(hpFilt)

dataIn = randn(1000,1);
dataOut = filter(hpFilt,dataIn);

저역 차단 주파수 500Hz와 고역 차단 주파수 560Hz를 갖는 20차 대역통과 FIR 필터를 설계합니다. 샘플 레이트는 1500Hz입니다. 필터의 크기 응답을 시각화합니다. 이를 사용하여 1000개 샘플을 포함하는 랜덤 신호를 필터링합니다.

bpFilt = designfilt('bandpassfir','FilterOrder',20, ...
         'CutoffFrequency1',500,'CutoffFrequency2',560, ...
         'SampleRate',1500);
fvtool(bpFilt)

dataIn = randn(1000,1);
dataOut = filter(bpFilt,dataIn);

필터 계수를 출력합니다.

b = bpFilt.Coefficients
b = 1×21

   -0.0113    0.0067    0.0125   -0.0445    0.0504    0.0101   -0.1070    0.1407   -0.0464   -0.1127    0.1913   -0.1127   -0.0464    0.1407   -0.1070    0.0101    0.0504   -0.0445    0.0125    0.0067   -0.0113

저역 3dB 주파수 500Hz와 고역 3dB 주파수 560Hz를 갖는 20차 대역통과 IIR 필터를 설계합니다. 샘플 레이트는 1500Hz입니다. 필터의 주파수 응답을 시각화합니다. 이를 사용하여 1000개 샘플로 구성된 랜덤 신호를 필터링합니다.

bpFilt = designfilt('bandpassiir','FilterOrder',20, ...
         'HalfPowerFrequency1',500,'HalfPowerFrequency2',560, ...
         'SampleRate',1500);
fvtool(bpFilt)

dataIn = randn(1000,1);
dataOut = filter(bpFilt,dataIn);

저역 차단 주파수 500Hz와 고역 차단 주파수 560Hz를 갖는 20차 대역저지 FIR 필터를 설계합니다. 샘플 레이트는 1500Hz입니다. 필터의 크기 응답을 시각화합니다. 이를 사용하여 랜덤 데이터로 구성된 1000개 샘플을 필터링합니다.

bsFilt = designfilt('bandstopfir','FilterOrder',20, ...
         'CutoffFrequency1',500,'CutoffFrequency2',560, ...
         'SampleRate',1500);
fvtool(bsFilt)

dataIn = randn(1000,1);
dataOut = filter(bsFilt,dataIn);

저역 3dB 주파수 500Hz와 고역 3dB 주파수 560Hz를 갖는 20차 대역저지 IIR 필터를 설계합니다. 샘플 레이트는 1500Hz입니다. 필터의 크기 응답을 시각화합니다. 이를 사용하여 랜덤 데이터로 구성된 1000개 샘플을 필터링합니다.

bsFilt = designfilt('bandstopiir','FilterOrder',20, ...
         'HalfPowerFrequency1',500,'HalfPowerFrequency2',560, ...
         'SampleRate',1500);
fvtool(bsFilt)

dataIn = randn(1000,1);
dataOut = filter(bsFilt,dataIn);

차수가 7인 전체 대역 미분기 필터를 설계합니다. 필터의 영위상 응답을 표시합니다. 이를 사용하여 랜덤 데이터로 구성된 1000개 샘플의 벡터를 필터링합니다.

dFilt = designfilt('differentiatorfir','FilterOrder',7);
fvtool(dFilt,'MagnitudeDisplay','Zero-phase')

dataIn = randn(1000,1);
dataOut = filter(dFilt,dataIn);

차수가 18인 힐베르트 변환기를 설계합니다. 정규화 천이 폭을 0.25π rad/s로 지정합니다. 필터의 크기 응답을 선형 단위로 표시합니다. 이를 사용하여 랜덤 데이터로 구성된 1000개 샘플의 벡터를 필터링합니다.

hFilt = designfilt('hilbertfir','FilterOrder',18,'TransitionWidth',0.25);
fvtool(hFilt,'MagnitudeDisplay','magnitude')

dataIn = randn(1000,1);
dataOut = filter(hFilt,dataIn);

1kHz로 샘플링된 신호가 있다고 가정합니다. 100Hz와 350Hz 사이의 주파수와 400Hz보다 큰 주파수를 저지하는 필터를 설계합니다. 필터 차수를 60으로 지정합니다. 필터의 주파수 응답을 시각화합니다. 이를 사용하여 1000개 샘플로 구성된 랜덤 신호를 필터링합니다.

mbFilt = designfilt('arbmagfir','FilterOrder',60, ...
         'Frequencies',0:50:500,'Amplitudes',[1 1 1 0 0 0 0 1 1 0 0], ...
         'SampleRate',1000);
fvtool(mbFilt)

dataIn = randn(1000,1);
dataOut = filter(mbFilt,dataIn);

입력 인수

모두 축소

필터 응답과 유형으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 허용된 사양 세트 표를 확장하려면 resp의 가능한 값 중 하나를 클릭하십시오.

 'lowpassfir'

 'lowpassiir'

 'highpassfir'

 'highpassiir'

 'bandpassfir'

 'bandpassiir'

 'bandstopfir'

 'bandstopiir'

 'differentiatorfir'

 'hilbertfir'

 'arbmagfir'

데이터형: char | string

디지털 필터로, designfilt에 의해 생성된 digitalFilter 객체로 지정됩니다. 기존 digitalFilter의 사양을 변경하려면 이 입력값을 사용하십시오.

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: 'FilterOrder',20,'CutoffFrequency',0.4는 저역통과 FIR 필터를 지정하는 데 충분합니다.

일부 Name,Value 쌍 조합은 유효하지 않습니다. 유효한 조합은 필요한 필터 응답과 설계의 주파수 제약 조건 및 크기 제약 조건에 따라 달라집니다.

필터 차수

모두 축소

필터 차수로, 'FilterOrder'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다.

데이터형: double

IIR 설계의 분자 차수로, 'NumeratorOrder'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다.

데이터형: double

IIR 설계의 분모 차수로, 'DenominatorOrder'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다.

데이터형: double

주파수 제약 조건

모두 축소

통과대역 주파수로, 'PassbandFrequency'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 주파수 값은 나이퀴스트 범위 내에 있어야 합니다.

'PassbandFrequency1'은 대역통과 설계나 대역저지 설계의 저역 통과대역 주파수입니다.

'PassbandFrequency2'는 대역통과 설계나 대역저지 설계의 고역 통과대역 주파수입니다.

데이터형: double

저지대역 주파수로, 'StopbandFrequency'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 주파수 값은 나이퀴스트 범위 내에 있어야 합니다.

'StopbandFrequency1'은 대역통과 설계나 대역저지 설계의 저역 저지대역 주파수입니다.

'StopbandFrequency2'는 대역통과 설계나 대역저지 설계의 고역 저지대역 주파수입니다.

데이터형: double

6dB 주파수로, 'CutoffFrequency'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 주파수 값은 나이퀴스트 범위 내에 있어야 합니다.

'CutoffFrequency1'은 대역통과 설계나 대역저지 설계의 저역 6dB 주파수입니다.

'CutoffFrequency2'는 대역통과 설계나 대역저지 설계의 고역 6dB 주파수입니다.

데이터형: double

3dB 주파수로, 'HalfPowerFrequency'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다. 주파수 값은 나이퀴스트 범위 내에 있어야 합니다.

'HalfPowerFrequency1'은 대역통과 설계나 대역저지 설계의 저역 3dB 주파수입니다.

'HalfPowerFrequency2'는 대역통과 설계나 대역저지 설계의 고역 3dB 주파수입니다.

데이터형: double

힐베르트 변환기의 통과대역과 저지대역 사이의 천이 영역의 폭으로, 'TransitionWidth'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다.

데이터형: double

응답 주파수로, 'Frequencies'와 함께 벡터가 쉼표로 구분되어 지정됩니다. 이 변수를 사용하여 임의 크기 응답의 필터가 원하는 진폭을 갖게 되는 주파수를 나열할 수 있습니다. 주파수는 단조 증가(Monotonically Increasing)해야 하고 나이퀴스트 범위 내에 있어야 합니다. 벡터의 첫 번째 요소는 0 또는 –fs/2(여기서 fs는 샘플 레이트임)여야 하고, 마지막 요소는 fs/2여야 합니다. 샘플 레이트를 지정하지 않으면 designfilt는 디폴트 값 2Hz를 사용합니다.

데이터형: double

다중대역 설계에 포함된 대역 수로, 'NumBands'와 함께 10보다 크지 않은 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다.

데이터형: double

다중대역 응답 주파수로, 'BandFrequenciesi'와 함께 숫자형 벡터가 쉼표로 구분되어 지정됩니다. 'BandFrequenciesi'(여기서 i는 1~NumBands임)는 다중대역 설계의 i번째 대역이 원하는 값 'BandAmplitudesi'를 갖게 되는 주파수를 포함하는 벡터입니다. NumBands는 최대 10일 수 있습니다. 주파수는 나이퀴스트 범위 내에 있어야 하고 단조 증가(Monotonically Increasing)하는 순서로 지정되어야 합니다. 인접한 주파수 대역들은 교차점에서 동일한 진폭을 가져야 합니다.

데이터형: double

크기 제약 조건

모두 축소

통과대역 리플로, 'PassbandRipple'과 함께 양의 스칼라(단위: 데시벨)가 쉼표로 구분되어 지정됩니다.

'PassbandRipple1'은 대역저지 설계의 저역 통과대역 리플입니다.

'PassbandRipple2'는 대역저지 설계의 고역 통과대역 리플입니다.

데이터형: double

저지대역 감쇠량으로, 'StopbandAttenuation'과 함께 양의 스칼라(단위: 데시벨)가 쉼표로 구분되어 지정됩니다.

'StopbandAttenuation1'은 대역통과 설계의 저역 저지대역 감쇠량입니다.

'StopbandAttenuation2'는 대역통과 설계의 고역 저지대역 감쇠량입니다.

데이터형: double

임의 크기 응답 필터에 대한 원하는 응답 진폭으로, 'Amplitudes'와 함께 벡터가 쉼표로 구분되어 지정됩니다. 진폭을 선형 단위로 표현합니다. 벡터는 'Frequencies'와 길이가 동일해야 합니다.

데이터형: double

다중대역 응답 진폭으로, 'BandAmplitudesi'와 함께 숫자형 벡터가 쉼표로 구분되어 지정됩니다. 'BandAmplitudesi'(여기서 i는 1~NumBands임)는 다중대역 설계의 i번째 대역에서 원하는 진폭을 포함하는 벡터입니다. NumBands는 최대 10일 수 있습니다. 진폭을 선형 단위로 표현합니다. 'BandAmplitudesi''BandFrequenciesi'와 길이가 동일해야 합니다. 인접한 주파수 대역들은 교차점에서 동일한 진폭을 가져야 합니다.

데이터형: double

설계 방법

모두 축소

설계 방법으로, 'DesignMethod'와 함께 문자형 벡터 또는 string형 스칼라가 쉼표로 구분되어 지정됩니다. 어떤 설계 방법을 선택할지는 사용자가 지정하는 주파수 제약 조건과 크기 제약 조건 세트에 따라 달라집니다.

  • 'butter'는 버터워스 IIR 필터를 설계합니다. 버터워스 필터는 통과대역이 최대로 평탄한 매끄러운 단조 주파수 응답을 가집니다. 이 필터는 평탄한 대신 롤오프 가파름이 낮습니다.

  • 'cheby1'은 체비쇼프 유형 I IIR 필터를 설계합니다. 체비쇼프 유형 I 필터는 통과대역에 등리플이 존재하고 저지대역이 최대로 평탄한 주파수 응답을 가집니다. 통과대역 리플은 롤오프 가파름이 증가할수록 커집니다.

  • 'cheby2'는 체비쇼프 유형 II IIR 필터를 설계합니다. 체비쇼프 유형 II 필터는 통과대역이 최대로 평탄하고 저지대역에 등리플이 존재하는 주파수 응답을 가집니다.

  • 'cls'는 제약된 최소제곱을 사용하여 FIR 필터를 설계합니다. 이 방법은 지정된 임의의 조각별 선형 함수와 필터의 크기 응답 간의 차이를 최소화합니다. 동시에, 이 방법을 사용하면 통과대역 리플과 저지대역 감쇠량에 대한 제약 조건을 설정할 수 있습니다.

  • 'ellip'은 타원 IIR 필터를 설계합니다. 타원 필터는 통과대역과 저지대역 모두에 등리플이 존재하는 주파수 응답을 가집니다.

  • 'equiripple'은 팍스-맥클렐란(Parks-McClellan) 알고리즘을 사용하여 등리플 FIR 필터를 설계합니다. 등리플 필터는 모든 대역에서 최대 리플 크기를 최소화하는 주파수 응답을 가집니다.

  • 'freqsamp'는 주파수 응답을 균일하게 샘플링하고 역 푸리에 변환을 구하여 임의 크기 응답을 갖는 FIR 필터를 설계합니다.

  • 'kaiserwin'은 카이저 윈도우 방법을 사용하여 FIR 필터를 설계합니다. 이 방법은 이상적인 필터의 임펄스 응답을 자르고 카이저 윈도우를 사용하여 결과로 생성되는 잘림 진동을 감쇠시킵니다.

  • 'ls'는 최소제곱을 사용하여 FIR 필터를 설계합니다. 이 방법은 지정된 임의의 조각별 선형 함수와 필터의 크기 응답 간의 차이를 최소화합니다.

  • 'maxflat'은 최대 평탄 FIR 필터를 설계합니다. 이러한 필터는 통과대역이 최대로 평탄한 매끄러운 단조 주파수 응답을 가집니다.

  • 'window'는 최소제곱 근사법을 사용하여 필터 계수를 계산한 후 'Window'를 사용하여 임펄스 응답을 평탄화합니다.

데이터형: char | string

설계 방법 옵션

모두 축소

윈도우로, 'Window'와 함께 길이가 N + 1인 벡터(여기서 N은 필터 차수임)가 쉼표로 구분되어 지정됩니다. 'Window'는 윈도우 이름 또는 윈도우를 생성하는 데 사용된 함수를 지정하는 함수 핸들과 쌍으로 구성될 수도 있습니다. 이러한 함수는 모두 첫 번째 입력값으로 N + 1을 받아야 합니다. 추가 입력값은 셀형 배열을 지정하여 전달할 수 있습니다. 기본적으로, 'Window''freqsamp' 설계 방법의 경우 빈 벡터이고, 'window' 설계 방법의 경우 @hamming입니다.

사용 가능한 윈도우 목록은 윈도우 항목을 참조하십시오.

예: 'Window',hann(N+1)'Window',(1-cos(2*pi*(0:N)'/N))/2는 모두 차수가 N인 필터에 사용하기 위해 핸(Hann) 윈도우를 지정합니다.

예: 'Window','hamming'은 필요한 차수의 해밍 윈도우를 지정합니다.

예: 'Window',@mywindow를 사용하면 자신만의 고유한 윈도우 함수를 정의할 수 있습니다.

예: 'Window',{@kaiser,0.5}는 형태 파라미터로 0.5를 사용하여 필요한 차수의 카이저 윈도우를 지정합니다.

데이터형: double | char | string | function_handle | cell

정확히 일치시킬 대역으로, 'MatchExactly'와 함께 'stopband', 'passband' 또는 'both'가 쉼표로 구분되어 지정됩니다. 'both'는 타원 설계 방법에만 사용할 수 있으며 이때의 디폴트 값입니다. 'stopband''butter' 방법과 'cheby2' 방법의 디폴트 값입니다. 'passband''cheby1' 방법의 디폴트 값입니다.

데이터형: char | string

통과대역 오프셋으로, 'PassbandOffset'과 함께 양의 스칼라(단위: 데시벨)가 쉼표로 구분되어 지정됩니다. 'PassbandOffset'은 통과대역의 필터 이득을 지정합니다.

예: 'PassbandOffset',0은 통과대역에서 단위 이득을 갖는 필터를 생성합니다.

예: 'PassbandOffset',2는 2dB 또는 1.259의 통과대역 이득을 갖는 필터를 생성합니다.

데이터형: double

통과대역 스케일링으로, 'ScalePassband'와 함께 논리형 스칼라가 쉼표로 구분되어 지정됩니다. 'ScalePassband'true로 설정하면 윈도우 생성(Windowing) 후 필터가 영주파수에서 단위 이득을 갖도록 통과대역이 스케일링됩니다.

예: 'Window',{@kaiser,0.1},'ScalePassband',true를 사용하면 영주파수에서의 크기 응답이 정확히 0dB인 필터를 지정할 수 있습니다. 'ScalePassband',false를 지정하는 경우에는 그렇게 되지 않습니다. 이를 확인하려면 fvtool을 사용하여 필터를 시각화하고 확대하십시오.

데이터형: logical

영위상으로, 'ZeroPhase'와 함께 논리형 스칼라가 쉼표로 구분되어 지정됩니다. 'ZeroPhase'true로 설정하면 결과로 생성되는 필터의 영위상 응답이 항상 양수입니다. 이를 통해 결과에 대해 스펙트럼 분해를 수행하여 최소 위상 필터를 구할 수 있습니다.

데이터형: logical

통과대역 최적화 가중치로, 'PassbandWeight'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다.

'PassbandWeight1'은 대역저지 FIR 설계에 대한 저역 통과대역 최적화 가중치입니다.

'PassbandWeight2'는 대역저지 FIR 설계에 대한 고역 통과대역 최적화 가중치입니다.

데이터형: double

저지대역 최적화 가중치로, 'StopbandWeight'와 함께 양의 스칼라가 쉼표로 구분되어 지정됩니다.

'StopbandWeight1'은 대역통과 FIR 설계에 대한 저역 저지대역 최적화 가중치입니다.

'StopbandWeight2'는 대역통과 FIR 설계에 대한 고역 저지대역 최적화 가중치입니다.

데이터형: double

최적화 가중치로, 'Weights'와 함께, 'Amplitudes'와 길이가 같은 벡터나 양의 스칼라가 쉼표로 구분되어 지정됩니다.

데이터형: double

다중대역 가중치로, 'BandWeightsi'와 함께 일련의 양의 스칼라나 벡터가 쉼표로 구분되어 지정됩니다. 'BandWeightsi'(여기서 i는 1~NumBands임)는 다중대역 설계의 i번째 대역의 최적화 가중치를 포함하는 스칼라 또는 벡터입니다. 벡터로 지정된 경우, 'BandWeightsi''BandAmplitudesi'와 길이가 동일해야 합니다.

데이터형: double

샘플 레이트

모두 축소

샘플 레이트로, 'SampleRate'와 함께 양의 스칼라(단위: 헤르츠)가 쉼표로 구분되어 지정됩니다. 정규화 주파수로 작업하려면 'SampleRate'를 2로 설정하거나 이를 단순히 생략하면 됩니다.

데이터형: double

출력 인수

모두 축소

디지털 필터로, digitalFilter 객체로 반환됩니다.

세부 정보

모두 축소

필터 설계 도우미

불완전하거나 일관되지 않은 설계 파라미터 세트를 지정하면 designfilt가 필터 설계 도우미를 열도록 제안합니다.

resp에 대한 인수 설명에, 사용 가능한 모든 응답 유형에 대한 유효한 사양 세트의 전체 목록이 나와 있습니다.

이 도우미는 명령줄에서 designfilt를 호출하는지 아니면 스크립트 또는 함수에서 호출하는지에 따라 각각 다르게 동작합니다.

명령줄에서의 필터 설계 도우미

2kHz로 샘플링된 신호가 있다고 가정합니다. 650Hz보다 큰 주파수 성분을 억제하는 저역통과 FIR 필터를 설계하라는 요청을 받았습니다. 사양 파라미터로 “차단 주파수”를 사용하려고 합니다. MATLAB 명령줄에 다음을 입력합니다.

Fsamp = 2e3;
Fctff = 650;
dee = designfilt('lowpassfir','CutoffFrequency',Fctff, ...
                 'SampleRate',Fsamp);

다음 대화 상자가 화면에 표시되기 때문에 무언가가 잘못된 것 같습니다.

예(Yes)를 클릭하면 코드 생성을 제안하는 새 대화 상자가 표시됩니다. 이전에 정의한 변수가 예상된 위치에 삽입되었는지 확인합니다.

제공된 옵션 중 일부를 살펴본 후 수정된 필터를 테스트하기로 합니다. 확인(OK)을 클릭하여 명령줄에서 다음 코드를 얻습니다.

dee = designfilt('lowpassfir', 'FilterOrder', 10, ...
                 'CutoffFrequency', Fctff, 'SampleRate', Fsamp);

필터 이름을 입력하면 대화 상자의 정보가 다시 표시됩니다.

dee
dee = 
 digitalFilter with properties:

    Coefficients: [1x11 double]
   Specifications:
    FrequencyResponse: 'lowpass'
      ImpulseResponse: 'fir'
           SampleRate: 2000
          FilterOrder: 10
      CutoffFrequency: 650
         DesignMethod: 'window'
 Use fvtool to visualize filter
 Use filter function to filter data

fvtool을 호출하여 dee의 주파수 응답에 대한 플롯을 얻습니다.

fvtool(dee)

차단 주파수가 특별히 예리해 보이지 않습니다. 대부분의 주파수에 대해 응답은 40dB보다 높습니다. 도우미에 “저지대역 감쇠량”이라고 하는 “크기 제약 조건”을 설정하기 위한 옵션이 있다는 사실을 기억합시다. 필터 이름을 입력값으로 사용해 designfilt를 호출하여 도우미를 엽니다.

designfilt(dee)

크기 제약 조건(Magnitude constraints) 드롭다운 메뉴를 클릭하고 통과대역 리플 및 저지대역 감쇠(Passband ripple and stopband attenuation)를 선택합니다. 설계 방법이 윈도우(Window)에서 FIR 제약된 최소제곱(FIR constrained least-squares)로 바뀌었음을 확인합니다. 감쇠량의 디폴트 값은 40보다 큰 60dB입니다. 확인(OK)을 클릭하고 결과로 생성되는 필터를 시각화합니다.

dee = designfilt('lowpassfir', 'FilterOrder', 10, ...
                 'CutoffFrequency', Fctff, ...
                 'PassbandRipple', 1, 'StopbandAttenuation', 60, ...
                 'SampleRate', Fsamp);
fvtool(dee)

차단 주파수가 여전히 예리해 보이지 않습니다. 감쇠량은 실제로 60dB이지만, 900Hz보다 높은 주파수에 적용됩니다.

필터를 입력값으로 사용하여 designfilt를 다시 불러옵니다.

designfilt(dee)

도우미가 다시 나타납니다.

수락된 주파수와 거부된 주파수 사이의 차이를 좁히려면 필터의 차수를 늘리거나 주파수 제약 조건(Frequency constraints)차단(6dB) 주파수(Cutoff (6dB) frequency)에서 통과대역 주파수 및 저지대역 주파수(Passband and stopband frequencies)로 변경하십시오. 필터 차수를 10에서 50으로 변경하면 더욱 예리한 필터가 생성됩니다.

dee = designfilt('lowpassfir', 'FilterOrder', 50, ...
                 'CutoffFrequency', 650, ...
                 'PassbandRipple', 1, 'StopbandAttenuation', 60, ...
                 'SampleRate', 2000);
fvtool(dee)

통과대역 주파수와 저지대역 주파수를 각각 600Hz와 700Hz로 설정하는 간단한 실험을 통해 유사한 필터를 얻을 수 있습니다.

dee = designfilt('lowpassfir', 'PassbandFrequency', 600, ...
                 'StopbandFrequency', 700, ...
                 'PassbandRipple', 1, 'StopbandAttenuation', 60, ...
                 'SampleRate', 2000);
fvtool(dee)

스크립트 또는 함수에서의 필터 설계 도우미

2kHz로 샘플링된 신호가 있다고 가정합니다. 700Hz 미만의 주파수를 저지하는 고역통과 필터를 설계하라는 요청을 받았습니다. 신호의 위상은 신경 쓰지 않으며, 낮은 차수의 필터를 사용하여 작업해야 합니다. 따라서 IIR 필터가 적당할 수 있습니다. 어떤 필터 차수가 최상인지 알지 못하므로, 차수를 입력값으로 받는 함수를 작성합니다. MATLAB 편집기를 열고 파일을 생성합니다.

function dataOut = hipassfilt(N,dataIn)
hpFilter = designfilt('highpassiir','FilterOrder',N);
dataOut = filter(hpFilter,dataIn);
end

함수를 테스트하기 위해 주파수가 500Hz와 800Hz인 두 개의 정현파로 구성된 신호를 생성하고 0.1초 동안의 샘플을 생성합니다. 초기 추측값으로 5차 필터가 타당할 수 있습니다. driveHPfilt.m이라는 스크립트를 생성합니다.

% script driveHPfilt.m
Fsamp = 2e3;
Fsm = 500;
Fbg = 800;
t = 0:1/Fsamp:0.1;
sgin = sin(2*pi*Fsm*t)+sin(2*pi*Fbg*t);
Order = 5;
sgout = hipassfilt(Order,sgin);

명령줄에서 스크립트를 실행하면 오류 메시지가 표시됩니다.

오류 메시지에는 도우미를 열어 MATLAB 코드를 수정할 수 있는 옵션이 제공됩니다. Click here를 클릭하여 화면에 필터 설계 도우미를 표시합니다.

다음과 같은 문제가 발견되었습니다. 주파수 제약 조건을 지정하지 않았습니다. 또한, 샘플 레이트를 설정하지 않았습니다. 실험해 보면, 주파수 단위(Frequency units)Hz로, 통과대역 주파수(Passband frequency)를 700Hz로, 입력값 Fs를 2000Hz로 지정할 수 있음을 확인할 수 있습니다. 설계 방법(Design Method)버터워스(Butterworth)에서 체비쇼프 유형 I(Chebyshev Type I)로 변경됩니다. 확인(OK)을 클릭하면 다음이 표시됩니다.

도우미가 designfilt를 호출한 파일을 올바르게 식별했습니다. 예(Yes)를 클릭하여 변경 내용을 적용합니다. 함수에 수정된 MATLAB 코드가 포함되었습니다.

function dataOut = hipassfilt(N,dataIn)
% hpFilter = designfilt('highpassiir','FilterOrder',N);
hpFilter = designfilt('highpassiir', 'FilterOrder', N, ...
                'PassbandFrequency', 700, 'PassbandRipple', 1, ...
                'SampleRate', 2000);
dataOut = filter(hpFilter,dataIn);
end

이제, 여러 필터 차수 값을 사용하여 스크립트를 실행할 수 있습니다. 설계 제약 조건에 따라 사양 세트를 변경할 수 있습니다.

필터 설계 도우미 기본 설정

필터 설계 도우미를 제공하지 않도록 designfilt를 설정할 수 있습니다. 이 동작은 MATLAB 기본 설정을 지정하며, setpref를 사용하여 설정 해제할 수 있습니다.

  • 도우미가 매번 제공되도록 하려면 setpref('dontshowmeagain','filterDesignAssistant',false)를 사용하십시오. 도우미를 비활성화한 후, 이 명령을 사용하여 다시 가져올 수 있습니다.

  • 도우미를 영구적으로 비활성화하려면 setpref('dontshowmeagain','filterDesignAssistant',true)를 사용하십시오. 또한 초기 대화 상자에서 이 메시지를 다시 표시하지 않습니다(Do not show this message again)를 클릭할 수도 있습니다.

오류 수정 여부를 묻는 메시지를 표시하지 않고 오류를 항상 수정하도록 designfilt를 설정할 수 있습니다. 이 동작은 MATLAB 기본 설정을 지정하며, setpref를 사용하여 설정 해제할 수 있습니다.

  • designfilt가 확인을 요청하지 않고 MATLAB 코드를 수정하도록 하려면 setpref('dontshowmeagain','filterDesignAssistantCodeCorrection',false)를 사용하십시오. 확인 대화 상자에서 항상 적용(Always accept)을 클릭해도 됩니다.

  • 변경 내용을 적용하기를 원한다고 확인한 경우에만 designfilt가 MATLAB 코드를 수정하도록 하려면 setpref('dontshowmeagain','filterDesignAssistantCodeCorrection',true)를 사용하십시오. 이 명령을 사용하면 확인 대화 상자에서 항상 적용(Always accept)을 클릭한 효과를 취소할 수 있습니다.

문제 해결

유효하지 않은 사양 세트가 지정되었을 때 designfilt가 대화 상자나 오류 메시지에 포함된 링크를 통해 필터 설계 도우미를 제공하지 않는 경우가 있습니다.

  • MATLAB 툴스트립에서 또는 Ctrl+Enter를 눌러 코드 섹션 실행을 사용하는 경우 도우미가 제공되지 않습니다. 자세한 내용은 파일을 코드 섹션으로 분할하기 (MATLAB) 항목을 참조하십시오.

  • 코드가 designfilt를 여러 번 호출하고 이들 호출 중 적어도 하나가 잘못된 경우, 그리고 다음과 같은 경우 도우미가 제공되지 않습니다.

    • 명령줄에 코드를 붙여넣고 Enter 키를 눌러 실행합니다.

    • 편집기에서 코드를 선택하고 F9 키를 눌러 실행합니다.

  • 익명 함수를 사용하여 designfilt를 실행하는 경우 도우미가 제공되지 않습니다. 자세한 내용은 익명 함수 (MATLAB) 항목을 참조하십시오. 예를 들어, 다음 입력값은 도우미를 제공합니다.

    d = designfilt('lowpassfir','CutoffFrequency',0.6)
    다음 입력값은 도우미를 제공하지 않습니다.
    myFilterDesigner = @designfilt;
    d = myFilterDesigner('lowpassfir','CutoffFrequency',0.6)

  • eval을 사용하여 designfilt를 실행하는 경우 도우미가 제공되지 않습니다. 예를 들어, 다음 입력값은 도우미를 제공합니다.

    d = designfilt('lowpassfir','CutoffFrequency',0.6)
    다음 입력값은 도우미를 제공하지 않습니다.
    myFilterDesigner = ...
        sprintf('designfilt(''%s'',''CutoffFrequency'',%f)', ...
                            'lowpassfir',0.6);
    d = eval(myFilterDesigner)

필터 설계 도우미를 실행하려면 Java® 소프트웨어와 MATLAB 데스크탑이 필요합니다. MATLAB을 -nojvm, -nodisplay 또는 -nodesktop 옵션과 함께 실행하는 경우에는 지원되지 않습니다.

R2014a에 개발됨