以下是一个简单的 MATLAB 频谱分析仪的示例代码,它可以采集实时音频信号,对其进行 FFT 变换并在 GUI 界面上实时显示频谱图:
```matlab
function spectrumAnalyzer()
% 创建 GUI 窗口
f = figure('Visible','off','Position',[360,500,500,400]);
% 创建按钮
uicontrol('Style','pushbutton','String','开始采集',...
'Position',[400,10,80,30],'Callback',{@startButton_Callback});
% 创建绘图区域
hAxes = axes('Units','pixels','Position',[50,50,400,300]);
xlabel('频率(Hz)');
ylabel('幅值');
% 初始化变量
Fs = 44100; % 采样频率
N = 1024; % 采样点数
f = (0:N/2-1)*Fs/N; % 频率序列
% 创建数据队列
queue = zeros(N,1);
% 创建录音对象
recorder = audiorecorder(Fs,16,1);
% 设置按钮回调函数
function startButton_Callback(source,eventdata)
if strcmp(source.String,'开始采集')
source.String = '停止采集';
record(recorder);
while strcmp(source.String,'停止采集')
% 读取最新的音频数据
data = getaudiodata(recorder);
len = length(data);
if len > N
% 将新的数据加入队列
queue = [queue(len-N+1:end); data(len-N+1:end)];
% 对队列数据进行 FFT 变换
Y = fft(queue)/N;
P = abs(Y(1:N/2));
% 绘制频谱图
plot(hAxes, f, P);
xlim(hAxes, [0, Fs/2]);
ylim(hAxes, [0, 100]);
drawnow;
end
end
stop(recorder);
source.String = '开始采集';
end
end
% 显示窗口
f.Visible = 'on';
end
```
在代码中,我们创建了一个 GUI 窗口,其中包含了一个开始采集的按钮和一个绘图区域。当用户点击开始采集按钮时,我们会启动录音设备,并且在一个循环中读取最新的音频数据。将最新的数据加入到一个长度为 N 的队列中,并对队列数据进行 FFT 变换,最后在 GUI 界面上实时显示频谱图。用户可以在 GUI 界面上设置采样频率、采样点数、频率范围等参数,以满足不同的应用需求。