时间序列数据转换成频域FFT

106(30天)
THONTI BEERAIAH
THONTI BEERAIAH 2020年12月16日
回答: 马修•诺伊 2020年12月16日
我有一个振幅数据时间序列样本(2000)的文件现在我需要转换到频域,这样配置的频率峰值振幅发生。我在这里将我的数据文件(. txt)请帮我写一个代码

答案(2)

明星黾
明星黾 2020年12月16日
实验:
s = readmatrix (“dec.txt”);
L =元素个数(年代);%信号长度
Fs = 1 e + 9;%组成采样频率和单位(赫兹)
Fn = f / 2;%奈奎斯特频率
t = linspace (0, 1, L) / Fs;%弥补时间向量
情节(t, s)
网格
包含(“时间(s)”)%组成频率单位
ylabel (的振幅(秒差距))%振幅单位
FTs = fft (s - (s)) / L;%减去想看到其他山峰
阵线= linspace(0, 1,修复(L / 2) + 1) * Fn;%频率向量
4 = 1:元素个数(艘);%指数向量
情节(阵线,abs (FTs (Iv)) * 2)
网格
包含(的频率(赫兹))
ylabel (的振幅(秒差距))

马修•诺伊
马修•诺伊 2020年12月16日
我的小代码:
clc
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% FFT参数
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
NFFT = 4096;%
重叠= 0.75;
%声谱图数据库规模
spectrogram_dB_scale = 80;% dB范围规模(意味着,显示程度最低的是XX dB马克斯以下级别)
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%的选项
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%如果你是声学处理,您可能希望有一个加权
%光谱
% option_w = 0:线性光谱(不加权dB (L))
% option_w = 1:加权谱(dB (A))
option_w = 0;
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%负载信号
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
% %数据
% = readmatrix数据(“data.txt”);
%替代(老)方法txt ascii文件
fid = fopen (“data.txt”、“r”)
(数据、样本)= fscanf (fid, ' % 12 f ');
文件关闭(fid);
Fs = 1000;%采样频率(赫兹)
频道= 1;
信号=数据(:,通道);
样品长度=(信号);
% %毁掉(如果需要)
%注:decim = 1将什么也不做(输出=输入)
decim = 2;
如果decim > 1
信号=毁掉(信号,decim);
Fs = Fs / decim;
结束
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%显示1:平均频谱
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
[频率,sensor_spectrum] = myfft_peak(信号,Fs, NFFT重叠);
%转换为数据库规模(ref = 1)
sensor_spectrum_dB = 20 * log10 (sensor_spectrum);
%如果需要应用weigthing
如果option_w = = 1
pondA_dB = pondA_function(频率);
sensor_spectrum_dB = sensor_spectrum_dB + pondA_dB;
my_ylabel =(振幅(dB (A)));
其他的
my_ylabel =(振幅(dB (L)));
结束
图(1)中,情节(频率,sensor_spectrum_dB, b);网格
标题(['平均频谱/ Fs = ' num2str (Fs)“赫兹/δf =”num2str(频率(2)频率(1))“赫兹”);
包含(频率(赫兹));ylabel (my_ylabel);
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%显示2:时间/频率分析:光谱图演示
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
[sg,最为次数)= specgram (Fs信号,NFFT,汉宁(NFFT),地板(NFFT *重叠));
% FFT正常化和转换振幅从线性到dB(峰值)
sg_dBpeak = 20 * log10 (abs (sg)) + 20 * log10(2 /长度(最为));%注:X = fft (X。*汉宁(N)) * 4 / N;%汉宁只
%如果需要应用weigthing
如果option_w = = 1
pondA_dB = pondA_function(最为);
sg_dBpeak = sg_dBpeak + (pondA_dB *(1、大小(sg_dBpeak 2)));
my_title =(声谱图(dB (A)));
其他的
my_title =(声谱图(dB (L)));
结束
%饱和度的dB范围:
% saturation_dB = 60;% dB范围规模(意味着,显示程度最低的是XX dB马克斯以下级别)
min_disp_dB =圆(max (max (sg_dBpeak))) - spectrogram_dB_scale;
sg_dBpeak (sg_dBpeak < min_disp_dB) = min_disp_dB;
%情节光谱图
图(2);
显示亮度图像(次数、最为sg_dBpeak); colormap(“喷气机”);
轴(xy); colorbar(“绿色”);网格
标题([my_title ' / Fs = ' num2str (Fs)“赫兹/δf =”num2str(最为(2)最为(1))“赫兹”);
包含('时间(s) '); ylabel(频率(赫兹));
函数pondA_dB = pondA_function (f)
% dB (A)权重曲线
n = ((12200 ^ 2 * f。^ 4)。/ ((f。^ 2 + 20.6 ^ 2)。* (f。^ 12200 ^ 2 + 2)。* sqrt (f。^ 2 + 107.7 ^ 2)。* sqrt (f。^ 2 + 737.9 ^ 2)));
r = ((12200 ^ 2 * 1000。^ 4)。/ ((1000 ^ 2 + 20.6 ^ 2)。* (1000。12200 ^ ^ 2 + 2)。* sqrt (1000 ^ 2 + 107.7 ^ 2)。* sqrt(1000 ^ 2 + 737.9 ^ 2))) *的(大小(f));
pondA = n / r;
pondA_dB = 20 * log10 (pondA (:));
结束
函数[freq_vector fft_spectrum] = myfft_peak(信号,Fs, nfft重叠)
%的FFT频谱峰值信号(例如窦FFT后振幅1 = 0分贝)。
%线性平均
%的信号- - -输入信号,
% Fs -采样频率(赫兹)。
% nfft - FFT窗口大小
%重叠-缓冲重叠%(介于0和0.95)
样品长度=(信号);
%填满信号零是否低于nfft它的长度
如果样品< nfft
s_tmp = 0 (nfft, 1);
s_tmp((1:样品))=信号;
信号= s_tmp;
结束
%窗口:汉宁
=汉宁窗(nfft);
窗口=窗口(:);
%计算fft和重叠
抵消=修复((1-Overlap) * nfft);
spectnum = 1 +修复((samples-nfft) /抵消);%的窗户
% %信息等价于:
% noverlap = * nfft重叠;
% spectnum =修复((samples-noverlap) / (nfft-noverlap));%的窗户
%主循环
fft_spectrum = 0;
因为我= 1:spectnum
开始=(张)*抵消;
sw =信号((1 +开始):(+ nfft)开始)。*窗口;
fft_spectrum = fft_spectrum + (abs (fft (sw)) * 4 / nfft);% X = fft (X。*汉宁(N)) * 4 / N;%汉宁只
结束
fft_spectrum = fft_spectrum / spectnum;线性平均比例%
%一个sid fft频谱%选择上半年
如果快速眼动(nfft, 2) % nfft奇数
选择= (1:(nfft + 1) / 2) ';
其他的
选择= (1:nfft / 2 + 1) ';
结束
fft_spectrum = fft_spectrum(选择);
freq_vector =(选择- 1)* Fs / nfft;
结束

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!