matlab - 표시 - 매트랩 좌표




MATLAB의 하이 패스 필터링 (2)

누구든지 MATLAB에서 필터를 사용하는 방법을 알고 있습니까? 나는 애호가가 아니기 때문에 롤오프 특성 등에 관심이 없다. 나는 100kHz로 샘플링 된 1 차원 신호 벡터 x를 가지고 있는데, 고역 통과 필터링을 수행하려고한다. (말하자면, 10Hz 미만의 것을 거부한다. )를 클릭하여 기준선 드리프트를 제거합니다.

도움말에 설명 된 Butterworth, Elliptical 및 Chebychev 필터가 있지만 구현 방법에 대한 간단한 설명은 없습니다.


뇌 세포를 디자인, 제로 및 폴 및 잔물결에 압박하는 것을 포함하지 않는 이런 종류의 필터링을 수행하는 저렴한 방법은 다음과 같습니다.

* Make a copy of the signal
* Smooth it.   For a 100KHz signal and wanting to eliminate about 10Hz on down, you'll need to smooth over about 10,000 points.   Use a Gaussian smoother, or a box smoother maybe 1/2 that width twice, or whatever is handy.  (A simple box smoother of total width 10,000 used once may produce unwanted edge effects)
* Subtract the smoothed version from the original.  Baseline drift will be gone.

원래 신호가 spikey 인 경우 큰 매끄럽게하기 전에 짧은 중간 필터를 사용하는 것이 좋습니다.

이것은 2D 이미지, 3D 볼륨 데이터 등 무엇이든 쉽게 일반화합니다.


사용할 수있는 몇 가지 필터가 있으며 필터의 실제 선택은 달성하려는 대상에 따라 다릅니다. Butterworth, Chebyschev 및 Elliptical 필터에 대해 언급 한 이후로 일반적으로 IIR 필터를 찾고 있다고 가정합니다.

Wikipedia는 다양한 필터와 그 기능에 대한 정보를 제공하기에 좋은 곳입니다. 예를 들어, Butterworth 는 통과 대역에서 최대로 평탄하며 응답은 정지 대역에서 롤오프됩니다. Chebyschev 에서는 통과 대역 (유형 2) 또는 정지 대역 (유형 1)에서 부드럽게 반응하고 Elliptical 필터에서는 더 크고 불규칙한 잔물결이 Elliptical 두 밴드 모두에서 잔물결이 발생합니다. 다음 이미지 는 위키피디아에서 가져온 것입니다 .

그래서 세 가지 경우 모두에서 뭔가 다른 것을 교환해야합니다. 버터 워스에서는 파문은 없지만 주파수 응답 롤 오프는 느립니다. 위의 그림에서 반 전력을 얻으려면 0.4 에서 0.55 합니다. Chebyschev에서, 당신은 가파른 굴림을 벗어나지 만, 당신은 불규칙하고 더 큰 물결을 밴드 중 하나에 허용해야하고, 타원형에서는 거의 즉각적인 상쇄를 얻지 만, 두 밴드 모두에서 파급력을가집니다.

필터의 선택은 전적으로 귀하의 응용 프로그램에 달려 있습니다. 적은 손실로 깨끗한 신호를 얻으려고하십니까? 그렇다면 통과 대역에서 부드러운 응답을 제공하는 것이 필요합니다 (Butterworth / Cheby2). 저지 대역에서 주파수를 제거하려고합니까? 그러면 통과 대역의 응답에서 약간의 손실이 생기지 않으십니까? 그런 다음 정지 밴드 (Cheby1)에서 부드러 웠던 것이 필요할 것입니다. 지나치게 날카로운 컷오프 코너가 필요합니까? 예를 들어, 통과 대역을 약간 넘어 서면 분석에 해가됩니까? 그렇다면 타원형 필터를 사용해야합니다.

IIR 필터에 대해 기억해야 할 점은 극이 있다는 것입니다. 필터 딜레이 만 영향을 미치는 필터의 순서를 늘릴 수있는 FIR 필터와 달리 IIR 필터의 순서를 늘리면 필터가 불안정 해집니다. 불안정함에 따라, 당신은 단위 원 밖에 위치하는 기둥을 가질 것입니다. 왜 그런지 알아보기 위해 IIR 필터 에 관한 위키 기사, 특히 안정성에 관한 부분을 읽을 수 있습니다.

내 요점을 더 설명하기 위해, 다음 밴드 패스 필터를 고려하십시오.

fpass=[0.05 0.2];%# passband
fstop=[0.045 0.205]; %# frequency where it rolls off to half power
Rpass=1;%# max permissible ripples in stopband (dB)
Astop=40;%# min 40dB attenuation
n=cheb2ord(fpass,fstop,Rpass,Astop);%# calculate minimum filter order to achieve these design requirements

[b,a]=cheby2(n,Astop,fstop);

이제 zplane(b,a) 사용하여 0 극 다이어그램을 zplane(b,a) 단위 원 밖에있는 몇 개의 극 ( x )이 있음을 알 수 있습니다. zplane(b,a) 접근법이 불안정합니다.

이것은 주파수 응답이 모두 엉성한 사실에서 분명합니다. freqz(b,a) 를 사용하여 다음을 얻으십시오

정확한 설계 요구 사항으로보다 안정적인 필터를 얻으려면, MATLAB에서 ba 대신 zpk 메소드를 사용하여 2 차 필터를 사용해야합니다. 위와 같은 필터를 사용하는 방법은 다음과 같습니다.

[z,p,k]=cheby2(n,Astop,fstop);
[s,g]=zp2sos(z,p,k);%# create second order sections
Hd=dfilt.df2sos(s,g);%# create a dfilt object.

이제이 필터의 특성을 살펴보면 모든 극점이 단위 원 안에 놓여 있으므로 (안정적인) 설계 요구 사항과 일치한다는 것을 알 수 있습니다

이 접근법은 ellipellip 이 비슷하고 ellipellip 가 비슷합니다. MATLAB 문서에는 필터 설계에 대한 좋은 예가 있습니다. 이 예제를 기반으로 원하는 필터를 설계 할 수 있습니다.

데이터에서 필터를 사용하려면 결국 어떤 필터를 사용하는지에 따라 filter(b,a,data) 또는 filter(Hd,data) 할 수 있습니다. 제로 위상 왜곡을 원하면 filtfilt 사용 filtfilt . 그러나 이것은 dfilt 객체를 허용하지 않습니다. 따라서 Hd 가있는 제로 위상 필터를 사용하려면 Mathworks 파일 교환 사이트에서 사용할 수있는 filtfilthd 파일을 사용하십시오.

편집하다

이것은 @ DarenW의 의견에 대한 응답입니다. 스무딩과 필터링은 서로 다른 두 가지 작업이며 일부는 유사하지만 (이동 평균은 로우 패스 필터 임) 단순히 다른 필터로 대체 할 수는 없습니다. 특정 용도에 대한 우려.

예를 들어 Daren의 제안을 100kHz에서 샘플링 한 0-25kHz의 선형 처프 신호에 구현하면 Gaussian 필터로 평활화 한 후의 주파수 스펙트럼입니다

물론, 10Hz에 가까운 드리프트는 거의 없습니다. 그러나,이 동작은 원래의 신호에서 주파수 성분의 특성을 완전히 변화시켰다. 이러한 불일치는 평활화 작업의 롤오프를 완전히 무시했기 때문에 발생하며 (빨간색 선 참조) 평탄한 제로라고 가정합니다. 그것이 사실이라면, 뺄셈은 효과가 있었을 것입니다. 그러나 슬프게도, 그렇지 않은 경우가 있기 때문에 필터 설계에 대한 전체 영역이 존재합니다.





digital-filter