スペクトログラム画像を逐次保存したい。

5 Ansichten (letzte 30 Tage)
Inagaki takeshi
Inagaki takeshi am 14 Mai 2021
Kommentiert: Inagaki takeshi am 17 Mai 2021
こんにちは。
音声データをスペクトログラムに変換、そのスペクトログラム画像をプログラム内で逐次保存したいと考えております。
1~3までの.wavデータを用意して行っています。
スペクトログラムを表示するところまではできているのですが、エラーが出て保存することができない状況です。
スペクトログラムを1.png,2.png...のような名前で逐次保存できるようにするにはどのようにしたら良いでしょうか。
また、この状態でスペクトログラム画像を表示すると画像が正方形で表示されてしまうため、特徴量が見やすいよう横長方形での保存ができるとありがたいです。
ご教授願います。
for b=1:3
%ファイルの名前は数字 1.wav,2.wav,...
filename =char(b+".wav");
%data=音声データ:Fsサンプリング周波数
[data,Fs] = audioread(filename);
%周波数を指定
f=0:31.25:8000;
%データ長を指定
data(160040:length(data))=[];
%音声データをスペクトログラムデータに変換(spdata)
[spdata,f,t]=spectrogram(data, hann(64), 32, f, Fs, 'yaxis');
%スペクトログラムを表示(圧縮)
figure(b)
spectrogram(data, hamming(64), 32, f, Fs, 'yaxis');
%スペクトログラム画像の保存
imwrite(figure(b),'.png');
end

Akzeptierte Antwort

Atsushi Ueno
Atsushi Ueno am 14 Mai 2021
saveas関数を使わない理由はありますか?なければ最後に開いたfigureをsaveas関数でファイルに保存できます。
filename =char(b+".png");
saveas(gcf, filename)
  3 Kommentare
Atsushi Ueno
Atsushi Ueno am 14 Mai 2021
>出力引数なしで spectrogram(___) を使用すると、現在の Figure ウィンドウにスペクトルグラムがプロットされます。
なので、Figure ウィンドウサイズを変えればスペクトログラムのサイズも変わる事を期待して:
fg1 = figure('Name', ['figure' num2str(b)], 'position', [400 250 1120 420]); %位置は適当、幅:高さ=8:3
spectrogram(data, hamming(64), 32, f, Fs, 'yaxis');
saveas(fg1, char(b+".png")); %スペクトログラム画像の保存
close(fg1); % 閉じなくても良いが、開いたままfigureハンドルが破棄される
上記の「'position',[400 250 1120 420]」の設定により横長の画像が保存されると思います。
Signal Processing Toolboxが無いのでspectrogramをplotに置き換えて動作確認しました。
※都合によりfigureハンドルを追加したり、figureのNumberの代わりにNameを設定したりしています。
※新しいリリースではより高度な関数が使えますが、動作確認出来ないので他者の回答に期待します。
Inagaki takeshi
Inagaki takeshi am 17 Mai 2021
ご回答ありがとうございます!
コードを参考にこちらでも試してみたところ、正常に横長の画像が保存されました。
返信が遅くなり申し訳ございませんでした。ありがとうございました!。

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu 時間-周波数解析 finden Sie in Help Center und File Exchange

Produkte


Version

R2021a

Community Treasure Hunt

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

Start Hunting!