我有一个音频文件,它表示电动机以2500rpm运行的声音,我的目的是获取该信号的周期,因此我可以自动判断电动机的速度是多少。为此,我吸收了一部分信号,然后运行使其自相关,希望这将告诉信号的周期!但是我不明白:
这是我的代码的一部分:
clear;
clc;
[x0,Fs] = audioread('_2500.wav');
x= x0(1:2000,1);
xc = xcorr(x);
clf;
subplot(3,1,1);
plot(x);
subplot(3,1,2);
plot(xc);
[peaks,locs] = findpeaks(xc);
hold on
subplot(3,1,3)
plot(xc(locs),'ro');
这是情节:
我应该如何考虑采样频率:44100?
最佳答案
您可以使用信号的自相关或FFT找出最大的位置:
% Parameters
Fc = 1e1;
Fs = 1e3;
% Signal
t = 0:1/Fs:1;
x = sin(2*pi*Fc*t);
% FFT
Y = abs(fft(x));
[~,I] = max(Y(1:floor(end/2)));
% Frequency and period
F = I-1;
T = 1/F;
% Plot
figure;
subplot(2,1,1); plot(t,x);
subplot(2,1,2); plot(Y);
disp(['The frequency is ',mat2str(F),'Hz, and the period is ',mat2str(T),'sec.']);
This和this帖子相关。
关于matlab - 在音频文件中获取期间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22531594/