如何解决如何在MATLAB中绘制声信号的频谱
我正在尝试绘制信号的频谱,当我绘制频域中的功率超过 12e11 时,我意识到这是正确的吗?如果不是,在我的情况下,信号功率的正确间隔是多少?我正在研究在智能手机上实现的声音信号。我想确保我的代码是正确的。
%spectrum analysis of the signal
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fs = 48000;%sample rate
x = fopen('F:\fastICATest\1.pcm');%original sound signal
y = fread(x,inf,'int16');
figure
plot(y)
xlabel('sample number')
ylabel('amplitude')
figure
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
spe = spectrogram(y,512,fs,'yaxis');% read the spectrogram of the signal with peak
plot(abs(spe))
figure
spectrogram(y,'yaxis');%read the spectrogram of the signal
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
signal_short = y(14.48e5:15.2e5);
t = 1/fs:length(signal_short) - 1/fs;%time domain
figure
plot(t,signal_short)
xlabel('Time(s)')
ylabel('amplitude')
xlim([0 t(end)])
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
m = length(signal_short);
n = pow2(nextpow2(m));
z = fft(signal_short,n);% applying the fft to spectrum
zz = fftshift(z)% frequency shift of fft
figure
plot(abs(z))
xlabel('Frequency')
figure
plot(abs(zz))
xlabel('Frequency shift')
%%%%%%%%%%%%%%%
% f = (0:n-1)*(fs/n);
f = -fs/n:fs/n:fs/2-fs/n;%requency specification
power = abs(zz).^2/n; %power of the signal
figure
plot(f(1:floor(n/2)),power(1:floor(n/2)))
xlabel('Frequency')
ylabel('Power')
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。