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濾波后的波形');
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;
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;
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])
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