音声データよりFFTを計算し一部を抜き出し順次保存する方法(ワークスペースor csv)
2 次查看(过去 30 天)
显示 更早的评论
音声データよりFFTを順次保存することができるようになりましたが、1-44100のデータすべてではなく10001~20000のデータを抜き取りcsvファイルだけではなくワークスペースに一つにまとめて保存する方法をご教授お願いします。(csvファイルをひとつずつ作成するのではなく、FFTの結果(10001~20000)を一つの変数に順次保存するイメージです)
今までのプログラムも添付させていただいてます。
0 个评论
采纳的回答
Atsushi Ueno
2022-11-15
编辑:Atsushi Ueno
2022-11-15
下記の様に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 个评论
Atsushi Ueno
2022-11-17
このプログラムは必ず同じサイズ(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)
z = y(10001:20000,:); % 10001~20000行の全列を抽出
size(z)
すいません。MATLAB Answersで回答を続けているとどうしても保守的というか、どんな入力パターンが来ても良い様な「柔軟な方法」を選ぶ癖が付いてしまってます。でもそれは言い訳で、プログラムをよく読んで行列にすべきかセル配列にすべきかを判断する必要がありますね。
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Audio I/O and Waveform Generation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!