对信号stft变换,绘制出stft频谱图,谱峰图,以及fbs或者sinusoid重建信号以后的图MATLAB
时间: 2023-06-19 19:03:15 浏览: 51
以下是一个示例MATLAB代码,可以用于进行STFT变换、绘制STFT频谱图和谱峰图、以及进行FBS重建:
```matlab
% 生成示例信号
fs = 1000; % 采样率
t = 0:1/fs:1; % 时间轴
x = cos(2*pi*50*t) + cos(2*pi*120*t) + sin(2*pi*200*t);
% 进行STFT变换
win = hamming(256); % 窗函数
nfft = 512; % FFT点数
hop = 128; % 帧移
[S,F,T] = spectrogram(x, win, hop, nfft, fs);
% 绘制STFT频谱图
figure;
imagesc(T,F,20*log10(abs(S)));
set(gca,'YDir','normal');
colorbar;
xlabel('Time (s)');
ylabel('Frequency (Hz)');
title('STFT Spectrogram');
% 计算谱峰图
[pks,locs] = findpeaks(abs(S(:,10)), 'SortStr','descend');
% 绘制谱峰图
figure;
stem(F(locs),pks);
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Spectrum Peaks');
% 进行FBS重建
X = abs(S);
X(X<max(X(:))/100) = 0; % 设置阈值,去除干扰
xhat = istft(X.*exp(1j*angle(S)),win,hop,nfft,fs);
% 绘制原始信号和重建信号
figure;
subplot(2,1,1);
plot(t,x);
xlabel('Time (s)');
ylabel('Amplitude');
title('Original Signal');
subplot(2,1,2);
plot(t,xhat);
xlabel('Time (s)');
ylabel('Amplitude');
title('Reconstructed Signal');
```
运行该代码,即可得到STFT频谱图、谱峰图以及重建信号的绘图。