04_數字信號濾波Matlab代碼_常見操作


1. 設計一個如下的例子:
  信號由50Hz正弦波和200Hz正弦波組成,采樣率1Kbps,現設計一個低通濾波器,截止頻率125Hz,采樣320個數據,采用函數fir1進行設計(注意這個函數是基於窗口的方法設計FIR濾波,默認是hamming窗),濾波器階數設置為28。

1) 原始信號及FIR低通濾波

 1 fs = 1000; %采樣頻率
 2 N = 320; %采樣點數
 3 n=0:N-1;
 4 
 5 t = n/fs;  %時間序列
 6 f = n*fs/N; % 頻率序列
 7 
 8 % 50Hz和200Hz正弦波混合  輸入信號
 9 x = sin(2*pi*50*t) + sin(2*pi*200*t); 
10 
11 % 基於窗函數的fir濾波器設計 
12 % 28階 w = 2*pi*f/Fs w數字角頻率 f模擬頻率 Fs采樣頻率
13 b = fir1(28, 0.25);   
14 % freqz(b, 1, 512); %顯示濾波器
15 y = filter(b, 1, x); % 對輸入信號進行濾波操作
16 
17 % 顯示結果圖
18 subplot(211);
19 plot(t, x);
20 title("50Hz和200Hz正弦波混合輸入波形")
21 
22 subplot(212);
23 plot(t, y);
24 title('FIR-Lowpass濾波后的波形');
View Code

 

 

2) 基於FIR低通濾波的頻域分析過程

 1 %****************************************************************************************
 2 %                             FIR低通濾波器設計
 3 %***************************************************************************************
 4 % 
 5 fs = 1000; % 設置采樣頻率1K
 6 N = 320; % 采樣點數
 7 n = 0:N-1;
 8 
 9 t = n/fs; %時間序列
10 f = n*fs/N; %頻率序列
11 
12 x = sin(2*pi*50*t) + sin(2*pi*200*t); %50Hz和200Hz正弦波合成
13 
14 subplot(221);
15 plot(t, x); %繪制信號Mix_Signal的波形     
16 xlabel('時間');
17 ylabel('幅值');
18 title('原始信號');
19 grid on;
20 
21 subplot(222);
22 y = fft(x, N); %對信號 Mix_Signal做FFT
23 plot(f, abs(y));
24 xlabel('頻率/Hz');
25 ylabel("振幅");
26 title('原始信號FFT');
27 grid on;
28 
29 
30 
31 %基於窗函數的fir濾波器設計 28階 w = 2*pi*f/Fs w數字角頻率 f模擬頻率 Fs采樣頻率 
32 b = fir1(28, 0.25);    %28階FIR低通濾波器,截止頻率125Hz
33 filter_data = filter(b, 1, x);  % 對輸入信號進行FIR濾波操作
34 
35 y3=fft(filter_data, N);            %經過FIR濾波器后得到的信號做FFT
36 subplot(223);                              
37 plot(f,abs(y3));
38 xlabel('頻率/Hz'); 
39 ylabel('振幅');
40 title('濾波后信號FFT');
41 grid on;
42 
43 
44 [H, F] = freqz(b, 1, 512); %通過fir1設計的FIR系統的頻率響應
45 subplot(224);
46 plot(F/pi, abs(H)); %繪制幅頻響應
47 xlabel('歸一化頻率');
48 title(['Order=',int2str(30)]);
49 grid on;
View Code

 

3.) 4種FIR濾波的幅頻歸一化圖

 1 % 4種濾波的幅頻歸一化圖
 2 % 低通
 3 b1 = fir1(28, 0.25);    %28階FIR低通濾波器,截止頻率125Hz
 4 [H, F] = freqz(b, 1, 512); %通過fir1設計的FIR系統的頻率響應
 5 subplot(221);
 6 plot(F/pi, abs(H)); %繪制幅頻響應
 7 xlabel('低通濾波器');
 8 title(['Order=',int2str(28)]);
 9 grid on;
10 
11 % 高通
12 b2=fir1(28, 125/500, 'high');     %獲得濾波器系數,截止頻率125Hz,高通濾波。
13 [H2, F2] = freqz(b2, 1, 512); %通過fir1設計的FIR系統的頻率響應
14 subplot(222);
15 plot(F2/pi, abs(H2)); %繪制幅頻響應
16 xlabel('高通濾波器');
17 title(['Order=',int2str(28)]);
18 grid on;
19 
20 % 帶通
21 b3=fir1(28, [125/500 300/500]); %獲得濾波器系數,截止頻率125Hz和300Hz,帶阻濾波。
22 [H3, F3] = freqz(b3, 1, 512); %通過fir1設計的FIR系統的頻率響應
23 subplot(223);
24 plot(F3/pi, abs(H3)); %繪制幅頻響應
25 xlabel('帶通濾波器');
26 title(['Order=',int2str(28)]);
27 grid on;
28 
29 % 帶阻
30 b3=fir1(28, [125/500 300/500], 'stop'); %獲得濾波器系數,截止頻率125Hz和300Hz,帶阻濾波。
31 [H3, F3] = freqz(b3, 1, 512); %通過fir1設計的FIR系統的頻率響應
32 subplot(224);
33 plot(F3/pi, abs(H3)); %繪制幅頻響應
34 xlabel('帶阻濾波器');
35 title(['Order=',int2str(28)]);
36 grid on;
View Code

 2. 脈沖信號顯示及頻譜分析

 1 %*******************************
 2 %
 3 % 脈沖信號的頻譜濾波
 4 %
 5 %*******************************
 6 
 7 clc;
 8 clear all;
 9 x=0:200;  %x軸范圍
10 y=dirac(x-50);  %x=50處有δ函數,即δ(x-50)
11 y=1.5*sign(y);  %改變幅度
12 
13 y_fft = fft(y, 201);        
14 
15 
16 
17 subplot(211);
18 plot(x, y);
19 
20 xlabel('時間');
21 ylabel('幅值');
22 title("原始信號02");
23 
24 subplot(212);
25 plot(x, y_fft);
26 xlabel('頻率Hz');
27 ylabel('幅值');
28 title("原始信號02的幅頻圖");
29 
30 % axis ([0 200 -2 2])
View Code

 

 

 

 

 1 %****************************************************************************************
 2 %                             FIR低通濾波器設計
 3 %***************************************************************************************
 4 % 
 5 fs = 1000; % 設置采樣頻率1K
 6 N = 320; % 采樣點數
 7 n = 0:N-1;
 8 
 9 t = n/fs; %時間序列
10 f = n*fs/N; %頻率序列
11 
12 x = sin(2*pi*50*t) + sin(2*pi*200*t); %50Hz和200Hz正弦波合成
13 
14 subplot(221);
15 plot(t, x); %繪制信號Mix_Signal的波形     
16 xlabel('時間');
17 ylabel('幅值');
18 title('原始信號');
19 grid on;
20 
21 subplot(222);
22 y = fft(x, N); %對信號 Mix_Signal做FFT
23 plot(f, abs(y));
24 xlabel('頻率/Hz');
25 ylabel("振幅");
26 title('原始信號FFT');
27 grid on;
28 
29 
30 %基於窗函數的fir濾波器設計 28階 w = 2*pi*f/Fs w數字角頻率 f模擬頻率 Fs采樣頻率 
31 b = fir1(28, 0.25);    %28階FIR低通濾波器,截止頻率125Hz
32 filter_data = filter(b, 1, x);  % 對輸入信號進行FIR濾波操作
33 
34 y3=fft(filter_data, N);            %經過FIR濾波器后得到的信號做FFT
35 subplot(223);                              
36 plot(f,abs(y3));
37 xlabel('頻率/Hz'); 
38 ylabel('振幅');
39 title('濾波后信號FFT');
40 grid o


免責聲明!

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



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