有1列CSV文件的加速度计时程信号,先进行带通滤波再计算其FFT频谱并绘制幅值谱和相位谱图形的MATLAB程序
时间: 2024-03-15 12:44:28 浏览: 119
FFT幅值谱(加速度)
好的,以下是MATLAB程序:
```matlab
% 读取CSV文件中的加速度信号数据
data = csvread('acceleration.csv');
% 设计带通滤波器
fs = 1000; % 采样率
f1 = 10; % 通带下限频率
f2 = 100; % 通带上限频率
Wn = [f1 f2]/(fs/2); % 归一化截止频率
N = 4; % 滤波器阶数
[b, a] = butter(N, Wn, 'bandpass'); % 设计Butterworth带通滤波器
% 进行滤波
filtered_data = filter(b, a, data);
% 计算FFT频谱
N = length(filtered_data); % 信号长度
Y = fft(filtered_data); % 计算FFT
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; % 频率向量
% 绘制幅值谱
subplot(2,1,1)
plot(f, P1)
title('单边幅值谱')
xlabel('频率 (Hz)')
ylabel('幅值')
% 计算相位谱
phase = unwrap(angle(Y)); % 相位谱
P1_phase = phase(1:N/2+1); % 单边相位谱
% 绘制相位谱
subplot(2,1,2)
plot(f, P1_phase)
title('单边相位谱')
xlabel('频率 (Hz)')
ylabel('相位 (rad)')
```
程序假设加速度信号数据保存在名为 `acceleration.csv` 的CSV文件中。你需要将程序保存为 `.m` 文件并在MATLAB命令窗口中运行。程序会绘制出带通滤波后的信号的幅值谱和相位谱。
阅读全文