|
发表于 2023-4-11 22:54:09
|
显示全部楼层
本帖最后由 下一页 于 2023-4-11 23:00 编辑
两个信号相乘,就是线性代数里的点积,点积的物理意义是两个向量的相关性,傅里叶变换本身的目的是用正弦波去在信号中找跟自己有关的部分,表现出来的是正弦波×正弦波,也就是楼主说的积化和差。
下面的程序是用MATLAB展示傅里叶变换的本质,就是挨个用各种频率的正弦波和余弦波(两个信号正交)去和信号做乘法(积化和差),乘法的结果是原始信号在这个频率下的信号幅度是多少,分别是实部和虚部。
Fs = 5000;
T = 1/Fs;
L = 1024; %取样点数
t = (0:L-1)*T;
S =pi* (sin(2*pi*50*t)+0.33*sin(2*pi*150*t) + 0.2*sin(2*pi*250*t)+0.13*sin(2*pi*350*t)+0.11*sin(2*pi*450*t))/4;%目标信号
%S=sin(2*pi*50*t)
subplot(411);
plot(t,S,'r')
xlabel('时间轴')
ylabel('电压轴')
title('时域图像')
S1=0+1.5*S+0.5*rand(1,L);%加了噪声的目标信号,这个应该是采集来的信号。
hold on%表示不改变原有图像,将 在原有图像基础上绘制新图像
plot(t,S1,'b')%增加横坐标t,否则坐标显示是1-n,这样显示是每个时间点
grid on%打开网格
r=zeros(1,L/2+1);%L个取样点,分辨出来的频率是L/2+1
x=zeros(1,L/2+1);
for f=1:1:L/2+1
SIN1=sin(2*pi*(f)*t);%对应频率的正弦
COS1=cos(2*pi*(f)*t);%对应频率的余弦
r(f)=abs(dot(SIN1,S1)/(L/2));%与正弦相关性之后是结果的实部,因为相关性是很多个点的累加和,所以要除以点数。
x(f)= abs(dot(COS1,S1)/(L/2));%与余弦相关性之后是结果的虚部。
end
subplot(412);
plot(r,'b:','linewidth',1.5)
xlabel('频率轴')
ylabel('电压轴')
title('正弦波的频域图像')
grid on
subplot(413);
plot(x,'r--','linewidth',0.5)
xlabel('频率轴')
ylabel('电压轴')
title('余弦波的频域图像')
grid on
c=complex(r,x);
fudu=sqrt(x.*x+r.*r);%分析出来原始信号的幅度
subplot(414);
xlabel('频率轴')
ylabel('电压轴')
title('频域图像')
plot(fudu,'k','linewidth',1.5)
grid on
axis auto
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|