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
原文地址:https://www.cnblogs.com/zhaopengpeng/p/14519344.html