matlab采用fft傅里叶变换方法将信号分解得到一系列三角函数相加的函数表达式,matlab求信号的拟合函数表达式

 在使用CFX、fluent进行CFD的非定常计算时,有时我们需给定进出口的压力、温度、流量等参数的随时间的变化曲线,由于试验得到的信号数据一般为以一定频率采集得到的数据散点,而CFD计算需要给定函数表达式,这里介绍了如何将信号数据的散点通过matlab里的傅里叶变换函数转化为一系列三角函数叠加的显式函数表达式。

clear all;
clc;
close all;
Ori_signal = load('Original_signal.dat');
Ori_signal_x = Ori_signal(:,1);
Ori_signal_y = Ori_signal(:,2);
fs = 50000;    % 采样频率
N = dleta*fs;     % 采样点数
f = [0:N-1]*fs/N;    %频率
t = 1/fs*[0:N-1];
y = Ori_signal_y;
y1 = fft(y);    %对原始信号进行傅里叶变换得到的复数
my = abs(y1)*2/N;    %幅值
figure
plot(f,my);
title('y幅值谱');xlabel('频率/Hz');ylabel('幅值/um');grid;

a = 0;
for i = 1:N/2
    if my(i)>= 0.001 %取幅值大于0.001的频率分量
        a = a+1;
        my_NEW(a) = my(i); %幅值大于0.001的信号分量的幅值
        f_NEW(a) = f(i);    %幅值大于0.001的信号分量的频率
        y1_NEW(a) = y1(i);    %幅值大于0.001的信号分量的相位
    end
end
phay = angle(y1_NEW);  %求相位并转化为角度(弧度)

%将幅值大于0.001的信号分量的函数表达式写出来
y_NEW = my_NEW(1)*cos(2*pi*f_NEW(1)*t+phay(1))/2;
for i=2:a
    y_NEW = my_NEW(i)*cos(2*pi*f_NEW(i)*t+phay(i)) + y_NEW;
end

figure
plot(t,y,'b-', 'LineWidth',4);
hold on
plot(t,y_NEW, 'r-','LineWidth',2);
legend('原始信号','拟合信号')

figure
stem(f(2:250),my(2:250),'LineWidth',2)
grid on

 

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值