上节我们讲的主要观点是:信号在我们脑海里面应该是以频谱的方式呈现,也就是各种频率的正弦波。
原因也说了,电感和电容的阻抗公式只能适用于正弦波。而正巧的是,傅里叶变换能将任何信号都变成正弦波的叠加。因此,我们处理信号正确的方式是,先将信号变成各种信号正弦波,然后通过电路,再合并起来,就是我们最终的信号。我举了方波通过RC滤波器之后波形的例子。
不过呢,上节我并没有做实验认证,这次就来补上,本节主要内容也是做实验的过程,主要是使用Matlab编程,并找了网友焊接的RC滤波器电路板实验,互相印证。
网友的电路实测的帖子,文末会给出链接,下面详细介绍下。
理论基础
目的:确定方波通过RC低通滤波器之后的精确波形
我们按照上面思路求得输出波形公式,过程如下:
公式看着有那么点复杂,其实不难,幅度按照比值代入。需要注意的是,要想得到精确波形,仅仅算出各个频率的幅度大小还不行,还得带上相位变化,如此才是准确的。
Matlab代码
%参数设置
R=1000/(2*pi); %电阻值,2*pi只是为了方便是截止频率为整数
C=0.000001; %电容
Fc=1/(2*pi*R*C); %RC滤波器的截止频率
f=1; %方波频率1Hz
omega=2*pi*f; %基频角频率w
%计算
t=-1:0.001:1 %坐标轴从-1到1,分辨率为0.001
n=[1:2:201]; %表示201谐波数的叠加 单行矩阵:1,3,5,7,9...201
An=4./(pi*n); %方波的各个谐波的系数 单行矩阵:1,1/3,1/5,1/7,1/9...1/201
Bn=sin(omega*n'*t); %方波的各个谐波分量 单列矩阵:sin(wt),sin(3wt),sin(5wt)...sin(201wt) '表示矩阵转置,即行矩阵变成列矩阵
s_wave=An*Bn; %方波表达式:单行矩阵乘以单列矩阵,即使方波的表达式(谐波系数乘以对应谐波分量,然后相加)
figure; %画图
plot(t, s_wave);%绘制方波曲线
hold on;
Cn= (1./(1+R^2*omega^2*(n'.^2)*C^2).^0.5).*sin(omega*n'*t-atan(R*C*omega*n')); %计算各个谐波分量通过滤波器,并附入相移atan(R*C*omega*n');
%Cn= (1./(1+R^2*omega^2*(n'.^2)*C^2).^0.5).*sin(omega*n'*t-atan(R*C*omega*n')); %计算各个谐波分量通过滤波器,并附入相移atan(R*C*omega*n');
rc_wave=An*Cn; %通过RC滤波器的
plot(t, rc_wave);
title(['截止频率=',num2str(Fc)]); %标题显示截止频率是多少
执行结果
1Hz方波,通过截止频率为1Hz的低通滤波器波形:
正巧我在某帖子上面看到,有人做过周期矩形波通过低通滤波器的实验
帖子链接为:
https://tieba.baidu.com/p/5528641195?red_tag=0506056473
两个实验的结果是同样的,证明了理论的正确性。感兴趣的同学,可以修改代码中的R和C的值,看看方波通过不同截止频率的波形是分别是什么样的。
有人说方波通过低通滤波器之后变成了正弦波,显然也不是的。
结语
傅里叶变换应用是非常广泛,写这个文章的目的,是为了让同志们知道傅里叶变换是怎么用的,为什么要用这个,这是我的目的。
如果您还是在校生,如果这篇文章能让你知道为什么要学习傅里叶变换,那我很欣慰。想当初我在学校的时候,仅仅只是因为要考试才去学。