ある長い信号に対し連続でfftを行い、連番で保存する方法
12 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Jo Sasaki
am 2 Jul. 2019
Beantwortet: Shoumei
am 4 Jul. 2019
50khz、60秒の(3,000,001サンプルcsvデータがありまして、このcsvデータに対し2000データずつ且つ1000データずらしでfftを行いたいと考えています。
fftのかける範囲としては最初のfftは1~2001サンプルまでの範囲、次のfftをかける範囲としては1001~3001サンプルまでの範囲、のようにかけていき、結果を"fftcsvtitle_0000001.csv"のように連番で保存したいのですが方法をご教授いただければありがたいです。
fftの窓関数はhamming窓を指定する予定です。
複数長さの違うcsvデータが存在しているので下記のように信号の長さを変えれるようにしたいです。
Fs = 50000; % Sampling frequency
T = 1/Fs; % Sampling period
L = 3000001; % Length of signal
t = (0:L-1)*T; % Time vector
0 Kommentare
Akzeptierte Antwort
Shoumei
am 4 Jul. 2019
Yoshioさん相変わらずスパルタ教育ですね。
サンプルプログラム作成したのでご参考に。
まずテストデータ作成
%% テストデータ作成
dataLength = 3e6+1;
t = [0:dataLength-1]/50e3;
sig = chirp(t, 10, t(end), 20e3)'; % テスト用のチャープ信号
csvwrite('test1.csv', sig)
初期化
clear
FFTするプログラム
%%
Fs = 50e3; % Sampling frequency
Ts = 1/Fs; % Sampling period
sig = csvread('test1.csv'); % test1.csvに3000001点のデータが入っていると仮定
L = length(sig); % L = 30001
t = (0:L-1)*Ts; % Time vector
fftLength = 2000; % FFT点数
bufOverwrap = 1000; % Overwrap点数
winHam = hamming(fftLength); % hamming window
n = 1;
fileNum = 1;
%%
while true
sigFFT = fft(sig(n:n+fftLength-1).*winHam); % 2000点を切り出し。n = 1, 1001, 2001, ....
% 確認用
% subplot(2,1,1)
% plot(sig(n:n+fftLength-1))
% subplot(2,1,2)
% plot(log(abs(sigFFT)))
fileName = ['fftcsvtitle_' num2str(fileNum) '.csv'];
csvwrite(fileName, sigFFT)
fileNum = fileNum + 1;
n = n + bufOverwrap; % データ切り出し用の要素番号をインクリメント
if n > L-fftLength
break % nの値が信号点数を超えるとwhile Loop抜ける
end
end
0 Kommentare
Weitere Antworten (1)
Siehe auch
Kategorien
Mehr zu スペクトル測定 finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!