% 清除工作区变量、关闭所有图形窗口、清空命令行 clear; close all; clc;%% 参数设置 Fs = 3200; % 采样频率 3200 Hz N = 10000; % 数据点总数 10000 t = (0:N-1)/Fs; % 时间向量(用于生成示例信号)%% 生成示例信号(用户应替换为自己的数据) % 合成信号:包含10Hz和100Hz的正弦波 + 高斯噪声 f1 = 10; % 第一个频率分量 10Hz f2 = 100; % 第二个频率分量 100Hz data = 0.5*sin(2*pi*f1*t) + sin(2*pi*f2*t) + 0.2*randn(size(t));%% 预处理(可选) data = data - mean(data); % 去除直流分量(中心化处理)%% 快速傅里叶变换(FFT) Y = fft(data); % 执行FFT,结果Y是复数数组 P2 = abs(Y/N); % 计算双边频谱幅度,并归一化%% 转换为单边频谱 P1 = P2(1:N/2+1); % 取前半部分频谱(0Hz ~ Fs/2) P1(2:end-1) = 2*P1(2:end-1); % 幅度修正(除直流和Nyquist频率外均×2)%% 构建频率轴 f = Fs*(0:(N/2))/N; % 创建频率向量(0Hz ~ Fs/2)%% 绘制时域信号 figure; subplot(2,1,1) plot(t, data) title('时域信号') xlabel('时间 (s)') ylabel('幅度') xlim([0 0.3]) % 显示前0.3秒数据 grid on;%% 绘制频域信号 subplot(2,1,2) plot(f, P1) title('单边幅度频谱') xlabel('频率 (Hz)') ylabel('幅度') grid on; xlim([0 Fs/2]) % 显示完整频率范围%% 峰值标注示例(可选) [~, locs] = findpeaks(P1, 'SortStr','descend', 'NPeaks',2); % 找前两个峰值 hold on; plot(f(locs), P1(locs), 'ro'); % 标出峰值点 text(f(locs(1))+5, P1(locs(1)), [num2str(f(locs(1)), '%.1f'), ' Hz']); text(f(locs(2))+5, P1(locs(2)), [num2str(f(locs(2)), '%.1f'), ' Hz']); hold off;