1. 问题描述
ANSYS常用的数据读取格式是:
*VREAD,EXCI1(1),V100K_C1,TXT
(F12.7)
用这种方式读取科学计数法数据如:
0.0000000e+00
1.9259679e-03
1.5124368e-02
4.9482003e-02
1.1225699e-01
2.0710678e-01
3.3348874e-01
4.8649803e-01
会发生错误,导致数据混乱,分析结果错误。
而序列化数据往往由MATLAB生成。
2. 技术背景
- ANSYS
- MATLAB
3. 解决方案
为了避免如此结果,需要保证MATLAB输出的数据问题为自然计数法格式。
MATLAB常规的数据输出语法:
save(filename,'V','-ascii','-double')
默认输出科学计数法数据。
为了得到自然计数法的数据,我们采用
4. 实施示例
信号数据构造示例:
% 题目: 超声导波激励信号的生成与频谱分析
% 参数:
% N - cycle数,即激励信号波峰数
% fc - 激励信号中心频率
% 功能:
% 生成激励信号序列
% 绘制时域图和频域图
% 对比不同cycle数信号的特征
% 输出txt文件
% 作者: 马骋
% 参考:张玉强2013,p29
% 2016.03.18 @HIT
clc,clear,close all
%% 基本参数
N = 1; % cycle数,即激励信号波峰数
fc = 100e3; % 激励信号中心频率,Hz
A = 1; % 激励信号幅值
T = 1e-4; % 激励持续时长
dt = 1/(20*fc)/2; % 时间步长,在最大步长基础上除以2
t = [0:dt:T]'; % 时间序列
%% 信号时域波形
V = A*[heaviside(t)-heaviside(t-N/fc)].*... % 时域输入信号求解
(1-cos(2*pi*fc*t/N)).*sin(2*pi*fc*t);
%% 频域信号
fs = 1/dt; % 采样频率
Nz = length(t); % 数据长度
fz= fs*(0:Nz-1)/Nz; % 频域横轴
X = fft(V); % fft变换
%% 绘图
figure
subplot(211)
plot(t,V)
xlabel('t(s)'),ylabel('Mangitude(N)')
xlim([0 T]),grid on
subplot(212)
plot(fz/1000,abs(X))
xlabel('frequency(kHz)'),ylabel('Amplitude')
xlim([0 fs/2/1000]),grid on % 防混叠,fs/2
%% 信号输出
filename = ['V',num2str(fc/1000),'K_C',num2str(N),'.TXT'];
% save(filename,'V','-ascii','-double')
fid = fopen(filename, 'w');
for iloop=1:length(V)
fprintf(fid, '%15.10f \r\n', V(iloop));
end
fclose(fid);
输出数据:
5. 常见问题
数据的格式也可以手动用Excel调整。
本文用时 20 min。