大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
MATLAB中进行软件滤波仿真
我身边有些朋友说现在在学校学习什么拉氏变换,Z变换,傅立叶变换没有用,传递函数没有用,差分方程没有用,只是纸上谈兵,我这里先就传递函数和拉氏变换和差分方程介绍几点不自量力的看法,我们学习拉氏变换主要是为了从脱离时域,因为时域分析有它的难度指数,我们从时域映射到S域,目的只有一个,那就是简化计算,正如我们在时域要计算卷积过来,卷积过去,我们把它映射到S域过后,就是乘积过来积乘过去,相对来说,乘积要比卷积的积分要温柔的多,然后我们在S域里面得到结论过后,再将其反映射回到时域,然后自然地在时域使用其所得的结论了。
以下仅举两个例子,就一阶惯性惯性滤波器和二阶滤波器的算法实现做简要介绍,如下,我们很容易写出其传递函数,G(s)=…/…,在G(s)中,S项即为微分项,计算机中,微分即为差分,因为我们是因果系统,即使用后项差分代替微分,例如:sU(t)转化为U(K)-U(K-1),如此一来,代入传递函数简将传递函数化后,再将其写编成软件仿真。相对于我自己,觉得最快的方式就是MATLAB算法仿真,如下即为仿真结果,二阶滤波器仿真同理。在调整相应参数的时候,即可看成在硬件电路中调整R、C的参数一样。
一、一阶惯性滤波器软件实现
clear,clc
Data = load(‘usefuldata.txt’);
plot( Data );
title(‘original data’);
T = 5;%电路综合参数(融合了电容电阻和微分时间参数)
Data2 = zeros( size( Data ) );
Data2( 1 ) = Data( 1 );
[ H V ] = size( Data );
fori =2:V
Data2( i ) = ( Data( i ) + T * Data2( i – 1) ) / ( T+1 );
end
figure
plot(Data2);
title(‘handled data’);
以下是仿真结果:
1、原始数据的波形:
2、滤波过后的数据的波形:
二、二阶惯性滤波器软件实现
MATLAB代码如下:
%LRC滤波器软件实现
clear,clc
Data = load(‘usefuldata.txt’);
plot( Data );
title(‘original data’);
T = 0.001;%微分时间
R = 100000;%电路电阻
C = 0.1;%滤波电容
L = 0.02;%滤波电感
Data2 = zeros( size( Data ) );
Data2( 1 ) = Data( 1 );
Data2( 2 ) = Data( 2 );
[ H V ] = size( Data );
fori =3:V
Data2( i ) = ( Data( i ) + ( T * R * C + 2 * T * L * C )…%表明本行还没有结束
* Data2( i – 1) – T * L * C * Data2( i – 2 ) ) / ( T * L * C + 1 + T * R * C );
end
figure
plot(Data2);
title(‘handled data’);
以下是仿真结果:
1、原始数据的波形:
2、滤波过后的数据的波形:
以上程序中,只是用了MATLAB的仿真功能,没有调用MATLAB的滤波函数,所以完全可以将MATLAB程序翻译成C语言后嵌入下位机软件中使用。
虽然上述两类滤波算法并没有FFT和小波分析进行滤波来的高大上,更没有后两者来的直接,但在一些简单数据处理中有它独特的优势。建议AD采样进来的数据进行简单滤波,因为一般应用都不会在AD上面做很精确的基准电压。
这里是仿真所用的数据,欢迎实验。usefuldata.txt
最后要强调的是,笔者观点,欢迎大神拍砖交流与指教。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/188448.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...