matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值
项目场景:
这两天提取一组变压器数据,发现谐波比较严重,我在处理前想只拿到工频信号进行处理。原始数据就这样
问题描述:
杂波比较多。尤其是通道3因为是三相变压器的关系,受到另外两项的干扰更严重。
原因分析:
首先因为我测量的是漏磁通,因为漏磁通的变化受到工频电流的影响,故信号应该是成正弦50HZ变化的。
解决方案:
所以第一步先滤波我使用的是Matlab2020a自带的工具箱设计函数
在命令行窗口输入
filterDesigner
我的设置如下
第一步
选择你要设计滤波器,低通高通带通带阻,这里我就不解释了
这里FIR和IIR两种数字滤波选择
我对这两种方式的简单理解为,IIR是有反馈的他的输出是上一次的输出和这一次输入计算的,
FIR是无反馈的,他是某种函数映射对应关系。选择窗,这是选择窗计算快一点。
详细的区别可以自行查阅资料,这里我也只是用一下。
第二步
这里的设置阶数一般没有要求就最低阶就行,因为自己瞎捣鼓容易让他不收敛。这个缩放通带就默认就可以,其实不是很精确的滤波,这些参数的区别意义不大
这里HZ这里可以选择很多,我选择的就是HZ
FS这里很关键,他是你信号的采样频率的一半。比如我的采样器是10K那我的FS就是5000.如果你是自己设计的函数,就是你计划采样率的一半。计划采样率由你采样的信号的频率决定,理论上是采样信号频率的2倍
工程上采用(2-10)倍。
这里FPASS就是通带
FSTOP就是阻带。
这里就是通带阻带的衰减。
设计完成后我们点击设计滤波器
此时MATLAB会给我们生成频率响应衰减曲线 ,看一下满不满足我们的预期满足的生成函数。
Fs = 5000; % Sampling FrequencyFpass = 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列。
这就是我的滤波波形
这是我处理后的三相数据,之前是测量量只有两项
中间断点是因为我获取数据的问题,正常情况下应该是正弦波;
处理完成之后采用傅里叶变换提取幅频特性
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的幅频特性找到了。
完整程序如下
clc
clearrng('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 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;
matlab工具箱使用50hz低通滤波器设计 和FFT 变化截取50hz工频信号幅值相关推荐
- 基于MATLAB的数字图像处理的设计与实现 转
基于MAT [摘要]数字图像处理是一门新兴技术,随着计算机硬件的发展,数字图像的实时处理已经成为可能,由于数字图像处理的各种算法的出现,使得其处理速度越来越快,能更好的为人们服务.数字图像处理是一种通 ...
- 双线性变换 matlab,matlab和双线性变换的滤波器设计.doc
matlab和双线性变换的滤波器设计.doc 武汉理工大学MATLAB课程设计报告书题目MATLAB课程设计基于MATLAB和双线性变换的滤波器设计初始条件MATLAB仿真软件数字信号处理与图像处理基 ...
- matlab fft 画出幅值,画包络谱和幅值谱matlab函数示例代码
使用范例: x=@(t) (1+0.5*cos(9*pi*t)).*cos(200*pi*t+2*cos(10*pi*t))+sin(pi*t).*sin(30*pi*t); t=0:0.01:9.9 ...
- 基于matlab测幅值,基于MATLAB的分析测试系统
基于MATLAB的分析测试系统 来源:华强电子网 作者:华仔 浏览:663 时间:2016-08-10 14:18 标签: 摘要: 摘 要:介绍基于matlab的分析测试系统的结构,详细阐述了系统的工 ...
- 画幅值matlab,好用的画包络谱和幅值谱matlab函数
使用范例: x=@(t) (1+0.5*cos(9*pi*t)).*cos(200*pi*t+2*cos(10*pi*t))+sin(pi*t).*sin(30*pi*t); t=0:0.01:9.9 ...
- 频谱分析幅值单位_示波器FFT查看信号频谱和设置的方法
对信号中的频率分量进行分析是十分重要的,因为他们常常会在设计中引起噪声,一旦超出允许的公差,就可能进而导致器件发生故障功能失常.严重的还可能导致电压尖峰,损坏器件.如果我们在设计的时候没有进行正确的测 ...
- 关于MATLAB对已有数据的频谱分析及关心频率的幅值计算
直接上代码 %% 频谱分析clear clc close all%% 数据导入 % %打开测试数据,多文件处理 % [Fnameh,Pnameh] = uigetfile('*.txt'); % re ...
- matlab 幅值,幅值估计和填零
- MATLAB Simulink
- MathWorks 中国
幅值估计和填零 此示例说明如何使用填零来获得正弦信号幅值的精确估计.离散傅里叶变换 (DFT) 中频率的间隔为 Fs/N,其中 Fs 是采样率,N 是输入时序的长度.在尝试估计正弦波幅值时,如果频率无 ...
- matlab滤波器设计工具箱带阻滤波器,用matlab信号处理工具箱进行fir滤波器设计的三种方法...
用matlab信号处理工具箱进行fir滤波器设计的三种方法 摘 要 介绍了利用 MATLAB 信号处理工具箱进行 FIR 滤波器设计的三种方法:程序设计法. FDATool 设计法和 SPTool 设 ...
最新文章
- 小程序在canvas上层做图片滚动
- 用Transformer实现OCR字符识别!
- mac python3.8怎样安装scrapy_Python爬虫与mac下Scrapy配置
- Java IO最详解
- [算法笔记]二叉树基础
- ElasticSearch学习29_基于Elasticsearch实现搜索推荐
- 深度学习基础(四)—— RBM(受限波尔滋曼机)
- python中a=str(int(a))什么意思_python中a+=a和a=a+a的区别
- InnoDB在MySQL默认隔离级别下解决幻读
- mcal rtm_RTM的完整形式是什么?
- Android音视频编辑器架构图与分析
- linux添加终端快捷键,linux 终端快捷键
- hp390计算机硬盘模式设置,Bios设置中三种硬盘模式详解
- 微纳加工技术_工艺模块_STI 浅槽隔离
- QT的triggered意思
- python3 最基础
- oracle使用小技巧,Oracle在linux下使用小技巧
- centos7.4配置nginx php,centos7.4下安装配置PHP服务(源码安装)并配置nginx支持php
- Dockerhub最新的toomanyrequests问题
- 用计算机弹红莲华教程,原神红莲华琴谱 原神琴谱红莲华怎么弹
热门文章
- javascript基础知识总结
- 组策略下发URL地址时的问题
- git删除中间某个commit
- hashmap储存有向图_HashMap的存储结构及原理
- TypeScript算法专题 - [双链表1] - 双链的概念及其实现
- keil c语言循环嵌套,keil软件中C语言嵌套汇编
- python批量删除数据库记录_GitHub - TracyMcgrady6/pymsql_Operation: Python3操作mysql数据库,实现增、批量增、删、改、查...
- java bufferedinputstream关闭_Java BufferedInputStream close()用法及代码示例
- mysql 5.1.3_1.1.1 MySQL5.5默认存储引擎的调整(3)
- Python实现主成分分析(PCA)降维:原理及实例分析