(a) 构建电子表格进行傅立叶分析:
为了进行傅立叶分析,我们需要读取提供的采样信号,计算其离散傅立叶变换(DFT),然后将结果转换为幅度和相位。下面是一个示例代码,可以帮助你完成这个任务。
% 读取采样信号
data = xlsread('采样信号.xlsx');
% 设置采样参数
fs = 100000; % 采样频率
T = 1/250; % 基频周期
N = length(data); % 信号长度
n = 0:N-1; % 采样点序号
% 计算直流分量
dc = mean(data);
% 计算 DFT 并转换为幅度和相位
X = fft(data)/N;
X_amp = 2*abs(X(1:floor(N/2)+1));
X_phase = angle(X(1:floor(N/2)+1));
% 输出幅度和相位到电子表格
freqs = (0:floor(N/2))/(N*T);
table(freqs.', X_amp, X_phase)
% 找到四个主要交流频率分量
[amp_sorted, ind] = sort(X_amp, 'descend');
four_freqs = freqs(ind(1:4));
four_amps = amp_sorted(1:4);
four_phases = X_phase(ind(1:4));
在上述代码中,我们首先使用 xlsread
函数读取提供的采样信号,然后定义了一些常量和变量来设置采样参数,并计算信号的直流分量。接下来,我们使用 fft
函数计算 DFT,然后使用 2*abs()
和 angle()
将结果转换为幅度和相位。最后,我们输出前 20 个频率分量的幅度和相位到电子表格,并找到幅度最大的四个频率分量及其相应的幅度和相位。
(b) 使用直流值和四个主频分量合成信号:
使用从傅立叶分析中获得的直流值和四个主频分量的幅度和相位,我们可以合成一个新的信号。以下是一个示例代码,可以帮助你完成这个任务。
% 定义合成信号的时间序列
t = (0:399)/fs;
% 合成信号
y = dc;
for i = 1:4
y = y + four_amps(i)*cos(2*pi*four_freqs(i)*t + four_phases(i));
end
在上述代码中,我们定义了一个时间序列 t
,用于合成信号。然后,根据从傅立叶分析中获得的直流值和四个主频分量的幅度和相位,我们合成了一个新的信号 y
。通过将 cos
函数的频率设置为对应的主频分量频率,我们构建了信号的主要变化部分,并通过添加直流分量来改变基准值。
(c) 从原始信号中减去合成信号并计算差值信号的 RMS 值:
接下来,我们需要从原始信号中减去由直流值和四个主频分量构成的合成信号,并计算差值信号的均方根值。以下是一个示例代码,可以帮助你完成这个任务。
% 计算差值信号
diff = data - y.';
% 计算差值信号的 RMS 值
rms_diff = rms(diff);
% 计算 dB 值
db_diff = 20*log10(rms_diff/rms(data));
在上述代码中,我们使用 -
运算符从原始信号中减去合成信号,然后使用 rms
函数计算差值信号的 RMS 值。最后,我们使用 dB 单位表示 RMS 差异,并将其保存在变量 db_diff
中。
请注意,在计算 RMS 值时,我们将数据转置了一下,这是因为在 Matlab 中默认情况下 rms
函数计算每个列向量的 RMS 值,而不是行向量。