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

조회 수: 5 (최근 30일)
Inagaki takeshi
Inagaki takeshi 2021년 5월 14일
댓글: Inagaki takeshi 2021년 5월 17일
こんにちは。
音声データをスペクトログラムに変換、そのスペクトログラム画像をプログラム内で逐次保存したいと考えております。
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

채택된 답변

Atsushi Ueno
Atsushi Ueno 2021년 5월 14일
saveas関数を使わない理由はありますか?なければ最後に開いたfigureをsaveas関数でファイルに保存できます。
filename =char(b+".png");
saveas(gcf, filename)
  댓글 수: 3
Atsushi Ueno
Atsushi Ueno 2021년 5월 14일
>出力引数なしで 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 2021년 5월 17일
ご回答ありがとうございます!
コードを参考にこちらでも試してみたところ、正常に横長の画像が保存されました。
返信が遅くなり申し訳ございませんでした。ありがとうございました!。

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 時間-周波数解析에 대해 자세히 알아보기

제품


릴리스

R2021a

Community Treasure Hunt

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

Start Hunting!