FFT結果を片側スペクトルを行い保存する方法
8 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
[x,fs]=audioread("gum70-25.wav");
f = 50:50:500;
Fs = 44100;
dt=1/Fs;
duration=(length(x)-1)*(1/fs);
t = (0:1/Fs:duration)';
n = floor(length(t)/Fs);
w = hamming(Fs);
for ii = 1:n
z{ii} = fft(w.*x(Fs*(ii-1)+1:Fs*ii));
z1{ii}=abs(z{ii})
z2{ii}= z1{ii}(10001:20000,:);
writematrix(z2{ii},sprintf('gum70-25_fftsave_%03d.csv',ii))
end
wavファイルを用いてワークスペースにベクトル化を行い、その後FFTを44100点ずつ行いました。FFTを行った後に振幅スペクトルを計算しその後1ok~20kHzの部分のみを抜き出そうとしたのですが、うまくできませんでした。
簡単なことではありますがご教授おねがいいたします。
2 commentaires
Réponses (1)
Hernia Baby
le 21 Jan 2023
Modifié(e) : Hernia Baby
le 21 Jan 2023
stftを使って振幅の片側スペクトルを求めてます。
今回はサンプリング周波数10,000Hz, 窓の大きさを1,000とします。
clear,clc;
Fs = 10000;
winsize = 1000;
Bandpath = [180 220];
サンプルデータを作ります。
t = (0:1/Fs:3-1/Fs).';
x = 0.5*cos(2*pi*t*200) + 0.1*randn(size(t));
figure
plot(t,x,'Color',[.4 .4 .4])
xlabel('時間[sec')
ylabel('信号')
stftで各パラメタを設定します。
今回窓は箱型にしています。
[s,f,t] = stft(x,Fs,'OverlapLength',0,'FFTLength',winsize,'FrequencyRange','onesided','Window',rectwin(winsize));
ここでバンドパス(というか周波数の範囲を決めただけ)を行います。
振幅については正規化します。
idx = f >= Bandpath(1) & f <= Bandpath(2);
s_b = abs(s(idx,:))./(winsize/2);
f_b = f(idx);
可視化します。
figure
heatmap(t,f_b,s_b)
xlabel('時間[sec]')
ylabel('周波数[Hz]')
colorbar
colormap(jet(10))
clim([0 1])
0 commentaires
Voir également
Catégories
En savoir plus sur スペクトル測定 dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!