matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值

项目场景:

这两天提取一组变压器数据,发现谐波比较严重,我在处理前想只拿到工频信号进行处理。原始数据就这样

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第1张图片

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第2张图片


问题描述:

杂波比较多。尤其是通道3因为是三相变压器的关系,受到另外两项的干扰更严重。


原因分析:

首先因为我测量的是漏磁通,因为漏磁通的变化受到工频电流的影响,故信号应该是成正弦50HZ变化的。

 

解决方案:

所以第一步先滤波我使用的是Matlab2020a自带的工具箱设计函数

在命令行窗口输入

filterDesigner

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第3张图片

我的设置如下

第一步

 

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第4张图片

  选择你要设计滤波器,低通高通带通带阻,这里我就不解释了

这里FIR和IIR两种数字滤波选择

我对这两种方式的简单理解为,IIR是有反馈的他的输出是上一次的输出和这一次输入计算的,

FIR是无反馈的,他是某种函数映射对应关系。选择窗,这是选择窗计算快一点。

详细的区别可以自行查阅资料,这里我也只是用一下。

第二步

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第5张图片

这里的设置阶数一般没有要求就最低阶就行,因为自己瞎捣鼓容易让他不收敛。这个缩放通带就默认就可以,其实不是很精确的滤波,这些参数的区别意义不大

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第6张图片matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第7张图片

这里HZ这里可以选择很多,我选择的就是HZ  

FS这里很关键,他是你信号的采样频率的一半。比如我的采样器是10K那我的FS就是5000.如果你是自己设计的函数,就是你计划采样率的一半。计划采样率由你采样的信号的频率决定,理论上是采样信号频率的2倍

工程上采用(2-10)倍。

这里FPASS就是通带

FSTOP就是阻带。

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第8张图片

这里就是通带阻带的衰减。

设计完成后我们点击设计滤波器

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第9张图片

此时MATLAB会给我们生成频率响应衰减曲线 ,看一下满不满足我们的预期满足的生成函数。

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第10张图片

Fs = 5000;  % Sampling Frequency

Fpass = 50;              % Passband Frequency
Fstop = 51;              % Stopband Frequency
Dpass = 0.057501127785;  % Passband Ripple
Dstop = 0.0001;          % Stopband Attenuation
flag  = 'scale';         % Sampling Flag

% Calculate the order from the parameters using KAISERORD.
[N,Wn,BETA,TYPE] = kaiserord([Fpass Fstop]/(Fs/2), [1 0], [Dstop Dpass]);

% Calculate the coefficients using the FIR1 function.
b  = fir1(N, Wn, TYPE, kaiser(N+1, BETA), flag);
Hd = dfilt.dffir(b);

这就是其生成的数据,我们使用的就是这个”Hd“

%   Tip:  If you have the Signal Processing Toolbox, you can design a
%   filter, D, using DESIGNFILT.  Then you can use Y = FILTER(D,X) to
%   filter your data.

根据MATLAB里的提示我们使用工具箱函数设计的滤波器可以直接使用

Y=filter(Hd,X);

我这里x是一行x列。

这就是我的滤波波形

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第11张图片

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第12张图片

这是我处理后的三相数据,之前是测量量只有两项

中间断点是因为我获取数据的问题,正常情况下应该是正弦波;

处理完成之后采用傅里叶变换提取幅频特性

N = length(data_b1);%求取抽样点数
y3 = fft(data_b1);%对信号进行傅里叶变换
f= (0:round(N/2)-1)*Fs/length(y);%频率显示

figure(3);
plot(f,abs(y3(1:round(N/2)))/(N/2));
xlabel('Frequency/ (HZ)');ylabel('Amplitude');
title('信号的频谱');
grid;

matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值_第13张图片

幅频特性如下50hz的幅频特性找到了。

 

完整程序如下

clc
clear

rng('default')

filepath='C:\Users\zz\Desktop\全部传感器方向一致 - 副本\';%文件夹的路径
char4=[filepath,'*.dat'];
cd (filepath);
    dat_sum=dir(char4);
    [hang,lei] = size(dat_sum);
    data_hang=hang*1600;
    
%     data_shuzu=zeros([data_hang,8]);
 for i=1:hang  %dat_nub是要读入的文件的个数
     if i<10   
      f1=fopen([filepath 'magind000' num2str(i) '.dat']);
     elseif i>=10&&i<100
      f1=fopen([filepath 'magind00' num2str(i) '.dat']);
     elseif i>=100&&i<1000
      f1=fopen([filepath 'magind0' num2str(i) '.dat']);
     else 
      f1=fopen([filepath 'magind' num2str(i) '.dat']);
     end
     A=fread(f1,[1600,8],'double'); %8个通道,每个通道1600个数据
	 fclose(f1);
     if i==1
     data_shuzu=A;
     else
     data_shuzu=[data_shuzu;A];
     end
 end

 data_satrt=1;
 data_add=40000;
 data_end=data_satrt+data_add;
 
 
                                                                     %采样率

Mix_Signal_1=data_shuzu(data_satrt:data_end,1)';
Mix_Signal_2=data_shuzu(data_satrt:data_end,3)';
Mix_Signal_3=data_shuzu(data_satrt:data_end,5)';
Mix_Signal_4=data_shuzu(data_satrt:data_end,2)';
Mix_Signal_5=data_shuzu(data_satrt:data_end,4)';
Mix_Signal_6=data_shuzu(data_satrt:data_end,6)';

%%  滤波
Fs = 5000;  % Sampling Frequency

Fpass = 50;              % Passband Frequency
Fstop = 51;              % Stopband Frequency
Dpass = 0.057501127785;  % Passband Ripple
Dstop = 0.0001;          % Stopband Attenuation
flag  = 'scale';         % Sampling Flag

% Calculate the order from the parameters using KAISERORD.
[N,Wn,BETA,TYPE] = kaiserord([Fpass Fstop]/(Fs/2), [1 0], [Dstop Dpass]);

% Calculate the coefficients using the FIR1 function.
b  = fir1(N, Wn, TYPE, kaiser(N+1, BETA), flag);
Hd = dfilt.dffir(b);

 Signal_Filter1=filter(Hd,Mix_Signal_1);
 Signal_Filter3=filter(Hd,Mix_Signal_3);
 Signal_Filter2=filter(Hd,Mix_Signal_2);
 
data_s=30262;
data_3t= 2000;
data_e=data_s+data_3t;

data_b1=Signal_Filter1(1,data_s:data_e-1)';
%%  FFT%%

N = length(data_b1);%求取抽样点数
y3 = fft(data_b1);%对信号进行傅里叶变换
f = 10/N*(0:round(N/2)-1)*1000;%显示实际频点的一半

figure(3);
plot(f,abs(y3(1:round(N/2)))/(N/2));
xlabel('Frequency/ (HZ)');ylabel('Amplitude');
title('信号的频谱');
grid;


 

 

 

你可能感兴趣的:(python与深度学习,matlab,滤波器,FFT)