highpass
신호에 고역통과 필터 적용하기
구문
설명
는 이름-값 인수를 사용하여, 위에 열거된 구문에 대한 추가 옵션을 지정합니다. 필터의 저지대역 감쇠량, 고역통과 필터 경사도, 임펄스 응답 유형을 변경할 수 있습니다.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)
음악 신호에 고역통과 필터 적용하기
기본적인 디지털 음악 신시사이저를 구현하고 이 신시사이저에서 노래를 재생합니다. 샘플 레이트를 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)
신호에 고역통과 필터를 적용하여 멜로디와 반주를 분리합니다. 통과대역 주파수를 450Hz로 지정합니다. 시간 영역과 주파수 영역에서 원래 신호와 필터링된 신호를 플로팅합니다.
hong = highpass(song,450,fs);
% To hear, type sound(hong,fs)
highpass(song,450,fs)
멜로디의 스펙트로그램을 플로팅합니다.
figure pspectrum(hong,fs,"spectrogram",TimeResolution=0.31, ... OverlapPercent=0,MinThreshold=-60)
고역통과 필터 경사도
통과대역 주파수가 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])
필터의 주파수 응답을 계산하고 플로팅합니다.
[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])
입력 인수
x
— 입력 신호
벡터 | 행렬
입력 신호로, 벡터나 행렬로 지정됩니다.
예: sin(2*pi*(0:127)/16)+randn(1,128)/100
은 잡음이 있는 정현파를 지정합니다.
예: [2 1].*sin(2*pi*(0:127)'./[16 64])
는 2채널 정현파를 지정합니다.
데이터형: single
| double
복소수 지원 여부: 예
wpass
— 정규화된 통과대역 주파수
(0, 1) 범위의 스칼라
정규화된 통과대역 주파수로, 구간 (0, 1)의 스칼라로 지정됩니다.
fpass
— 통과대역 주파수
(0, fs
/2) 범위의 스칼라
통과대역 주파수로, 구간 (0, fs
/2)의 스칼라로 지정됩니다.
fs
— 샘플 레이트
양의 실수형 스칼라
샘플 레이트로, 양의 실수형 스칼라로 지정됩니다.
xt
— 입력 타임테이블
timetable형
입력 타임테이블입니다. 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=30
은 fpass
보다 낮은 주파수를 30dB만큼 감쇠하는 최소 차수 IIR 필터를 사용하여 입력값을 필터링합니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: 'ImpulseResponse','iir','StopbandAttenuation',30
은 fpass
보다 낮은 주파수를 30dB만큼 감쇠하는 최소 차수 IIR 필터를 사용하여 입력값을 필터링합니다.
ImpulseResponse
— 임펄스 응답 유형
"auto"
(디폴트 값) | "fir"
| "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 필터를 설계합니다. 차수를 줄이면 천이 대역 경사도가 떨어지게 됩니다.
신호를 필터링하고 지연을 보정합니다.
Steepness
— 천이 대역 경사도
0.85 (디폴트 값) | 구간 [0.5, 1) 내 스칼라
천이 대역 경사도로, 구간 [0.5, 1) 내 스칼라로 지정됩니다. 경사도가 증가하면 필터 응답이 이상적인 고역통과 응답에 근접하지만, 결과로 생성되는 필터 길이와 필터링 연산의 계산 비용도 증가하게 됩니다. 자세한 내용은 고역통과 필터 경사도 항목을 참조하십시오.
StopbandAttenuation
— 필터의 저지대역 감쇠량
60
(디폴트 값) | 양의 스칼라(단위: dB)
필터의 저지대역 감쇠량으로, 양의 스칼라(단위: dB)로 지정됩니다.
출력 인수
y
— 필터링된 신호
벡터 | 행렬 | timetable형
필터링된 신호로, 입력값과 동일한 차원을 갖는 벡터, 행렬 또는 timetable형으로 반환됩니다.
d
— 고역통과 필터
digitalFilter
객체
세부 정보
고역통과 필터 경사도
Steepness
인수는 필터의 천이 영역 폭을 조정합니다. 경사도가 낮을수록 천이 영역이 더 넓어집니다. 경사도가 높을수록 천이 영역이 더 좁아집니다.
필터 경사도를 해석할 때 다음 정의를 참고하십시오.
나이퀴스트 주파수 fNyquist는 에일리어싱 없이 지정된 속도로 샘플링할 수 있는, 신호의 가장 높은 주파수 성분입니다. fNyquist는 입력 신호에 시간 정보가 없는 경우에는 1(×π rad/sample)이고, 입력 신호가 타임테이블이거나 샘플 레이트를 지정하는 경우에는
fs
/2Hz입니다.필터의 저지대역 주파수 fstop은
StopbandAttenuation
으로 지정한 감쇠량에 해당하는 주파수로서, 이 주파수 아래 영역에서는 감쇠량이 지정된 감쇠량보다 크거나 같습니다.필터의 천이 폭 W는
fpass
– fstop입니다. 여기서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에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)