包含1列加速度计时程信号的csv文件,先进行带通滤波再计算频谱,并画出滤波后时程曲线图和幅值谱和相位谱的MATLAB程序
时间: 2024-03-21 08:38:46 浏览: 115
好的,以下是MATLAB程序:
```matlab
% 读取csv文件数据
data = csvread('data.csv');
% 获取加速度数据
acc = data(:, 1);
% 定义滤波器参数
fs = 1000; % 采样率
f1 = 1; % 低通滤波器截止频率
f2 = 50; % 高通滤波器截止频率
[b,a] = butter(4, [f1/(fs/2), f2/(fs/2)], 'bandpass');
% 带通滤波
acc_filtered = filtfilt(b, a, acc);
% 计算频谱
N = length(acc_filtered); % 信号长度
Y = fft(acc_filtered); % 傅里叶变换
P2 = abs(Y/N); % 双边频谱
P1 = P2(1:N/2+1); % 单边频谱
P1(2:end-1) = 2*P1(2:end-1);
f = fs*(0:(N/2))/N; % 频率向量
% 绘制时程曲线图
t = (0:length(acc)-1)/fs;
t_filtered = (0:length(acc_filtered)-1)/fs;
figure;
subplot(2,1,1);
plot(t, acc);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');
title('Original Signal');
subplot(2,1,2);
plot(t_filtered, acc_filtered);
xlabel('Time (s)');
ylabel('Acceleration (m/s^2)');
title('Filtered Signal');
% 绘制幅值谱和相位谱
figure;
subplot(2,1,1);
plot(f, P1);
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Amplitude Spectrum');
subplot(2,1,2);
plot(f, angle(Y(1:N/2+1)));
xlabel('Frequency (Hz)');
ylabel('Phase (rad)');
title('Phase Spectrum');
```
请确保将数据文件命名为"data.csv",并将其放在MATLAB当前工作目录中。
阅读全文