我有一个音频文件,它表示电动机以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.']);

Thisthis帖子相关。

关于matlab - 在音频文件中获取期间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22531594/

10-13 07:40