Plotting matrix as spectrogram

13 ビュー (過去 30 日間)
Sania Gul
Sania Gul 2022 年 8 月 26 日
コメント済み: Robert U 2022 年 8 月 26 日
I want to plot a matrix of 256* 16, as spectrogram. But when I use surf command to do so, I got spectrogram of size 343*436. I want the image to be of same size as that of matrix i.e. 256*16. Kindly suggest any solution without cropping or resizing the image as both of them distorts the quality.
  3 件のコメント
Sania Gul
Sania Gul 2022 年 8 月 26 日
[Q,F,T] = spectrogram(audio,hann(512),256,512,Fs,'yaxis');
Q=Q(1:256,:);
F=F(1:256);
figure(2)
D=surf(T,F,log(abs(Q).^2));
colormap parula
shading interp
view([0 90])
axis tight
set(gca,'xtick',[])
set(gca,'ytick',[])
export_fig AA.jpg -native -c[31 52 46 72]% top right bottom left
% reading the image
I=imread('AA.jpg');
>>The value of I=343x436x3 uint8, but the size of matrix Q was only 256x16, and I want 'I' to be also 256x16x3 uint8

サインインしてコメントする。

採用された回答

Robert U
Robert U 2022 年 8 月 26 日
Hi Sania Gul,
The values you provide are not consistent. I assume your "audio" is a vector of a certain length N, sampled with the frequency Fs.
Applying the function spectrogram with the window-length 512, overlap 256 and NFFT of 512 lead certainly to the dimension of Q of NFFT/2+1 = 257 and ((N - 512)/(512-256)).
If you want Q to be 257 x 16 you would have to provide a snippet of roughly 4600 samples.
fs = 60e3;
t = 0:1/fs:4599/fs;
x1 = vco(sawtooth(2*pi*t,0.5),[0.1 0.4]*fs,fs);
[Q,F,T] = spectrogram(x1,hann(512),256,512,fs,'yaxis');
size(Q)
ans = 1×2
257 16
Kind regards,
Robert
  4 件のコメント
Robert U
Robert U 2022 年 8 月 26 日
There is still some manual work required to get the desired result.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Find more on Time-Frequency Analysis in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by