首先,如果这看起来像是一个非常基本的问题,我很抱歉,但我刚刚开始学习Matlab,而且我遇到了一个我似乎找不到在线解决方案的问题。
我执行了信号的fft并绘制了幅度与频率的关系图。我还使用Savitsky Golay滤镜来平滑情节,这样会更容易。
我的问题是,我想找到最大峰值的X和Y坐标,并将数据存储在变量中。峰的位置显示在附图中。我试图用findpeaks()函数找到一种方法,但没有成功。我可能一直在使用它。
我还添加了迄今为止我能够做到的代码。
num = xlsread('C:\UTwente\Q4\Structural Health and Condition monitoring\Case Roadbridge (Zwartewaterbrug)\00001 Cars 03-23-17 09.29.07 AM.xlsx','Measurement data');
sig = num(:,16);
sig = sig - mean(sig); % Remove d-c Offset
L = length(sig);
Fs = 1000; % Sampling Frequency
Fn = Fs/2; % Nyquist Frequency
FTsig = fft(sig)/L;
Fv = linspace(0, 1, fix(length(FTsig)/2)+1)*Fn; % Frequency Vector
Iv = 1:length(Fv); % Index Vector
FTsiga = double(abs(FTsig(Iv))*2); % Truncate, Magnitude, Convert To Double
sgf_sm = sgolayfilt(FTsiga, 5, 501); % Create ‘sgolayfilt’ Filtered FFT
figure(1)
plot(Fv, FTsiga)
hold on
plot(Fv, sgf_sm, '-r', 'LineWidth',2)
hold off
grid
xlabel('Frequency')
ylabel('Amplitude')
legend('Original Spectrum', 'Smoothed & Filtered Spectrum')
答案 0 :(得分:1)
我相信你正在寻找findpeaks()
功能。它用于查找局部最大值,但您可以通过更改其参数来找到绝对最大值:
[peaks, locations] = findpeaks(Y,X,'NPeaks',1,'sortstr','descend');
此处是Y,X是您的FTsiga
和Fv
数组。“NPeaks”显示您想要多少个本地峰值,而'sortstr'显示您想要如何对它们进行排序。