采用MATLAB编程,对太赫兹脉冲波的时域波形进行傅立叶变换,画出幅度谱线和相位谱线。在网上没能找到相关代码的教程,只能自己根据师兄的指导来做一遍了。
1. MATLAB代码
clear variables;clc;
% 导入数据,数据格式为两列,第一列为x轴时域时间,第二列为y轴时域幅值
Sample = importdata('data/air');
% 傅立叶变换补0个数,为了达到2的次方来进行快速计算,具体取多少,有待思考
Zero_n = 2048;
% 取出一维向量
Sample_x = Sample(:,1);
Sample_y = Sample(:,2);
% 计算采样率,用Delt_t这样的时间间隔,取倒数求得时域波形的采样频率
Delt_t = Sample_x(3) - Sample_x(2); %这里可能会遇到Sample_x(1) = 0 的情况,所以用第三个x值减第二个x值求得时间间隔
Sample_frequency = 1 / Delt_t;
% 换算成实际频率
Frequency = ((1 : Zero_n)-1) * Sample_frequency / (Zero_n);
Frequency = Frequency'; % 13次方
Frequency = Frequency .* 10^-12; % 由于13次方单位太大,化到THz
% 傅立叶变换
Sample_fft = fft(Sample_y, Zero_n);
Sample_fft_amplitude = abs(Sample_fft); % 取绝对值得到幅值,类似平方和开根号
Sample_fft_phase = angle(Sample_fft); % 用angle函数解得有重叠的弧度
% unwrap(P)解包矢量P中的弧度相位角,如果想得到角度需要再 *180/pi
Sample_fft_phase = -unwrap(Sample_fft_phase);
% 我们来画出时域、频域幅值和频域相位三幅图
figure(1)
% 时域波形
subplot(1, 3, 1)
plot(Sample_x, Sample_y, 'Color', 'r', 'linewidth',2);
set(gca,'fontname', 'Times New Roman', 'FontSize',20, 'linewidth', 2, 'color', 'non');
title('Time Domain','FontName', 'Times New Roman', 'fontsize',30, 'FontWeight', 'bold');
xlabel('Time(s)')
ylabel('Current(A)')
% 频域幅值波形
subplot(1, 3, 2)
plot(Frequency, Sample_fft_amplitude, 'Color', 'r', 'linewidth',2);
set(gca,'fontname', 'Times New Roman', 'FontSize',20, 'linewidth', 2, 'color', 'non');
title('Amplitude','FontName', 'Times New Roman', 'fontsize',30, 'FontWeight', 'bold');
xlabel('Frequency(THz)')
ylabel('Amplitude')
% 频域相位波形
subplot(1, 3, 3)
plot(Frequency, Sample_fft_phase, 'Color', 'r', 'linewidth',2);
set(gca,'fontname', 'Times New Roman', 'FontSize',20, 'linewidth', 2, 'color', 'non');
title('Phase','FontName', 'Times New Roman', 'fontsize',30, 'FontWeight', 'bold');
xlabel('Frequency(THz)')
ylabel('Phase')
2. 实验图像
这个地方有一点需要注意的是,我没有对频率范围做出限制,导致频域谱线中横坐标频率从0THz - 30THz,一遍情况下我们会截取0.2THz - 2.2THz中间的结果来进行后续分析。
3. 实验室真实结果
真实实验结果,3种透明薄膜材料样品,截取0.2THz - 2.2THz得到如下结果