作業內容
在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]); % 標準化圖形尺寸 |