首先,我很抱歉,如果这似乎是一个非常基本的问题,但我刚刚开始学习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')发布于 2018-06-14 10:39:21
我相信你在找findpeaks()函数。它用于查找局部最大值,但您可以通过更改其参数来找到绝对最大值:
[peaks, locations] = findpeaks(Y,X,'NPeaks',1,'sortstr','descend');这里的Y,和X是你的FTsiga和Fv数组。‘NPeaks’显示了你想要的本地峰值的多少,而'sortstr‘显示了你想要对它们排序的方式。
https://stackoverflow.com/questions/50839151
复制相似问题