[討論]帶通濾波器程式碼一問

作者: Eenie (Eenie)   2014-08-14 13:08:27
小弟利用網路查詢相關資料等,撰寫了一個butterworth的帶通濾波器,
不過對於部份程式碼有些疑問,想請教各位高手。
程式碼如下
目前想請問
1.第7行plot(10*t(1:76),x(1:76))其中時間t*10之目的?
2.第10行之f是取樣頻率嗎,而"130"乘上(0:255)/512之目的為何?
3.第11行D1=fft(x,512)做傅立葉轉換刮號內512之意義為何?
clc
clear
t=0:0.008:0.6; %時間區間為0-0.6s
x= cos(2*pi*100*t); %初始訊號
figure(1)
subplot(421)
plot(10*t(1:76),x(1:76)) %(第7行)
xlabel('time');
ylabel('amplitude');
f=130*(0:255)/512;%(第10行)
D1=fft(x,512); %(第11行) fft後之頻率範圍為0 ~ fs
subplot(422)
plot(f,abs(D1(1:256)));
xlabel('frequncy');
ylabel('output signal(initial)');
%butterworth
cut_f1=20/(130/2);%正規化的截止頻率,介於 0 和 1 之間,當取樣頻率是 fs 時,所
能處理的最高頻率是 fs/2,所以如果實際的截止頻率是 f = 1000,那麼 Wn = f/(fs/2)
cut_f2=30/(130/2);
N=9;%濾波器之階數,階數越大,濾波效果越好
[b,a]=butter(N,[cut_f1 cut_f2]);%band pass
y2=filter(b,a,x(1:76));
subplot(423)
plot(10*t(1:76),y2);
xlabel('time');
ylabel('amplitude');
D2=fft(y2,512);
subplot(424)
plot(f,abs(D2(1:256)));
xlabel('frequncy');
ylabel('output signal(band pass)');

Links booklink

Contact Us: admin [ a t ] ucptt.com