高階濾波器課程設計
① 怎麼設計基於MATLAB的高階帶通濾波器的設計與模擬
濾波器可廣義地理解為一個信號選擇系統。其中數字濾波器精度高、穩定性好,不版存在阻抗匹配問題,可以時權分復用,能夠完成一些模擬濾波器完成不了的濾波任務。文中介紹了FIR數字濾波器的基本原理、應用領域及設計思想,比較了FIR濾波器各種實現結構的優缺點,並介紹了Matlab、ModelSim等軟體實現低通FIR濾波器的方法及步驟,以此為指導,設計出了一種低通FIR濾波器。該濾波器採用了二的補碼形式的CSD編碼演算法,能夠將常系數編碼中的非零位達到最少,從而簡化乘法器的結構,提高濾波器的運算速度。濾波器電路採用Verilog HDL設計,最後設計出的基於CSD架構的半帶FIR濾波器在ModelSim上通過了功能模擬,並在Matlab上進行頻譜和時域分析。
② 基於MATLAB的高階帶通濾波器的設計與模擬
摘 要
濾波器是一種能使有用信號順利通過而同時對無用頻率信號進行抑制(或衰減)的電子裝置。工程上常用它來做信號處理、數據傳送和抑制干擾等。傳統的數字濾波器的設計過程復雜,計算工作量大,濾波特性調整困難,影響了它的應用。本文所用的設計方法是基於MATLAB的頻率抽樣設計法,它是用來設計FIR數字濾波器的系統函數,本文中運用最優化設計法對數字濾波器進行設計,用這種方法進行設計,可以使阻帶中的誤差極小化。通過MATLAB的模擬實驗結果令人滿意。
關鍵詞:濾波器;頻率抽樣;最優化設計;
Abstract
Filters can be a useful signal to the smooth passage at the same time inhibiting unwanted frequency signals (or decay) of electronic devices. Engineering used it as signal processing, data transmission and curb disturbances. The traditional digital filter design process is complex, the computation work load is big, the filter characteristic adjustment difficulty, has affected its application.This article uses the design method is based on the MATLAB frequency sampling design law, it is uses for to design the FIR numeral filter the system function, in this article carries on the design using the optimized design law to the digital filter, carries on the design with this method, may cause in the stop-band the erroneous minimizing, the experimental simulation result to be satisfying.
Keywords: Filter;Sampling frequency;The most optimal design;
目 錄
摘 要 I
Abstract II
第1章 緒論 1
1.1 課題背景 1
1.2 數字濾波器及傳統設計方法 1
第2章 MATLAB簡介 3
2.1 MATLAB的概況 3
2.2 本章小結 4
第3章 設計原理 5
3.1 低通濾波器的原理 5
3.2設計要求 5
3.3設計思路 5
3.4本章小結 6
第4章 設計與實現 7
4.1 MATLAB設計程序 7
4.1.1 頭文件程序 7
4.1.2 設計主程序 8
4.2 程序運行結果 9
4.3 本章小結 11
結論 12
參考文獻 13
致謝 14
第1章 緒論
1.1 課題背景
對輸入信號中某特定頻率或頻帶成分具有選擇性的網路稱之為濾波器。濾波器可廣泛應用於通信、自動控制、計算和測量技術等領域。有關濾波器的理論和設計日趨完善。低通濾波器是容許低於截至頻率的信號通過, 但高於截止頻率的信號不能通過的電子濾波裝置。
對於不同濾波器而言,每個頻率的信號的減弱程度不同。當使用在音頻應用時,它有時被稱為高頻剪切濾波器, 或高音消除濾波器。
低通濾波器概念有許多不同的形式,其中包括電子線路(如音頻設備中使用的hiss 濾波器、平滑數據的數字演算法、音障(acoustic barriers)、圖像模糊處理等等,這兩個工具都通過剔除短期波動、保留長期發展趨勢提供了信號的平滑形式。
低通濾波器在信號處理中的作用等同於其它領域如金融領域中移動平均數(moving average)所起的作用;
低通濾波器有很多種,其中,最通用的就是巴特沃斯濾波器和切比雪夫濾波器。 巴特沃斯濾波器是濾波器的一種設計分類,其採用的是巴特沃斯傳遞函數,有高通、低通、帶通、高通、帶阻等多種濾波器類型。
巴特沃斯濾波器在通頻帶內外都有平穩的幅頻特性,但有較長的過渡帶,在過渡帶上很容易造成失真。在電力系統微機保護和二次控制中,很多信號的處理與分析都是基於對正弦基波和某些整次諧波的分析,而系統電壓電流信號(尤其是故障瞬變過程)中混有各種復雜成分,所以濾波器一直是電力系統二次裝置的關鍵部件。目前微機保護和二次信號處理軟體主要採用數字濾波器。傳統的數字濾波器設計使用繁瑣的公式計算,改變參數後需要重新計算,在設計濾波器尤其是高階濾波器時工作量很大。利用MATLAB信號處理工具箱(Signal Processing Toolbox)可以快速有效的實現數字濾波器的設計與模擬。
1.2 數字濾波器及傳統設計方法
數字濾波器可以理解為是一個計算程序或演算法,將代表輸入信號的數字時間序列轉化為代表輸出信號的數字時間序列,並在轉化過程中,使信號按預定的形式變化。數字濾波器有多種分類,根據數字濾波器沖激響應的時域特徵,可將數字濾波器分為兩種,即無限長沖激響應(IIR)濾波器和有限長沖激響應(FIR)濾波器。
IIR數字濾波器具有無限寬的沖激響應,與模擬濾波器相匹配。所以IIR濾波器的設計可以採取在模擬濾波器設計的基礎上進一步變換的方法。FIR數字濾波器的單位脈沖響應是有限長序列。它的設計問題實質上是確定能滿足所要求的轉移序列或脈沖響應的常數問題,設計方法主要有窗函數法、頻率采樣法和等波紋最佳逼近法等。
在對濾波器實際設計時,整個過程的運算量是很大的。。當濾波器階數比較高時,計算量比較大,設計過程中改變參數或濾波器類型時都要重新計。設計完成後對已設計的濾波器的頻率響應要進行校核,要得到幅頻相頻響應特性,運算量也是很大的。我們平時所要設計的數字濾波器,階數和類型並不一定是完全給定的,很多時候都是要根據設計要求和濾波效果不斷的調整,以達到設計的最優化。在這種情況下,濾波器的設計就要進行大量復雜的運算,單純的靠公式計算和編制簡單的程序很難在短時間內完成設計。利用MATLAB強大的計算功能進行計算機輔助設計,可以快速有效的設計數字濾波器,大大的簡化了計算量,直觀簡便。
第2章 MATLAB簡介
2.1 MATLAB的概況
在科學研究和工程應用中,往往要進行大量的數字計算,其中包括矩陣運算。一般來說,這些運算難以用手工精確快捷地進行,而要藉助計算機編制相應的程序來做近似計算。用C\BASIC和FORTRRAN語言編制計算程序,既需要隊友觀演算法有深刻得了解,還需要熟練掌握所用語言的語法及編程技巧也是繁雜的,不僅消耗人力與物力,而且影響工作的進程和效率。為了克服上述困難,美國MathWorks公司於1967年推出了Matrix Laboratory(MATLAB)軟體包,並不斷更新和擴充。目前,MATLAB已經發展到了最新的7.0.1版本(MATLAB Release 14 with Service Pack 1),由MathWorks公司於2004年10月推出。
MATLAB是矩陣實驗室(Matrix Laboratory)之意。除具備卓越的數值計算能力外,它還提供了專業水平的符號計算,文字處理,可視化建模模擬和實時控制等功能。
MATLAB的基本數據單位是矩陣,它的指令表達式與數學,工程中常用的形式十分相似,故用MATLAB來解算問題要比用C、FORTRAN等語言相同的事情簡捷得多.
當前流行的MATLAB 5.3/Simulink 3.0包括擁有數百個內部函數的主包和三十幾種工具包(Toolbox)。工具包又可以分為功能性工具包和學科工具包。功能工具包用來擴充MATLAB的符號計算,可視化建模模擬,文字處理及實時控制等功能。學科工具包是專業性比較強的工具包,控制工具包,信號處理工具包,通信工具包等都屬於此類。
開放性使MATLAB廣受用戶歡迎,除內部函數外,所有MATLAB主包文件和各種工具包都是可讀可修改的文件,用戶通過對源程序的修改或加入自己編寫程序構造新的專用工具包。
MATLAB的典型應用包括:
(1) 數學計算;
(2) 科學演算法開發;
(3) 數據採集及信號處理;
(4) 建模及原型模擬;
(5) 數據分析和數據可視化;
(6) 科學與工程繪圖;
(7) 應用程序開發(包括建立圖形化用戶界面)。
MATLAB的主要功能與特點:
(1)MATLAB語言表達方式與日常習慣使用的數字表達方式幾乎相同,是基於向量、數組和矩陣的高級程序設計語言;
(2)提供了幾乎涵蓋所有科學領域所需的演算法程序、庫函數和工具包;
(3)具有可視化建模和模擬功能;
(4)具有高質量、高可靠性的數值計算能力;
(5)跨平台兼容,即可以將MATLAB程序轉化為其他語言程序,也可以預期他語言程序相連接使用;
(6)具有開放性和可擴充性,即可以方便地與外部設備、文件連接使用。
2.2 本章小結
目前,MATLAB已成為科學工作者、工程實踐人員、在校學生進行理論學習、習題演算、演算法推導必不可少的軟體。本章主要介紹了MATLAB相比較其他工具在設計濾波器時的諸多優勢和好處,以及MATLAB的典型應用。在本文中,MATLAB得到了很好的應用。
第3章 設計原理
3.1 低通濾波器的原理
概括來說,低通濾波器就是利用電容同高頻阻低頻,電感通低頻阻高頻的原理.
對於需要截止的高頻,利用電容吸收電感、阻礙的方法不使它通過,對於需要的低頻,利用電容高阻、電感低阻的特點是它通過。
3.2設計要求
理想低通濾波器技術指標為
用頻率設計法設計FIR濾波器。
3.3設計思路
通過對離散傅立葉變換的學習,我們知道一個有限長序列可以用N個頻域抽樣值唯一的確定,即
其中H(k)是h(n)的離散傅立葉變換,是H(z)在單位圓上的均勻抽樣值,其列長N,
這為本次設計FIR數字濾波器提供了另一途徑,即直接從頻域出發,對理想頻響進行抽樣,使
然後,用離散傅立葉反變換求單位脈沖響應
再用Z變換求系統函數。
則可得設計思路:
若設計一類線性相位數字濾波器,即h(n)為偶對稱,N為奇數的情況,有
其中,幅度特性應該具有偶對稱性
將頻率抽樣也用幅值和幅角表示,
則根據約束條件,應滿足
用頻率抽樣法設計的系統函數H(z)對理想系統函數Hd(z)的逼近情況。
已知
其中 為內插函數
有內插公式可見,除了每個抽樣點上的頻響嚴格與理想特性一致外,抽樣點之間的頻響則由抽樣點的內插函數延伸疊加而成,逼近程度取決於頻率響應曲線的平滑程度和抽樣點的密度。因此,如果抽樣點之間的理想特性越平穩,內插函數就越接近理想值。
3.4本章小結
在本文中所用的設計方法是頻率抽樣設計法,它是用來設計FIR數字濾波器的系統函數,而設計出來的系統函數可以用頻率抽樣結構方法實現,也可用其他結構實現。
第4章 設計與實現
頻率抽樣設計法可分為兩種方法,第一種是直接運用上文中所述的基本原理,而對逼近誤差不加限制,也就是說,無論設計後的誤差有多大,都可以認可,這種方法稱為樸素設計法;另一種方法是通過改變過渡帶的抽樣值,使阻帶中的誤差極小化,這種方法稱為最優設計法。在本文中運用最優設計法對數字濾波器進行設計。
4.1 MATLAB設計程序
4.1.1 頭文件程序
1、頭文件freqz_m
function[db,mag,pha,grd,w]=freqz_m(b,a)
%z域數字頻率響應計算freqz的改進版本
%b直接型濾波器分子系數;a直接型濾波器分母系數
%db為[0:pi]之間的相對振幅;mag為[0 pi]區間的絕對值;pha為[0 pi]區間的相位響應;
%grd為[0 pi]區間的群延遲;w為[0 pi]區間內的501個頻率樣本數組
[H,w]=freqz(b,a,1000,'whole');
H=(H(1:1:501));'w=(w(1:501))';
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
grd=grpdelay(b,a,w);
2、頭文件hr_type2
function[Hr,w,b,L]=hr_type2(h);
%線性相位濾波器類型2,計算濾波器振幅響應
%Hr振幅響應;w在[0,2pi]之間計算Hr的500個頻率點;
%b為2型低通濾波器系數;L為Hr的階次;h為2型低通濾波器的脈沖響應.
M=length(h);L=M/2;
b=2*[h(L:-1:1)]; %1乘(L+1)行向量
n=[1:1:L];n=n-0.5; %(L+1) 乘1列向量
w=[0:1:500]'*2*pi/500;
Hr=cos(w*n)*b';
4.1.2 設計主程序
%設計條件:wp=0.2pi;ws=0.3pi;Rp=0.25dB;Ar=50dB;
N=60;alpha=(N-1)/2;L=0:N-1;wL=(2*pi/N)*L;
Hrs=[ones(1,7),0.5,0.1,zeros(1,43),0.1,0.5,ones(1,6)]; %理想濾波器振幅響應抽樣
Hdr=[1,1,0,0]; wdl=[0,0.2,0.2,1]; %理想濾波器振幅響應
k1=0:floor((N-1)/2); k2=floor((N-1)/2)+1:N-1
angH=[-alpha*(2*pi)/N*k1,alpha*(2*pi)/N*(N-k2)];
H=Hrs.*exp(j*angH);
h=real(ifft(H,N));
[db,mag,pha,grd,w]=freqz_m(h,1);
[Hr,ww,a,M]=hr_type2(h);
%畫圖
figure(2)
subplot(2,2,1); plot(wL(1:11)/pi,Hrs(1:11),'o',wdl,Hdr);
axis([0,1,-0.1,1.1]); title('頻率樣本 N=60')
xlabel('頻率(單位:pi)'); ylabel('h(n)');
subplot(2,2,2); stem(L,h); axis([-1,N,-0.1,0.3]);
title('脈沖響應');xlabel('n'); ylabel('h(n)');
m1=[0 0]; m2=[-1 60]; line(m2,m1)
subplot(2,2,3); plot(ww/pi,Hr,wL(1:11)/pi,Hrs(1:11),'o');
axis([0,1,-0.2,1.2]); title('振幅響應')
xlabel('頻率(單位:pi)'); ylabel('Hr(w)');
subplot(2,2,4); plot(w/pi,db);
axis([0,1,-60,10]); title('幅度響應')
xlabel('頻率(單位:pi)'); ylabel('分貝');
fs=6400000; %采樣頻率64k
t=0:(1/fs):(0.1-(1/fs)); %時長0.001秒
t_len=size(t,2);
f1=1400;
f2=1600; %雙音信號1k和1.6k
f_len=linspace(-fs/2-fs/2/t_len,fs/2-fs/2/t_len,t_len);
figure(1);
a1=1.65;
a3=-0.887;
a5=0.16;
s=(sin(2*pi*f1*t)+sin(2*pi*f2*t));
ss=a1.^s+a3.^s.^s.^s;
fftmov1=20*log10(abs(fft(ss)));
fftmov1=fftshift(fftmov1);
plot(f_len,fftmov1);
ylim([-100 120]);
xlim([0 5000]);
grid on;
xlabel('頻率hz');
ylabel('幅度db');
title('輸出信號頻譜');
4.2 程序運行結果
圖4-1 程序運行結果
圖4-1.1 程序運行結果
圖4-2 輸出信號頻譜圖
4.3 本章小結
本章節根據設計思路,設計出了相應的程序,通過實驗模擬到了比較滿意的結果。在程序設計的過程中,由於平時實踐操作得少,遇到了一些麻煩,但經過認真的思索,問題還是得到了解決,這使我明白只有把我們學到的理論知識和實踐操作相結合,才能算得上真正的學到了本事。
結論
本文通過對設計思路進行了全面的研究,並按照設計要求編寫出設計程序,運用MATLAB模擬軟體運行出比較滿意的結果。從搜集查閱各種相關資料到確定題目,從編寫設計程序到運行出滿意的結果,這一過程中,使我深刻的意識到自身的不足,理論與實踐的差距,要把理論上學習的東西運用到實踐中並不容易。同時,我也懂得了科學的博大與精深,在以後的學習過程中,我要在學習理論知識的同時盡可能多的把它們在實踐中的到驗證,這樣才能學好學精。
參考文獻
[1] 周輝,董正宏.數字信號處理基礎及MATLAB實現.北京希望電子出版社,2006.2
[2] 周綺敏等.信號與系統試驗教程.人民郵電出版社,2005.6
[3] 陳亞勇等.MATLAB信號處理詳解.人民郵電出版社.2001.9
[4] 梁虹,梁潔,陳躍斌等.信號與系統分析及MATLAB實現.電子工業出版社.2002.6
致謝
在本次設計中,我得到了老師的很多幫助。在我還不是很熟悉這個設計軟體的時候,老師細心的給我講解,使我能熟練的使用這個軟體。尤其在我不懂的地方,老師不厭其煩地引導我尋找解決問題的方法,老師教給我的不僅僅只有知識,更重要的是一絲不苟,嚴肅認真的科學態度,在此我向老師深表謝意!同時,我要感謝在設計過程中其他同學對我的幫助,如果沒有他們的幫忙,我的設計可能不會這么全面,在此,對幫助我的人深表謝意!
③ 求一篇圖像濾波器課程設計
代碼分別對灰度圖像,真彩色圖像以及索引圖像進行濾波處理,然後用if語句將三段整合,並使用isind,isrgb,isgray語句判斷圖像類型,做出相應處理。
W=input('輸入原始圖像及其拓展名:','s');
h = imread(W);
P=imnoise(h,'gaussian ',0.02);
x=isind(P)
y=isrgb(P)
z=isgray(P)
if x==1
[X,map]=imread(W);
imshow(X,map);
P=imnoise(X,'gaussian',0.02);
subplot(2,2,1),imshow(P,map),title('原始圖像','fontsize',20,'fontname','隸書');
h1=filter2(fspecial('gaussian',[3 3],0.5),P);
subplot(2,2,2),imshow(h1,map),title('濾波圖像 濾波器:3*3 sigma=0.5','fontsize',20,'fontname','隸書');
h2=filter2(fspecial('gaussian',[3 3],1.5),P);
subplot(2,2,3),imshow(h2,map),title('濾波圖像 濾波器:3*3 sigma=1.5','fontsize',20,'fontname','隸書');
h3=filter2(fspecial('gaussian',[3 3],2.5),P);
subplot(2,2,4),imshow(h3,map),title('濾波圖像 濾波器:3*3 sigma=2.5','fontsize',20,'fontname','隸書');
elseif y==1
subplot(2,2,1);imshow(P,[]);
title('(a)原始圖像','fontsize',20,'fontname','隸書');
H = fspecial('gaussian');
gi= imfilter(P,H,'replicate');
subplot(2,2,2);imshow(gi,[]);
title('(b)濾波圖像 濾波器3*3 sigma=0.5','fontsize',20,'fontname','隸書');
H1= fspecial('gaussian',[3,3],1.5);
gi1= imfilter(P,H1,'replicate');
subplot(2,2,3);imshow(gi1,[]);
title('(c)濾波圖像 濾波器3*3 sigma=1.5','fontsize',20,'fontname','隸書');
H2=fspecial('gaussian',[3,3],2.5);
gi2=imfilter(P,H2,'replicate');
subplot(2,2,4);imshow(gi2,[]);
title('(d)濾波圖像 濾波器3*3 sigma=2.5','fontsize',20,'fontname','隸書');
else z==1
subplot(2,2,1),imshow(P)
title('(a)原始圖像','fontsize',20,'fontname','隸書');
J1=filter2(fspecial('gaussian',[3,3], 0.5),P)/255;
subplot(2,2,2),imshow(J1)
title('(b)濾波圖像 濾波器3*3 sigma=0.5','fontsize',20,'fontname','隸書');
J2=filter2(fspecial('gaussian',[3,3], 1.5),P)/255;
subplot(2,2,3),imshow(J2)
title('(c)濾波圖像 濾波器3*3 sigma=1.5','fontsize',20,'fontname','隸書');
J3=filter2(fspecial('gaussian',[3,3], 2.5),P)/255;
subplot(2,2,4),imshow(J3)
title('(d)濾波圖像 濾波器3*3 sigma=2.5','fontsize',20,'fontname','隸書');
end
④ 濾波器課程設計!
太簡單啦!但是這分數實在是太少!!
⑤ 如何設計高階濾波器
高階低通濾波器通常由一階、二階低通濾波器組成。例如,五階巴特沃思低通濾波器,由兩個二階和一個一階巴特沃思低通濾波器組成
⑥ 幫我寫一個音頻濾波器的課程設計
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
參數初始化
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear all; % 關閉以往模擬的數據棧
[Y,fs,bits]=wavread('I:\等一分鍾.wav',[1000000 1800000]); %讀出信號1, 采樣率和采樣位數
n=length(Y); %求采樣信號1的長度
t=0:1/fs:(n-1)/fs; %求采樣信號1時域上的采樣點數
sound(Y,fs); % 讀出加雜訊後的采樣信號
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 構 造 巴 特 沃 思 濾 器
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%figure(1);
subplot(1,2,1)
plot(t,Y);
xlabel('時間 (t)');ylabel('幅度(Y)');title('時域圖');grid on; subplot(1,2,2)
plot(abs(fft(Y)));
xlabel('頻率(f)');ylabel('幅度(Y)');title('頻譜圖');grid on;
%%%%%%%%%%%%%% 構造800Hz的帶阻濾波器 %%%%%%%%%%%%%
f0=800;
fc=20;
Rp=1;
Rs=30;
wp=200*2*pi/(fs/2);
ws=300*2*pi/(fs/2);
[N,wc]=buttord(wp,ws,Rp,Rs,'s');
[num,den]=butter(N,wc,'low');
[h,w]=freqz(num,den,fs);
figure(2);
subplot(1,2,1);
plot(w*fs/(2*pi),20*log10(abs(h)));
xlabel('頻率(w)');ylabel('幅度(h)');
title('幅頻特性圖');grid on;
B=filter(num,den,Y);
subplot(1,2,2);
plot(t,B);
xlabel('時間 (t))');ylabel('幅度(B)');title('用低通濾波器濾後的時域圖 ');
grid on; figure(3) plot(abs(fft(B)));
xlabel('頻譜 (f))');ylabel('幅度(B)');
title('用低通濾波器濾後的頻譜圖 ');
grid on;
pause(10);
wavplay(B,fs);
%wavwrite(B,fs,16,'designed by 劉其飛巴特沃思濾波器濾波後的語音信號.wav');
⑦ 高階帶通濾波器設計
這樣軟體設計出來的濾波器肯定可以的。你看看書《實用數字信號處理:從原理到應用》,關於濾波器前幾張有介紹這個結果的 ,大概第39頁左右。