• 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
  • 相关阅读:
    华为服务器内存插法
    关于公司内部域名称是否要和外部真实域名称对应的问题
    配置Office 365单点登录摘要
    配置Office 365单点登录过程中的一些注意事项
    AADC安装指南
    使用非Web方式从CA申请证书
    爬取某招聘网站的信息
    通过PowerShell启用AADC的密码同步功能
    Azure Active Directory Connect密码同步问题
    Python脚本配合Linux计划任务工作
  • 原文地址:https://www.cnblogs.com/zhaopengpeng/p/14519344.html
Copyright © 2020-2023  润新知