Main Content

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

bandpass

신호에 대역통과 필터 적용하기

설명

y = bandpass(x,wpass)는 통과대역 주파수 범위가 요소를 2개 가진 벡터 wpass로 지정되고 π rad/sample의 정규화된 단위로 표현되는 대역통과 필터를 사용하여 입력 신호 x를 필터링합니다. bandpass는 60dB의 저지대역 감쇠량을 갖는 최소 차수 필터를 사용하고 필터로 인해 발생하는 지연을 보정합니다. x가 행렬인 경우 함수는 각 열을 개별적으로 필터링합니다.

예제

y = bandpass(x,fpass,fs)xfs Hz의 레이트로 샘플링되었음을 지정합니다. 요소를 2개 가진 벡터 fpass는 필터의 통과대역 주파수 범위(단위: 헤르츠)를 지정합니다.

y = bandpass(xt,fpass)는 통과대역 주파수 범위(단위: 헤르츠)가 요소를 2개 가진 벡터 fpass로 지정되는 필터를 사용하여 타임테이블 xt의 데이터에 대역통과 필터를 적용합니다. 함수는 타임테이블의 모든 변수와 각 변수 내에 있는 모든 열을 개별적으로 필터링합니다.

예제

y = bandpass(___,Name=Value)는 이름-값 인수를 사용하여, 위에 열거된 구문에 대한 추가 옵션을 지정합니다. 필터의 저지대역 감쇠량, 대역통과 필터 경사도, 임펄스 응답 유형을 변경할 수 있습니다.

예제

[y,d] = bandpass(___)는 입력값을 필터링하는 데 사용되는 digitalFilter 객체 d도 반환합니다.

bandpass(___)에 출력 인수를 지정하지 않으면 입력 신호를 플로팅하고 필터링된 신호를 겹쳐 표시합니다.

예제

모두 축소

1초 동안 1kHz로 샘플링된 신호를 생성합니다. 신호에는 첫 번째 50Hz, 두 번째 150Hz, 세 번째 250Hz의 세 가지 톤이 포함되어 있습니다. 고주파수 톤과 저주파수 톤 모두 진폭이 중간 톤보다 두 배 더 큽니다. 신호는 분산이 1/100인 가우스 백색 잡음에 묻혀 있습니다.

fs = 1e3;
t = 0:1/fs:1;
x = [2 1 2]*sin(2*pi*[50 150 250]'.*t) + randn(size(t))/10;

신호에 대역통과 필터를 적용하여 저주파수 톤과 고주파수 톤을 제거합니다. 통과대역 주파수를 100Hz와 200Hz로 지정합니다. 원래 신호 및 필터링된 신호와 함께 이 신호들의 스펙트럼도 표시합니다.

bandpass(x,[100 200],fs)

Figure contains 2 axes objects. Axes object 1 with title Bandpass Filtering (Fpass = [100 200] Hz), xlabel Time (s) contains 2 objects of type line. These objects represent Original, Filtered. Axes object 2 with xlabel Frequency (Hz), ylabel Power Spectrum (dB) contains 2 objects of type line. These objects represent Original, Filtered.

기본적인 디지털 음악 신시사이저를 구현하고 이 신시사이저에서 노래를 재생합니다. 샘플 레이트를 2kHz로 지정합니다. 노래의 스펙트로그램을 플로팅합니다.

fs = 2e3;
t = 0:1/fs:0.3-1/fs; fq = [-Inf -9:2]/12;
note = @(f,g) [1 1 1]*sin(2*pi*440*2.^[fq(g)-1 fq(g) fq(f)+1]'.*t);

mel = [5 3 1 3 5 5 5 0 3 3 3 0 5 8 8 0 5 3 1 3 5 5 5 5 3 3 5 3 1]+1;
acc = [5 0 8 0 5 0 5 5 3 0 3 3 5 0 8 8 5 0 8 0 5 5 5 0 3 3 5 0 1]+1;

song = [];
for kj = 1:length(mel)
    song = [song note(mel(kj),acc(kj)) zeros(1,0.01*fs)];
end
song = song/(max(abs(song))+0.1);

% To hear, type sound(song,fs)

pspectrum(song,fs,"spectrogram",TimeResolution=0.31, ...
    OverlapPercent=0,MinThreshold=-60)

Figure contains an axes object. The axes object with title Fres = 8.2798 Hz, Tres = 310 ms, xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

신호에 대역통과 필터를 적용하여 중간 레지스터를 다른 2개의 레지스터로부터 분리합니다. 통과대역 주파수를 230Hz와 450Hz로 지정합니다. 시간 영역과 주파수 영역에서 원래 신호와 필터링된 신호를 플로팅합니다.

pong = bandpass(song,[230 450],fs);

% To hear, type sound(pong,fs)

bandpass(song,[230 450],fs)

Figure contains 2 axes objects. Axes object 1 with title Bandpass Filtering (Fpass = [230 450] Hz), xlabel Time (s) contains 2 objects of type line. These objects represent Original, Filtered. Axes object 2 with xlabel Frequency (kHz), ylabel Power Spectrum (dB) contains 2 objects of type line. These objects represent Original, Filtered.

중간 음역의 스펙트로그램을 플로팅합니다.

figure
pspectrum(pong,fs,"spectrogram",TimeResolution=0.31, ...
    OverlapPercent=0,MinThreshold=-60)

Figure contains an axes object. The axes object with title Fres = 8.2798 Hz, Tres = 310 ms, xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

통과대역 폭이 100Hz인 무한 임펄스 응답 대역통과 필터를 사용하여 1kHz로 샘플링된 백색 잡음을 필터링합니다. 서로 다른 경사도 값을 사용합니다. 필터링된 신호의 스펙트럼을 플로팅합니다.

fs = 1000;
x = randn(20000,1);

[y1,d1] = bandpass(x,[ 50 150],fs,ImpulseResponse="iir",Steepness=0.5);
[y2,d2] = bandpass(x,[200 300],fs,ImpulseResponse="iir",Steepness=0.8);
[y3,d3] = bandpass(x,[350 450],fs,ImpulseResponse="iir",Steepness=0.95);

pspectrum([y1 y2 y3],fs)
legend("Steepness = " + [0.5 0.8 0.95],Location="south")

Figure contains an axes object. The axes object with title Fres = 976.801 mHz, xlabel Frequency (Hz), ylabel Power Spectrum (dB) contains 3 objects of type line. These objects represent Steepness = 0.5, Steepness = 0.8, Steepness = 0.95.

필터의 주파수 응답을 계산하고 플로팅합니다.

[h1,f] = freqz(d1,1024,fs);
[h2,~] = freqz(d2,1024,fs);
[h3,~] = freqz(d3,1024,fs);

plot(f,mag2db(abs([h1 h2 h3])))
legend("Steepness = " + [0.5 0.8 0.95],Location="south")
ylim([-100 10])

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Steepness = 0.5, Steepness = 0.8, Steepness = 0.95.

저역 통과대역 주파수와 고역 통과대역 주파수의 경사도 값을 서로 다르게 지정하여 필터를 비대칭으로 만듭니다.

[y1,d1] = bandpass(x,[ 50 150],fs,ImpulseResponse="iir",Steepness=[0.5 0.8]);
[y2,d2] = bandpass(x,[200 300],fs,ImpulseResponse="iir",Steepness=[0.5 0.8]);
[y3,d3] = bandpass(x,[350 450],fs,ImpulseResponse="iir",Steepness=[0.5 0.8]);

pspectrum([y1 y2 y3],fs)

Figure contains an axes object. The axes object with title Fres = 976.801 mHz, xlabel Frequency (Hz), ylabel Power Spectrum (dB) contains 3 objects of type line.

필터의 주파수 응답을 계산하고 플로팅합니다.

[h1,f] = freqz(d1,1024,fs);
[h2,~] = freqz(d2,1024,fs);
[h3,~] = freqz(d3,1024,fs);

plot(f,mag2db(abs([h1 h2 h3])))
ylim([-100 10])

Figure contains an axes object. The axes object contains 3 objects of type line.

입력 인수

모두 축소

입력 신호로, 벡터나 행렬로 지정됩니다.

예: sin(2*pi*(0:127)/16)+randn(1,128)/100은 잡음이 있는 정현파를 지정합니다.

예: [2 1].*sin(2*pi*(0:127)'./[16 64])는 2채널 정현파를 지정합니다.

데이터형: single | double
복소수 지원 여부:

정규화된 통과대역 주파수 범위로, 구간 (0, 1)에 있는 요소를 2개 가진 벡터로 지정됩니다.

통과대역 주파수 범위로, 구간 (0, fs/2)에 있는 요소를 2개 가진 벡터로 지정됩니다.

샘플 레이트로, 양의 실수형 스칼라로 지정됩니다.

입력 타임테이블입니다. xt는 균일한 간격으로 증가하는 유한한 duration형 행 시간값(단위: 초)을 포함해야 합니다.

타임테이블에 누락되거나 중복된 시간 지점이 포함된 경우 누락되거나 중복되거나 불균일하게 분포된 시간값이 포함된 타임테이블 정리하기에 나와 있는 팁을 활용하여 수정할 수 있습니다.

예: timetable(seconds(0:4)',randn(5,1),randn(5,2))에는 4초 동안 1Hz로 샘플링된 단일채널 랜덤 신호와 2채널 랜덤 신호가 포함됩니다.

예: timetable(randn(5,1),randn(5,2),SampleRate=1)에는 4초 동안 1Hz로 샘플링된 단일채널 랜덤 신호와 2채널 랜덤 신호가 포함됩니다.

이름-값 인수

선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

예: ImpulseResponse="iir",StopbandAttenuation=30fpass(1)보다 작은 주파수와 fpass(2)보다 큰 주파수를 30dB만큼 감쇠하는 최소 차수 IIR 필터를 사용하여 입력값을 필터링합니다.

R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.

예: 'ImpulseResponse','iir','StopbandAttenuation',30fpass(1)보다 작은 주파수와 fpass(2)보다 큰 주파수를 30dB만큼 감쇠하는 최소 차수 IIR 필터를 사용하여 입력값을 필터링합니다.

필터의 임펄스 응답 유형으로, "fir", "iir" 또는 "auto"로 지정됩니다.

  • "fir" — 이 함수는 최소 차수의 선형 위상 유한 임펄스 응답(FIR) 필터를 설계합니다. 지연을 보정하기 위해 함수는 입력 신호에 N/2개의 0을 추가합니다. 여기서 N은 필터 차수입니다. 그런 다음 함수는 신호를 필터링하고, 출력값의 처음 N/2개 샘플을 제거합니다.

    이 경우 입력 신호는 사양을 충족하는 필터보다 최소 2배 더 길어야 합니다.

  • "iir" — 이 함수는 최소 차수의 무한 임펄스 응답(IIR) 필터를 설계하고, filtfilt 함수를 사용하여 영위상 필터링을 수행하고 필터 지연을 보정합니다.

    신호가 사양을 충족하는 필터보다 최소 3배 더 길지 않을 경우 함수는 차수가 더 낮고 따라서 경사도가 더 작은 필터를 설계합니다.

  • "auto" — 이 함수는 입력 신호가 충분히 긴 경우에는 최소 차수 FIR 필터를 설계하고 그 외의 경우에는 최소 차수 IIR 필터를 설계합니다. 구체적으로 함수는 다음 단계를 따릅니다.

    • 사양을 충족하는 데 필요한 FIR 필터의 최소 차수를 계산합니다. 필요한 필터 차수보다 신호가 최소 2배 더 긴 경우 FIR 필터를 설계하고 사용합니다.

    • 신호가 충분히 길지 않은 경우에는 사양을 충족하는 데 필요한 IIR 필터의 최소 차수를 계산합니다. 필요한 필터 차수보다 신호가 최소 3배 더 긴 경우 IIR 필터를 설계하고 사용합니다.

    • 신호가 충분히 길지 않은 경우 차수를 신호 길이의 1/3로 자르고 이 차수를 갖는 IIR 필터를 설계합니다. 차수를 줄이면 천이 대역 경사도가 떨어지게 됩니다.

    • 신호를 필터링하고 지연을 보정합니다.

천이 대역 경사도로, 구간 [0.5, 1) 내 스칼라 또는 이 구간 내의 요소를 2개 가진 벡터로 지정됩니다. 경사도가 증가하면 필터 응답이 이상적인 대역통과 응답에 근접하지만, 결과로 생성되는 필터 길이와 필터링 연산의 계산 비용도 증가하게 됩니다. 자세한 내용은 대역통과 필터 경사도 항목을 참조하십시오.

필터의 저지대역 감쇠량으로, 양의 스칼라(단위: dB)로 지정됩니다.

출력 인수

모두 축소

필터링된 신호로, 입력값과 동일한 차원을 갖는 벡터, 행렬 또는 timetable형으로 반환됩니다.

필터링 연산에 사용되는 대역통과 필터로, digitalFilter 객체로 반환됩니다.

  • filter(d,x)를 사용하여 신호 xd로 필터링합니다. bandpass 함수와 달리, filter 함수는 필터 지연을 보정하지 않습니다. filtfiltfftfilt 함수를 digitalFilter 객체와 함께 사용할 수도 있습니다.

  • FVTool을 사용하여 필터 응답을 시각화합니다.

  • designfilt를 사용하여 주파수 응답 사양을 기반으로 디지털 필터를 편집하거나 생성합니다.

세부 정보

모두 축소

대역통과 필터 경사도

Steepness 인수는 필터의 천이 영역 폭을 조정합니다. 경사도가 낮을수록 천이 영역이 더 넓어집니다. 경사도가 높을수록 천이 영역이 더 좁아집니다.

필터 경사도를 해석할 때 다음 정의를 참고하십시오.

  • 나이퀴스트 주파수 fNyquist는 에일리어싱 없이 지정된 속도로 샘플링할 수 있는, 신호의 가장 높은 주파수 성분입니다. fNyquist는 입력 신호에 시간 정보가 없는 경우에는 1(×π rad/sample)이고, 입력 신호가 타임테이블이거나 샘플 레이트를 지정하는 경우에는 fs/2Hz입니다.

  • 필터의 하부 및 상부 저지대역 주파수 fstoplowerfstopupperStopbandAttenuation으로 지정한 감쇠량에 해당하는 주파수로서, 하부 주파수보다 아래쪽 영역 또는 상부 주파수보다 위쪽 영역에서는 감쇠량이 지정된 감쇠량보다 크거나 같습니다.

  • 필터의 하부 천이 폭 Wlowerfpasslower – fstoplower이고, 여기서 저역 통과대역 주파수 fpasslowerfpass의 첫 번째 요소입니다.

  • 필터의 상부 천이 폭 Wupperfstopupperfpassupper이고, 여기서 고역 통과대역 주파수fpassupperfpass의 두 번째 요소입니다.

  • 대부분의 이상적이지 않은 필터에서는 통과대역에서도 입력 신호가 감쇠됩니다. 이러한 주파수 종속 감쇠량의 최댓값을 통과대역 리플이라고 합니다. bandpass에 사용되는 모든 필터는 통과대역 리플이 0.1dB입니다.

Frequency response of a bandpass filter with the Nyquist frequency, the lower and upper passband frequencies, the upper and lower stopband frequencies, the upper and lower transition widths, the stopband attenuation, and the passband ripple

천이 대역 폭을 조정하려면 Steepness를 요소를 2개 가진 벡터 [slower,supper] 또는 스칼라로 지정하면 됩니다. Steepness를 벡터로 지정할 경우 함수는 다음을 수행합니다.

  • 하부 천이 폭을 다음과 같이 계산합니다.

    Wlower = (1 – slower) × fpasslower.

    • Steepness의 첫 번째 요소가 0.5이면 천이 폭은 fpasslower의 50%에 해당합니다.

    • Steepness의 첫 번째 요소가 1에 근접하면 천이 폭은 fpasslower의 1%라는 최솟값에 도달할 때까지 급격하게 좁아집니다.

  • 상부 천이 폭을 다음과 같이 계산합니다.

    Wupper = (1 – supper) × (fNyquistfpassupper).

    • Steepness의 두 번째 요소가 0.5이면 천이 폭은 (fNyquistfpassupper).의 50%에 해당합니다

    • Steepness의 두 번째 요소가 1에 근접하면 천이 폭은 (fNyquistfpassupper)의 1%라는 최솟값에 도달할 때까지 급격하게 좁아집니다.

Steepness를 스칼라로 지정할 경우 함수는 하부 및 상부 천이 폭이 동일한 필터를 설계합니다. Steepness의 디폴트 값은 0.85입니다.

버전 내역

R2018a에 개발됨