傅里叶拟合任意一曲线matlab

%  使用说明:用导入数据功能把数据导入,令时间为变量t,位移为变量y
%%data 为自定义数据
close all;
Fs=10;  %采样频率
T=51.2; %采样时间
N=round(T*Fs);  %采样点数
t1=data(1:1:2^9,1);%时间点
y1=data(1:1:2^9,2);%时间点幅值
fake_y=y1-0.05*rand(512,1); %还原信号
err_y=fake_y-y1;
%  plot(t1,y1,t1,fake_y,t1,err_y);

fft_y=fft(y1,N);  %做FFT
Ayy=abs(fft_y);    %求幅值
real_Ayy=Ayy/(N/2);     %真实幅值转换
f=[0:511]*Fs/N;
% 幅度谱
subplot(2,1,1)
plot(f,real_Ayy);
title('y幅值谱');xlabel('频率/Hz');ylabel('幅值/um');grid;
%%
 
a = 0;
for i = 1:N/2
    if real_Ayy(i)>= 0.001 %取幅值大于0.001的频率分量
        a = a+1;
        my_NEW(a) = real_Ayy(i); %幅值大于0.001的信号分量的幅值
        f_NEW(a) = f(i);    %幅值大于0.001的信号分量的频率
        y1_NEW(a) = fft_y(i);    %幅值大于0.001的信号分量的相位
    end
end
phay = angle(y1_NEW);  %求相位并转化为角度(弧度)
%将幅值大于0.001的信号分量的函数表达式写出来
y_NEW = my_NEW(1)*cos(2*pi*f_NEW(1)*t1+phay(1))/2;
for i=2:a
    y_NEW = my_NEW(i)*cos(2*pi*f_NEW(i)*t1+phay(i)) + y_NEW;
end
 
subplot(2,1,2)
plot(t1,y1,'b-', 'LineWidth',4);
hold on
plot(t1,y_NEW, 'r-','LineWidth',2);
legend('原始信号','拟合信号')

%傅里叶频谱图
figure(2)
stem(f(2:250),real_Ayy(2:250),'LineWidth',0.1)
grid on

  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值