作业内容
在MATLAB绘制给出单个正弦波或余弦波的时域图和频域图
绘制实测数据的时域图和频域图
图1 单个正弦波的时频图
图1 单个正弦波的时频图
% 正弦波参数设置 f0 = 1000; % 信号频率 1kHz Fs = 16384; % 采样频率 16kHz T = 0.05; % 信号持续时间 0.05秒 A = 0.8; % 信号幅度 % 生成时间向量 t = 0:1/Fs:T; % 时间轴 (0到T秒,步长1/Fs) % 生成正弦波信号 sine_wave = A * sin(2*pi*f0*t); % 绘制时域波形 subplot(2,1,1) plot(t, sine_wave) xlabel('时间 (s)') ylabel('幅度') title('时域波形') xlim([0 0.01]) % 显示前10ms波形 % 频谱分析 N = length(sine_wave); % 采样点数 freq = (-Fs/2:Fs/N:Fs/2-Fs/N);% 频率轴 spectrum = fftshift(fft(sine_wave)); % 进行FFT % 绘制频域波形 subplot(2,1,2) plot(freq, abs(spectrum)/N*2) % 归一化处理 xlabel('频率 (Hz)') ylabel('幅度') title('频域特性') xlim([0 16000]) % 显示0-2kHz范围 grid on |
图2 实测数据的的时频图
filename = 'D:\Desktop\MATLAB\(此处放置实测数据文件)'; dataMat = readmatrix(filename, 'NumHeaderLines',16, 'Delimiter',','); % 使用高效读取函数 %% 数据预处理 t = dataMat(:,1); % 时间序列 signals = dataMat(:,2:end); % 30通道信号矩阵 %% 信号参数配置 Delta = 3.051757812500e-05; % 采样间隔 Fs = 1/Delta; % 采样频率 DataLength = 32768; % 固定数据长度 signalIdx = 1; % 目标信号索引 %% 时域分析 figure('Name','信号时频分析','NumberTitle','off'); subplot(2,1,1); plot(t, signals(:,signalIdx), 'LineWidth',2); title(sprintf('时域波形 - 信号 %d', signalIdx)); % 优化字符串生成 xlabel('时间 (s)'); ylabel('幅值 (Pa)');grid on; axis tight; % 自动优化坐标范围 %% 频域分析优化 signal = signals(:,signalIdx); Y = fft(signal, DataLength); % 明确指定FFT点数 P2 = abs(Y)/DataLength; % 幅度归一化 P1 = P2(1:DataLength/2+1); % 单侧频谱 P1(2:end-1) = 2*P1(2:end-1);% 能量修正 %% 频率向量生成优化 f = Fs*(0:DataLength/2)/DataLength; subplot(2,1,2); plot(f, P1, 'Color',[0 0.447 0.741], 'LineWidth',2); title(sprintf('频域特性 - 信号 %d', signalIdx)); xlabel('频率 (Hz)');ylabel('幅值'); xlim([0 Fs/2]); grid on; set(gcf,'Position',[100 100 800 600]); % 标准化图形尺寸 |