Main Content

highpass

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

설명

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

y = highpass(x,fpass,fs)xfsHz의 레이트로 샘플링되었음을 지정합니다. fpass는 필터의 통과대역 주파수(단위: 헤르츠)입니다.

예제

y = highpass(xt,fpass)fpass Hz의 통과대역 주파수를 갖는 필터를 사용하여 타임테이블 xt의 데이터에 고역통과 필터를 적용합니다. 함수는 타임테이블의 모든 변수와 각 변수 내에 있는 모든 열을 개별적으로 필터링합니다.

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

예제

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

예제

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

예제

모두 축소

1초 동안 1kHz로 샘플링된 신호를 생성합니다. 신호는 50Hz와 250Hz의 두 가지 톤을 포함하고 있으며 분산이 1/100인 가우스 백색 잡음에 묻혀 있습니다. 고주파수 톤은 저주파수 톤보다 진폭이 두 배 더 큽니다.

fs = 1e3;
t = 0:1/fs:1;

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

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

highpass(x,150,fs)

Figure contains 2 axes objects. Axes object 1 with title Highpass Filtering (Fpass = 150 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.

신호에 고역통과 필터를 적용하여 멜로디와 반주를 분리합니다. 통과대역 주파수를 450Hz로 지정합니다. 시간 영역과 주파수 영역에서 원래 신호와 필터링된 신호를 플로팅합니다.

hong = highpass(song,450,fs);

% To hear, type sound(hong,fs)

highpass(song,450,fs)

Figure contains 2 axes objects. Axes object 1 with title Highpass Filtering (Fpass = 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(hong,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.

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

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

[y1,d1] = highpass(x,200,fs,ImpulseResponse="iir",Steepness=0.5);
[y2,d2] = highpass(x,200,fs,ImpulseResponse="iir",Steepness=0.8);
[y3,d3] = highpass(x,200,fs,ImpulseResponse="iir",Steepness=0.95);

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

Figure contains an axes object. The axes object with title Fres = 1.7341 Hz, 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])
ylim([-130 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.

입력 인수

모두 축소

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

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

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

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

정규화된 통과대역 주파수로, 구간 (0, 1)의 스칼라로 지정됩니다.

통과대역 주파수로, 구간 (0, fs/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보다 낮은 주파수를 30dB만큼 감쇠하는 최소 차수 IIR 필터를 사용하여 입력값을 필터링합니다.

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

예: 'ImpulseResponse','iir','StopbandAttenuation',30fpass보다 낮은 주파수를 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) 내 스칼라로 지정됩니다. 경사도가 증가하면 필터 응답이 이상적인 고역통과 응답에 근접하지만, 결과로 생성되는 필터 길이와 필터링 연산의 계산 비용도 증가하게 됩니다. 자세한 내용은 고역통과 필터 경사도 항목을 참조하십시오.

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

출력 인수

모두 축소

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

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

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

  • 필터 분석기를 사용하여 필터 응답을 시각화합니다.

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

세부 정보

모두 축소

고역통과 필터 경사도

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

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

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

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

  • 필터의 천이 폭 Wfpassfstop입니다. 여기서 fpass는 지정된 통과대역 주파수입니다.

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

s를 지정할 경우 highpass 함수는 Steepness와 관련하여 천이 폭을 다음과 같이 계산합니다.

W = (1 – s) × fpass.

  • Steepness가 0.5이면 천이 폭은 fpass의 50%에 해당합니다.

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

Steepness의 디폴트 값은 0.85이고, 이 값은 fpass의 15%의 천이 폭에 해당합니다.

버전 내역

R2018a에 개발됨