Im trying to extract the frequency peaks of an FFT in order to synthesis the original using additive synthesis.
1 vue (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Ben Hurge-Mogg
le 3 Déc 2019
Modifié(e) : Ridwan Alam
le 3 Déc 2019
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 commentaires
Réponse acceptée
Ridwan Alam
le 3 Déc 2019
Modifié(e) : Ridwan Alam
le 3 Déc 2019
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 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Fourier Analysis and Filtering dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!