利用MATLAB设计一个gui对Excel数据fft分析
时间: 2024-06-08 12:07:31 浏览: 156
以下是一个简单的 MATLAB GUI 代码,用于对 Excel 数据进行 FFT 分析:
```matlab
function fft_gui()
% 创建主窗口
fig = figure('Name', 'FFT 分析', 'NumberTitle', 'off', 'Position', [100 100 400 300]);
% 创建 GUI 控件
uicontrol('Style', 'text', 'String', '选择 Excel 数据文件:', 'Position', [50 220 120 20]);
filename_edit = uicontrol('Style', 'edit', 'Position', [180 220 150 20]);
browse_btn = uicontrol('Style', 'pushbutton', 'String', '浏览', 'Position', [340 220 50 20], 'Callback', @browse_callback);
uicontrol('Style', 'text', 'String', '选择数据列:', 'Position', [50 180 80 20]);
column_popup = uicontrol('Style', 'popupmenu', 'String', {}, 'Position', [140 180 80 20]);
uicontrol('Style', 'text', 'String', '采样率 (Hz):', 'Position', [50 140 80 20]);
fs_edit = uicontrol('Style', 'edit', 'String', '1000', 'Position', [140 140 80 20]);
uicontrol('Style', 'text', 'String', 'FFT 长度:', 'Position', [50 100 80 20]);
fftlen_edit = uicontrol('Style', 'edit', 'String', '1024', 'Position', [140 100 80 20]);
run_btn = uicontrol('Style', 'pushbutton', 'String', '运行', 'Position', [50 50 80 30], 'Callback', @run_callback);
close_btn = uicontrol('Style', 'pushbutton', 'String', '关闭', 'Position', [140 50 80 30], 'Callback', 'close');
% 浏览按钮回调函数
function browse_callback(~, ~)
[filename, path] = uigetfile({'*.xlsx;*.xls'}, '选择 Excel 数据文件');
if isequal(filename, 0) || isequal(path, 0)
return
end
set(filename_edit, 'String', fullfile(path, filename));
[~, ~, data] = xlsread(fullfile(path, filename));
set(column_popup, 'String', data(1,:), 'Value', 1);
end
% 运行按钮回调函数
function run_callback(~, ~)
filename = get(filename_edit, 'String');
if isempty(filename)
warndlg('请选择 Excel 数据文件', '警告');
return
end
column = get(column_popup, 'Value');
fs = str2double(get(fs_edit, 'String'));
if isnan(fs) || fs <= 0
warndlg('采样率必须为正数', '警告');
return
end
fftlen = str2double(get(fftlen_edit, 'String'));
if isnan(fftlen) || fftlen <= 0
warndlg('FFT 长度必须为正数', '警告');
return
end
[~, ~, data] = xlsread(filename);
x = cell2mat(data(2:end, column));
n = length(x);
t = (0:n-1) / fs;
window = hann(n);
y = fft(x .* window', fftlen) / n;
f = fs * (0:fftlen/2-1) / fftlen;
mag = abs(y(1:fftlen/2));
phase = unwrap(angle(y(1:fftlen/2)));
% 绘制 FFT 图形
fig_fft = figure('Name', 'FFT 图形', 'NumberTitle', 'off');
subplot(2, 1, 1);
plot(t, x);
xlabel('时间 (s)');
ylabel('幅值');
title('时域波形');
subplot(2, 1, 2);
plot(f, mag);
xlabel('频率 (Hz)');
ylabel('幅度谱');
title('频域波形');
% 绘制相位图形
fig_phase = figure('Name', '相位图形', 'NumberTitle', 'off');
plot(f, phase);
xlabel('频率 (Hz)');
ylabel('相位 (rad)');
title('相位谱');
end
end
```
此代码使用了 `xlsread` 函数读取 Excel 数据,并使用 `fft` 函数进行 FFT 分析。用户可以选择 Excel 文件和数据列,并设置采样率和 FFT 长度。点击“运行”按钮后,程序将绘制时域波形、频域波形和相位谱三幅图形。
阅读全文