1. 程式人生 > >用MATLAB設計低通濾波器

用MATLAB設計低通濾波器

濾波器有很多種設計方式。最簡單的,就是用已有的buttord計算出最符合條件的巴特沃思濾波器的階數n和截止頻率,再用butter計算n階巴特沃斯數字濾波器系統函式分子、分母多項式的係數向量b、a。用freqz函式畫出濾波器的幅頻、相頻圖。用filter濾波。
例:
  規定:wp為通帶截止頻率;ws為阻帶截止頻率;ap為通帶最大衰減(dB);as為阻帶最大衰減(dB);wc為3dB截止頻率;fn為取樣率;
  濾波器設計條件:通帶最大衰減ap=1dB,阻帶最小衰減as=15dB,通帶截止頻率為wp=2000Hz,阻帶截止頻率為ws=5000Hz
  程式碼:
  fn=16000;
  ap=0.1;
  as=60;
  wp=2000;
  ws=5000; %輸入濾波器條件
  wpp=wp/(fn/2);wss=ws/(fn/2); %歸一化;
  [nwn]=buttord(wpp,wss,ap,as); %計算階數截止頻率
  [ba]=butter(n,wn); %計算N階巴特沃斯數字濾波器系統函式分子、分母多項式的係數向量b、a。
  freqz(b,a,512,fn);%做出H(z)的幅頻、相頻圖
  t =(1:1000)/16000;
  x=cos(4000*pi*t)+cos(6000*pi*t); %輸入訊號
  figure(2);
  subplot(2,1,1);
  plot(t,x); %合成訊號時域波形
axis([0 0.01 -22])
X=fft(x); %進行傅立葉變換
subplot(2,1,2);
plot(abs(X));
y=filter(b,a,x); %濾波b、a濾波器係數,x濾波前序列
figure(3);
subplot(2,1,1); %
plot(t,y); %分離輸出訊號的時域波形
axis([0 0.01 -1.51.5]);
subplot(2,1,2);
plot(t,cos(4000*pi*t));%cos(4000*pi*t)理論時域波形
axis([0 0.01 -1.51.5])