在使用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