이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
bandpass
신호에 대역통과 필터 적용하기
구문
설명
는 이름-값 인수를 사용하여, 위에 열거된 구문에 대한 추가 옵션을 지정합니다. 필터의 저지대역 감쇠량, 대역통과 필터 경사도, 임펄스 응답 유형을 변경할 수 있습니다.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)
음악 신호에 대역통과 필터 적용하기
기본적인 디지털 음악 신시사이저를 구현하고 이 신시사이저에서 노래를 재생합니다. 샘플 레이트를 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)
신호에 대역통과 필터를 적용하여 중간 레지스터를 다른 2개의 레지스터로부터 분리합니다. 통과대역 주파수를 230Hz와 450Hz로 지정합니다. 시간 영역과 주파수 영역에서 원래 신호와 필터링된 신호를 플로팅합니다.
pong = bandpass(song,[230 450],fs);
% To hear, type sound(pong,fs)
bandpass(song,[230 450],fs)
중간 음역의 스펙트로그램을 플로팅합니다.
figure pspectrum(pong,fs,"spectrogram",TimeResolution=0.31, ... OverlapPercent=0,MinThreshold=-60)
대역통과 필터 경사도
통과대역 폭이 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")
필터의 주파수 응답을 계산하고 플로팅합니다.
[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])
저역 통과대역 주파수와 고역 통과대역 주파수의 경사도 값을 서로 다르게 지정하여 필터를 비대칭으로 만듭니다.
[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)
필터의 주파수 응답을 계산하고 플로팅합니다.
[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])
입력 인수
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) 범위 내의 요소를 2개 가진 벡터
정규화된 통과대역 주파수 범위로, 구간 (0, 1)에 있는 요소를 2개 가진 벡터로 지정됩니다.
fpass
— 통과대역 주파수 범위
(0, fs
/2) 범위 내의 요소를 2개 가진 벡터
통과대역 주파수 범위로, 구간 (0, fs
/2)에 있는 요소를 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(1)
보다 작은 주파수와 fpass(2)
보다 큰 주파수를 30dB만큼 감쇠하는 최소 차수 IIR 필터를 사용하여 입력값을 필터링합니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: 'ImpulseResponse','iir','StopbandAttenuation',30
은 fpass(1)
보다 작은 주파수와 fpass(2)
보다 큰 주파수를 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) 내의 요소를 2개 가진 벡터
천이 대역 경사도로, 구간 [0.5, 1) 내 스칼라 또는 이 구간 내의 요소를 2개 가진 벡터로 지정됩니다. 경사도가 증가하면 필터 응답이 이상적인 대역통과 응답에 근접하지만, 결과로 생성되는 필터 길이와 필터링 연산의 계산 비용도 증가하게 됩니다. 자세한 내용은 대역통과 필터 경사도 항목을 참조하십시오.
StopbandAttenuation
— 필터의 저지대역 감쇠량
60
(디폴트 값) | 양의 스칼라(단위: dB)
필터의 저지대역 감쇠량으로, 양의 스칼라(단위: dB)로 지정됩니다.
출력 인수
y
— 필터링된 신호
벡터 | 행렬 | timetable형
필터링된 신호로, 입력값과 동일한 차원을 갖는 벡터, 행렬 또는 timetable형으로 반환됩니다.
d
— 대역통과 필터
digitalFilter
객체
세부 정보
대역통과 필터 경사도
Steepness
인수는 필터의 천이 영역 폭을 조정합니다. 경사도가 낮을수록 천이 영역이 더 넓어집니다. 경사도가 높을수록 천이 영역이 더 좁아집니다.
필터 경사도를 해석할 때 다음 정의를 참고하십시오.
나이퀴스트 주파수 fNyquist는 에일리어싱 없이 지정된 속도로 샘플링할 수 있는, 신호의 가장 높은 주파수 성분입니다. fNyquist는 입력 신호에 시간 정보가 없는 경우에는 1(×π rad/sample)이고, 입력 신호가 타임테이블이거나 샘플 레이트를 지정하는 경우에는
fs
/2Hz입니다.필터의 하부 및 상부 저지대역 주파수 fstoplower와 fstopupper는
StopbandAttenuation
으로 지정한 감쇠량에 해당하는 주파수로서, 하부 주파수보다 아래쪽 영역 또는 상부 주파수보다 위쪽 영역에서는 감쇠량이 지정된 감쇠량보다 크거나 같습니다.필터의 하부 천이 폭 Wlower는
fpass
lower – fstoplower이고, 여기서 저역 통과대역 주파수fpass
lower는fpass
의 첫 번째 요소입니다.필터의 상부 천이 폭 Wupper는 fstopupper –
fpass
upper이고, 여기서 고역 통과대역 주파수fpass
upper는fpass
의 두 번째 요소입니다.대부분의 이상적이지 않은 필터에서는 통과대역에서도 입력 신호가 감쇠됩니다. 이러한 주파수 종속 감쇠량의 최댓값을 통과대역 리플이라고 합니다.
bandpass
에 사용되는 모든 필터는 통과대역 리플이 0.1dB입니다.
천이 대역 폭을 조정하려면 Steepness
를 요소를 2개 가진 벡터 [slower,supper] 또는 스칼라로 지정하면 됩니다. Steepness
를 벡터로 지정할 경우 함수는 다음을 수행합니다.
하부 천이 폭을 다음과 같이 계산합니다.
Wlower = (1 – slower) ×
fpass
lower.Steepness
의 첫 번째 요소가 0.5이면 천이 폭은fpass
lower의 50%에 해당합니다.Steepness
의 첫 번째 요소가 1에 근접하면 천이 폭은fpass
lower의 1%라는 최솟값에 도달할 때까지 급격하게 좁아집니다.
상부 천이 폭을 다음과 같이 계산합니다.
Wupper = (1 – supper) × (fNyquist –
fpass
upper).Steepness
의 두 번째 요소가 0.5이면 천이 폭은 (fNyquist –fpass
upper).의 50%에 해당합니다Steepness
의 두 번째 요소가 1에 근접하면 천이 폭은 (fNyquist –fpass
upper)의 1%라는 최솟값에 도달할 때까지 급격하게 좁아집니다.
Steepness
를 스칼라로 지정할 경우 함수는 하부 및 상부 천이 폭이 동일한 필터를 설계합니다. Steepness
의 디폴트 값은 0.85입니다.
버전 내역
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)