Im trying to extract the frequency peaks of an FFT in order to synthesis the original using additive synthesis.
2 次查看(过去 30 天)
显示 更早的评论
Ive tried using the findpeaks function and using the location values however these do not seem to be in Hz how would i go about converting
Here is my code
p = 2^nextpow2(N);
x = fft(y,nfft)/p; % performs fft of clip
forx = fs/2*linspace(0,1,nfft/2+1);
X = 2*(abs(x(1:nfft/2+1)));
[peakval, locval] = findpeaks(X,fs,'minpeakheight',1.8*10^-5);
%% add synth
Freqs = locval;
Xs = zeros(length(Freqs),length(time));
for i=1:length(Freqs)
%Xs(i,:) = singen(Freqs(i),fs,time);
Xs(i,:) = sin(2*pi*Freqs(i)*time);
end
x = sum(Xs);
x = x./max(abs(x));
soundsc(x)
0 个评论
采纳的回答
Ridwan Alam
2019-12-3
编辑:Ridwan Alam
2019-12-3
findpeaks() returns the indices of the input signal where the peaks were found. you have to use the frequency range to convert those locations to Hz.
x = fft(y,nfft)/p; % performs fft of clip
freq_range = fs*(0:(nfft/2))/nfft;
X = abs(x(1:nfft/2+1));
X(2:end-1) = 2*X(2:end-1);
[peakval, locval] = findpeaks(X,'minpeakheight',1.8*10^-5);
Freqs = freq_range(locval);
...
Hope this helps.
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Fourier Analysis and Filtering 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!