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

bandstop

신호에 대역저지 필터 적용하기

설명

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

예제

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

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

예제

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

예제

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

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

예제

모두 축소

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로 지정합니다. 원래 신호 및 필터링된 신호와 함께 이 신호들의 스펙트럼도 표시합니다.

bandstop(x,[100 200],fs)

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

fs = 2e3;
t = 0:1/fs:0.3-1/fs;

l = [0 130.81 146.83 164.81 174.61 196.00 220 246.94];
m = [0 261.63 293.66 329.63 349.23 392.00 440 493.88];
h = [0 523.25 587.33 659.25 698.46 783.99 880 987.77];
note = @(f,g) [1 1 1]*sin(2*pi*[l(g) m(g) h(f)]'.*t);

mel = [3 2 1 2 3 3 3 0 2 2 2 0 3 5 5 0 3 2 1 2 3 3 3 3 2 2 3 2 1]+1;
acc = [3 0 5 0 3 0 3 3 2 0 2 2 3 0 5 5 3 0 5 0 3 3 3 0 2 2 3 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로 지정합니다. 시간 영역과 주파수 영역에서 원래 신호와 필터링된 신호를 플로팅합니다.

bong = bandstop(song,[230 450],fs);

% To hear, type sound(bong,fs)

bandstop(song,[230 450],fs)

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

figure
pspectrum(bong,fs,'spectrogram','TimeResolution',0.31, ...
    'OverlapPercent',0,'MinThreshold',-60)

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

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

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

pspectrum([y1 y2 y3],fs)
legend('Steepness = 0.5','Steepness = 0.8','Steepness = 0.95', ...
    'Location','north')

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

[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','Steepness = 0.8','Steepness = 0.95', ...
    'Location','north')
ylim([-120 20])

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

[y1,d1] = bandstop(x,[ 50 150],fs,'ImpulseResponse','iir','Steepness',[0.5 0.8]);
[y2,d2] = bandstop(x,[200 300],fs,'ImpulseResponse','iir','Steepness',[0.5 0.8]);
[y3,d3] = bandstop(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([-120 20])

입력 인수

모두 축소

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

예: 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채널 랜덤 신호가 포함됩니다.

이름-값 쌍의 인수

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

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

필터의 임펄스 응답 유형으로, 'ImpulseResponse'와 함께 '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.5, 1) 내 스칼라 또는 이 구간 내의 요소를 2개 가진 벡터가 쉼표로 구분되어 지정됩니다. 경사도가 증가하면 필터 응답이 이상적인 대역저지 응답에 근접하지만, 결과로 생성되는 필터 길이와 필터링 연산의 계산 비용도 증가하게 됩니다. 자세한 내용은 대역저지 필터 경사도 항목을 참조하십시오.

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

출력 인수

모두 축소

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

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

  • filter(d,x)를 사용하여 신호 xd로 필터링합니다.

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

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

세부 정보

모두 축소

대역저지 필터 경사도

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

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

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

  • 필터의 하부 및 상부 저지대역 주파수 fstoplowerfstopupper'StopbandAttenuation'으로 지정한 감쇠량에 해당하는 주파수로서, 이들 주파수 사이의 영역에서는 감쇠량이 지정된 감쇠량보다 크거나 같습니다.

    저지대역 영역의 중심은 fcenter = (fstoplower + fstopupper)/2입니다.

  • 필터의 하부 천이 폭 Wlowerfstoplowerfpasslower입니다.

  • 필터의 상부 천이 폭 Wupperfpassupper – fstopupper입니다.

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

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

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

    Wlower = (1 – slower) × (fcenterfpasslower).

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

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

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

    Wupper = (1 – supper) × (fpassupper – fcenter).

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

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

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

R2018a에 개발됨