300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值

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

时间:2018-10-13 17:32:26

相关推荐

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

项目场景:

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

问题描述:

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

原因分析:

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

解决方案:

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

在命令行窗口输入

filterDesigner

我的设置如下

第一步

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

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

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

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

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

第二步

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

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

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

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

这里FPASS就是通带

FSTOP就是阻带。

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

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

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

Fs = 5000; % Sampling FrequencyFpass = 50; % Passband FrequencyFstop = 51; % Stopband FrequencyDpass = 0.057501127785; % Passband RippleDstop = 0.0001;% Stopband Attenuationflag = '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列。

这就是我的滤波波形

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

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

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

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;

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

完整程序如下

clcclearrng('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<100f1=fopen([filepath 'magind00' num2str(i) '.dat']);elseif i>=100&&i<1000f1=fopen([filepath 'magind0' num2str(i) '.dat']);else f1=fopen([filepath 'magind' num2str(i) '.dat']);endA=fread(f1,[1600,8],'double'); %8个通道,每个通道1600个数据fclose(f1);if i==1data_shuzu=A;elsedata_shuzu=[data_shuzu;A];endenddata_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 FrequencyFpass = 50; % Passband FrequencyFstop = 51; % Stopband FrequencyDpass = 0.057501127785; % Passband RippleDstop = 0.0001;% Stopband Attenuationflag = '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;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。