芯片解密STM32上设计的滤波器有好的效果,需要在Matlab上提前实现50Hz陷波器,0.5Hz高通滤波器以及SG平滑滤波,通过Matlab仿真可以提前有效的了解滤波器的实际效果,图4-8为MATLAB仿真的最终结果。
Matlab代码:
- 芯片解密clc
- 芯片解密clear all
- fs=250; %数字滤波器的采样频率fs=250hz
- f=50; %50hz的正弦信号
- t=0:1/fs:4;
- %==========================================
- s=importdata('test.txt') ; %测试数据
- s=s(1:1000);
- figure
- subplot(411)
- plot(s);
- title('原始数据')
- IIR_B=[0.90239774423695518,-0.55771247730967288,0.90239774423695518];
- IIR_A=[1,-0.55771247730967288,0.80479548847391036];
- w01=0;
- w02=0;
- w03=0;
- y0=zeros(1,1000);
- for i=1:1000
- w01=s(i)-IIR_A(2)*w02-IIR_A(3)*w03;
- y0(i)=IIR_B(1)*w01+IIR_B(2)*w02+IIR_B(3)*w03;
- w03=w02;
- w02=w01;
- end
- subplot(412)
- plot(y0);
- title('50HZ陷波器+0.5HZ高通滤波器滤波之后');
- y0=y0(:);
- A=y0;
- %长度为5,阶数为5的S-G平滑滤波器
- N=11;
- d=3;
- M=(N-1)/2;
- for m=-M:M
- for i=0:d
- S(m+M+1,i+1)=m^i;
- end