ある長い信号に対し連続でfftを行い、連番で保存する方法
조회 수: 12 (최근 30일)
이전 댓글 표시
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
채택된 답변
Shoumei
2019년 7월 4일
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
추가 답변 (1개)
참고 항목
카테고리
Help Center 및 File Exchange에서 スペクトル測定에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!