數字信號處理之低通濾波器設計


目錄

1 數字濾波器的概念

2 數字濾波器分類

    2.1 經典濾波器與現代濾波器

    2.2 無限脈沖響應濾波器和有限長脈沖響應濾波器

    2.3 選頻濾波器和其他濾波器

3 濾波器的用途

4 數字濾波器的技術指標

5 數字濾波器設計方法

6 模擬濾波器的設計

    6.1 常見的模擬濾波器

    6.2 模擬低通濾波器的設計指標及逼近方法

7 巴特沃斯低通濾波器設計

8 設計巴特沃斯濾波器相關的matlab工具箱函數

9 基於Matlab的語音信號濾波器的設計與實現

    9.1 原始語音信號的頻譜

    9.2 添加高頻余弦噪聲

    9.3 巴特沃斯低通濾波器設計

    9.4 利用巴特沃斯低通濾波器對含躁語音信號濾波

1、數字濾波器的概念

2、數字濾波器分類

2.1 經典濾波器與現代濾波器

2.2 無限脈沖響應濾波器和有限長脈沖響應濾波器

2.3 選頻濾波器和其他濾波器

3、濾波器的用途

4、數字濾波器的技術指標

5、數字濾波器設計方法

6、模擬濾波器的設計

6.1 常見的模擬濾波器

6.2 模擬低通濾波器的設計指標及逼近方法

7、巴特沃斯低通濾波器設計

8、設計巴特沃斯濾波器相關的matlab工具箱函數

9、基於Matlab的語音信號濾波器的設計與實現

9.1 原始語音信號的頻譜 

 1 clc;
 2 clear;
 3 close all;
 4   
 5 [x1,fs,bits]=wavread('qq.wav'); %讀取語音信號的數據,賦給變量x1
 6 L=length(x1);
 7 sound(x1,fs); %播放語音信號
 8 
 9 N=L;
10 k=[0:N-1];
11 y1=fft(x1,N);  %對信號做L個點FFT變換
12 figure(1);
13 subplot(2,1,1);
14 plot(k(1:20000),abs(y1(1:20000))); %做原始語音信號的FFT頻譜圖
15 title('原始語音信號FFT頻譜');
16   
17 f=fs*(0:N-1)/N;
18 subplot(2,1,2);
19 plot(f(1:20000),abs(y1(1:20000)));
20 title('原始語音信號頻譜');
21 xlabel('f Hz');ylabel('fuzhi');

     說明:程序第17行的解釋見“四、DFT的周期性”公式四。 

    說明:上圖是FFT變換的頻譜圖(數字頻率k),下圖是轉換成模擬頻率下的頻譜圖。

9.2 添加高頻余弦噪聲 

 1 %給原始的語音信號加上一個高頻余弦噪聲,頻率為5kHz。畫出加噪后的語音信號時域和頻譜圖,與原始信號對比,可以很明顯的看出區別。
 2 t=[0:1/fs:(L-1)/fs];        %將所加噪聲信號的點數調整到與原始信號相同,構造采樣時間點(模擬時間)
 3 Au=0.03;                    %噪聲幅度
 4 d=[Au*cos(2*pi*8000*t)]';   %噪聲為8kHz(2*pi*8000/(2*pi))的余弦信號(模擬時間)
 5 x2=x1+d;
 6 
 7 figure(2);
 8 subplot(2,1,1);
 9 plot(x1);        %做原始語音信號的時域圖形
10 title('原始語音信號');xlabel('time n');ylabel('fuzhi');
11 
12 sound(x2,fs);    %播放加噪聲后的語音信號
13 subplot(2,1,2);
14 plot(x2);        %做原始語音信號的時域圖形
15 title('加噪后的信號');xlabel('time n');ylabel('fuzhi');
16 
17 y2=fft(x2,N);     %對信號做L個點FFT變換
18 figure(3);
19 subplot(2,1,1);
20 plot(k(1:20000),abs(y2(1:20000))); %做原始語音信號的FFT頻譜圖
21 title('加躁語音信號FFT頻譜');
22   
23 subplot(2,1,2);
24 plot(f(1:20000),abs(y2(1:20000)));
25 title('加躁語音信號頻譜');
26 xlabel('f Hz');ylabel('fuzhi');

     說明:程序前5行是構造高頻雜波信號,高頻噪聲信號也是按照fs為采樣頻率的,而且采樣點數也是L(與原始信號等長)。

    說明:通過頻譜圖就可以看到所加噪聲信號是8Khz。

9.3 巴特沃斯低通濾波器設計 

 1 wp=2*pi*4000;                       %通帶邊界角頻率
 2 ws=2*pi*5000;                       %阻帶邊界角頻率
 3 Rp=1;                               %通帶最大衰減
 4 Rs=15;                              %阻帶最小衰減
 5 [NN,Wn]=buttord(wp,ws,Rp,Rs,'s');   %選擇濾波器的最小階數
 6 [Z,P,K]=buttap(NN);                 %創建butterworth模擬濾波器
 7 [Bap,Aap]=zp2tf(Z,P,K);
 8 [b,a]=lp2lp(Bap,Aap,Wn);   
 9 [bz,az]=bilinear(b,a,fs);          %用雙線性變換法實現模擬濾波器到數字濾波器的轉換
10 
11 [H,W]=freqz(bz,az);                %繪制頻率響應曲線
12 figure(4);
13 plot(W*fs/(2*pi),abs(H));
14 grid;
15 xlabel('頻率/Hz');
16 ylabel('頻率響應幅度');
17 title('Butterworth');

 說明:

(1)前4行是設置波特沃斯濾波器的指標

(2)第5行是根據前4行的參數計算濾波器的階數NN和3db截止頻率Wn。

(3)第6行根據階數NN計算巴特沃斯歸一化模擬低通原型濾波器系統函數的零、極點和增益因子。

(4)第9行將模擬濾波器轉換到數字濾波器,而bz、az分別是分子和分母的系數。

    到此,有了bz、az,濾波器就構造出來了。

(5)第11行計算濾波器的頻率響應,freqz函數的使用見freqz()--matlab函數

(6)第13行的f(模擬頻率)=W*fs/(2*pi)解釋見“2.2.2采樣后的離散傅里葉頻譜”。 

    說明:可以看到巴特沃斯濾波器的特性是與之前設置的參數匹配的。

9.4 利用巴特沃斯低通濾波器對含躁語音信號濾波

x3=filter(bz,az,x2);
figure(5);
subplot(2,1,1);
plot(t,x2);               %畫出濾波前的時域圖
title('濾波前的時域波形');
subplot(2,1,2);
plot(t,x3);               %畫出濾波后的時域圖
title('濾波后的時域波形');
sound(x3,fs);        %播放濾波后的信號

y2=fft(x2,N);  %對信號做L個點FFT變換
figure(6);  
subplot(2,1,1);
plot(f(1:20000),abs(y2(1:20000)));
title('加躁語音信號頻譜');
xlabel('f Hz');ylabel('fuzhi');

y2=fft(x3,N);  %對信號做L個點FFT變換
subplot(2,1,2);
plot(f(1:20000),abs(y2(1:20000)));
title('去噪語音信號頻譜');
xlabel('f Hz');ylabel('fuzhi');

    說明:程序的第一行“x3=filter(bz,az,x2);”就是調用上邊構造的巴特沃斯低通濾波器對含躁信號x2濾波,其實就是數值運算。

    說明:通過對比可以看到,8Khz的高頻噪聲確實是被濾掉了。 

附:C調音符與頻率對照表

 

參考:基於Matlab的語音信號濾波器的設計與實現

      西電《數字信號處理》第三版

      freqz()--matlab函數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM