MATLAB STFT 三维图像聚类:短时傅里叶变换与高度聚类示例
以下是一个使用 MATLAB 中的 stft 函数进行短时傅里叶变换并进行高度聚类操作的示例代码:
% 生成一个示例信号
fs = 1000; % 采样率
t = 0:1/fs:1-1/fs; % 时间序列
f1 = 50; % 第一个频率成分
f2 = 150; % 第二个频率成分
x = sin(2*pi*f1*t) + sin(2*pi*f2*t);
% 使用stft函数进行短时傅里叶变换
windowSize = 256; % 窗口大小
hopSize = 128; % 帧移大小
nfft = 256; % FFT点数
[S, f, t] = stft(x, windowSize, hopSize, nfft, fs);
% 绘制变换后的三维图像
figure;
surf(t, f, abs(S), 'EdgeColor', 'none');
axis tight;
view(0, 90);
xlabel('时间(秒)');
ylabel('频率(Hz)');
title('短时傅里叶变换结果');
% 对高度进行聚类操作
threshold = 0.5; % 阈值
cluster = abs(S) >= threshold; % 大于等于阈值的为1,小于阈值的为0
% 绘制聚类结果
figure;
imagesc(t, f, cluster);
axis xy;
xlabel('时间(秒)');
ylabel('频率(Hz)');
title('聚类结果');
colormap(gray);
colorbar;
该代码首先生成一个示例信号,然后使用 stft 函数对信号进行短时傅里叶变换,并绘制出变换后的三维图像。接下来,通过设置一个阈值对变换结果的高度进行聚类操作,将大于等于阈值的部分设为 1,小于阈值的部分设为 0,并绘制出聚类结果。
原文地址: https://www.cveoy.top/t/topic/vYI 著作权归作者所有。请勿转载和采集!