音声データよりFFT​を計算し一部を抜き出​し順次保存する方法(​ワークスペースor csv)

15 views (last 30 days)
一秀 近藤
一秀 近藤 on 15 Nov 2022
Commented: 一秀 近藤 on 21 Nov 2022
音声データよりFFTを順次保存することができるようになりましたが、1-44100のデータすべてではなく10001~20000のデータを抜き取りcsvファイルだけではなくワークスペースに一つにまとめて保存する方法をご教授お願いします。(csvファイルをひとつずつ作成するのではなく、FFTの結果(10001~20000)を一つの変数に順次保存するイメージです)
今までのプログラムも添付させていただいてます。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 15 Nov 2022
Edited: Atsushi Ueno on 15 Nov 2022
下記の様にyを一つの変数ではなくセル配列にすれば、ワークスペースに一つにまとめて保存する事が出来ます。
for ii = 1:n
% y = fft(w.*x(Fs*(ii-1)+1:Fs*ii));
y{ii} = fft(w.*x(Fs*(ii-1)+1:Fs*ii)); % yをセル配列にする
writematrix(y{ii},sprintf('fftsave_%03d.csv',ii))
end
  8 Comments
Atsushi Ueno
Atsushi Ueno on 17 Nov 2022
このプログラムは必ず同じサイズ(44100)のベクトルが積み重なっていくので、セル配列にする必要は無かったですね。もちろんセル配列にしても良いですし、セル配列にした後から行列に変換する事も可能です。
①1×23のセルではなく44100×23の形で残せるようにしたいです。
②またこの中の44100ではなく10001~20000だけを抽出し10000×23のセルの形を作りたいと考えてます。
n = 23; Fs = 44100;
w = hamming(Fs);
x = rand(Fs*n,1); % サンプルデータ
for ii = 1:n
% y = fft(w.*x(Fs*(ii-1)+1:Fs*ii));
y(:,ii) = fft(w.*x(Fs*(ii-1)+1:Fs*ii)); % 44100行のベクトルを23列積み重ねる
writematrix(y(:,ii),sprintf('fftsave_%03d.csv',ii))
end
size(y)
ans = 1×2
44100 23
z = y(10001:20000,:); % 10001~20000行の全列を抽出
size(z)
ans = 1×2
10000 23
すいません。MATLAB Answersで回答を続けているとどうしても保守的というか、どんな入力パターンが来ても良い様な「柔軟な方法」を選ぶ癖が付いてしまってます。でもそれは言い訳で、プログラムをよく読んで行列にすべきかセル配列にすべきかを判断する必要がありますね。
一秀 近藤
一秀 近藤 on 21 Nov 2022
ご丁寧な回答ありがとうございます。ならびに返信が遅れてしまい申し訳ございません。
とてもわかりやすく参考になりました!また自分の知識不足で混乱させてしまいすいません!
また何卒宜しくお願い致します!

Sign in to comment.

More Answers (0)

Categories

Find more on データ型の識別 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!