实时测量待测频率频谱幅值

针对声学测量关于声干涉现象的测量实验 为方便同学们测量实验

利于matlab dsp工具箱 实现了一个实时测量待测频率频谱幅值的功能

都是默认设备 一般是接上麦克风直接用

clc;
clear all;
%% 设置
mic=dsp.AudioRecorder;
% Mic=audioDeviceReader;
Spectrum=dsp.SpectrumAnalyzer;
mic.SamplesPerFrame=44100;
mic.BufferSizeSource='Property';
mic.BufferSize=44100;
mic.SampleRate=44100;
mic.QueueDuration=0;
% mic.DeviceName=;
mic.NumChannels=2;
Speaker=dsp.AudioPlayer;
% Speaker=audioDeviceWriter;
%latency=(QueueDuration×SampleRate+2×BufferSize)/SampleRateX

f0=1000;%待测频率

%% 循环

while(1)  

audio=step(mic);
x=audio(:,1);%取左声道

m=fft(x);
P2 = abs(m/mic.SamplesPerFrame);
P1 = P2(1:mic.SamplesPerFrame/2+1);
% P1(2:end-1) = 2*P1(2:end-1);
f = mic.SampleRate*(0:(mic.SamplesPerFrame/2))/mic.SamplesPerFrame;
figure(1)

stem(f,P1);
title('原始信号')
xlabel('f (Hz)')
ylabel('|P1(f)|')

P=P2(f0+1)*1000 %(mic.SampleRate*(1001)/mic.SamplesPerFrame);
%因为一秒 采样点数与采样率相同所以 频谱间隔是1 就不计算了 要是需要修改用后面公式
%*1000 为了好看 最后取dB无影响
%fprintf('频谱密度:%f',P);
%fprintf('功率谱密度:%f',P^2);
end

 

你可能感兴趣的:(实时测量待测频率频谱幅值)