2014-12-16 3 views
1

난 다음 코드를이 시스템에 저역 통과 필터를 사용 :matlab에 -

clc 
clear all 
close all 

Fs = 6000;     % 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); 

figure 
subplot(3,1,3) 
stem(t,x1); 

figure 
subplot(2,1,1) 
stem(t,x2); 

x=x1+x2; 
y=fft(x); 
fx=(-N/2:(N/2-1))*(Fs/N); 
figure, plot(fx,abs(fftshift(y))); 

전 주파수 영역에서 하나의 충격을 의미 신호의 낮은 부분을 참조 할 난이 필터를 사용하고 :

fc = 1500; 
Wn = (2/Fs)*fc; 
b = fir1(20,Wn,'low',kaiser(21,3)); 

fvtool(b,1,'Fs',Fs) 


z = filter(b,1,y); 


plot(t(1:100),abs(z(1:100))) 

xlabel('Time (s)') 
ylabel('Amplitude') 

그러나주기적인 신호가 보입니다. 어떻게 저주파에있는 하나의 충동을 볼 수 있습니까? 당신은 z = filter(b,1,x);를 사용해야합니다

+0

주파수 도메인에서 임펄스가 시간 영역에 나타나지 않아야합니다. – Rashid

+0

예 @Kamtal 알아요.하지만 저역 필터를 사용할 때 충동을 보지 못했습니다. – Zame

답변

2

,

Fs = 6000;     
T = 1/Fs;    
N=512;      
t = (0:N-1)*T;    
x1 = 4*sin(2*pi*1000*t); 
x2 = sin(2*pi*2500*t); 
x = x1 + x2; 
NFFT = 2^nextpow2(N); 
y = fft(x,NFFT)/N; 
fx = Fs/2*linspace(0,1,NFFT/2+1); 
subplot(211) 
plot(fx,2*abs(y(1:NFFT/2+1))) 

fc = 1500; 
Wn = (2/Fs)*fc; 
b = fir1(20,Wn,'low',kaiser(21,3)); 
z = filter(b,1,x); 
Z = fft(z,NFFT)/N; 
subplot(212) 
plot(fx,2*abs(Z(1:NFFT/2+1))) 

enter image description here

그것은 단지 양의 주파수를 플롯하는 것이 더 일반적입니다

.

귀하의 N은 이미 2의 제곱이지만, N이 변경되면 NFFT을 정의했습니다.

현재 각 plot 앞에 figure을 사용할 필요는 없습니다.

+0

매우 유용하고 고맙습니다. – Zame

+0

@WalidSarkis, 기꺼이 도와 드리겠습니다. 행운을 빕니다. – Rashid