2014-12-26 21 views
1

나는 다음과 같은 코드가 있습니다- MATLAB

[B A]=lp2lp([1],[1 1], 1.069*10^4) 
[b a]=bilinear(B,A,Fs) 
z=freqz(b,a,512,Fs); 
axis ([0 Fs/2 -20 1]) 
:

Fs = 8000;     % Sampling frequency 
T = 1/Fs;      % Sample time 
N=512;      % Length of signal 
t = (0:N-1)*T;    % Time vector 


% Sum of a 1kHz sinusoid and a 2.5kHz sinusoid 
x1=4*sin(2*pi*1000*t); 
x2=sin(2*pi*2500*t); 
x=x1+x2; 

% Frequency spectrum 
y=fft(x); 
fx = Fs/2*linspace(0,1,N/2+1); 
plot(fx,2*abs(y(1:N/2+1))) 

내가이 신호에 다음과 같은 로우 패스 필터를 사용하려면를

어떻게 생각하나요?

+1

@PacificStickler 최근에 브라우저를 열지 못했지만, 정말 도움이되었습니다. 도움을 주셔서 감사합니다. :) – Zame

답변

2

짧은 답변 :

  1. freqz를 사용 : 당신은 단지 필터의 단면 주파수 응답을 얻을 따라서 당신은 단지 신호의 단면 스펙트럼 필터를 적용 할 수 x

    z = freqz(b, a, N/2+1, Fs); 
    o1 = z' .* y(1:N/2+1); 
    
  2. 가 사용 filter : 출력 (필터링 된) 신호의 o1 단면 주파수 스펙트럼에 도착하면 당신의 유일한 목표 인 경우 필터를 적용 freqz를 사용하여 우회 할 수있다 이전에 발견

    o2 = filter(b, a, x); 
    

최적의 사용 freqz의 :

freqz 반환 계수의 주어진 필터의 주파수 응답을 mathworks에 의해 기술 된 전달 함수. 값을 반환하지 않고 사용하는 것이 가장 좋습니다.이 경우 샘플링 빈도의 절반까지 주파수 스펙트럼의 오른쪽 절반에 대한 크기 및 위상 응답이 자동으로 표시됩니다.

우리는 반환 값없이라는 freqz 명령에 의해 그려진 주파수 응답의 크기가, 다음 코드를 사용하여 그려지는 응답에 해당하는 것을 확인할 수 있습니다

h = freqz(b,a,N/2+1,Fs); 
plot(fx, 20*log10(abs(h))); 

Ouptut :

또한, 원래 신호의 주파수 응답 y에 대해 위에 설명 된 두 가지 방법 중 하나를 사용하여 얻은 필터 bilinear의 효과는 정확히 같습니다 :

subplot(2,2,[1 2]); plot(fx, 2*abs(y(1:N/2+1))); ylim([0,2000]); 
subplot(2,2,3); plot(fx, 2*abs(o2(1:N/2+1))); 
subplot(2,2,4); plot(fx, 2*abs(o1)); 

enter image description here

P.S : 매트랩 FIR filtering overview을 통해 갈 유용 할 수 있습니다.

+0

오, 알았습니다. 다음 질문에 대해 유감스럽게 생각하지만 왜 두 가지 충동이 나타나는 걸까요? 1k 프리퀀시가있는 것이 유일하게 나타나는 것이어야합니까? – Zame

+0

이것은 필터의 특성 때문입니다. 당신은 주파수 응답으로부터'freqz'가 2.5k 주파수가 약 7dB만큼만 감쇠된다는 것을 알 수 있습니다. 따라서 여러분은 여전히 ​​2.5k에서 약간의 충동을 볼 수 있습니다. 그러나 저역 통과 필터는 1k에서 2.5k까지의 피크 비율이 4에서 8.5로 증가 했으므로 작업을 완료했습니다. 전달 함수의 극을 잡아 당김으로써 감쇠비를 더 높일 수 있습니다. 예 : '[B A] = lp2lp ([1], [1.75], 1.069 * 10^4)은 2.5k 주파수의 크기 응답을 1k 주파수의 크기 응답에 비해 10.5 배 감쇠시킨다. –