如何用Matlab比较两种音频信号
我有两个音频信号,我想用Matlab进行比较,我的问题是我可以清楚地听到它们之间的差异,但是当使用函数如何用Matlab比较两种音频信号,matlab,signal-processing,Matlab,Signal Processing,我有两个音频信号,我想用Matlab进行比较,我的问题是我可以清楚地听到它们之间的差异,但是当使用函数pwelch比较它们的PSD时,我看不到它们之间有多大的差异,我知道如何用不同的方法来比较它们!提前谢谢! 附言:1。我已经在DSP.stackexchange中问了这个问题,但没有回答! 2.我不是要密码,所以我才没有把我的密码放进去 更新 后,这里的BASS SWECKELS的答案是我用的结果,我还是看不出描述这个的方式? clear; clc; [x0,Fs] = audioread(
pwelch
比较它们的PSD时,我看不到它们之间有多大的差异,我知道如何用不同的方法来比较它们!提前谢谢!
附言:1。我已经在DSP.stackexchange中问了这个问题,但没有回答!
2.我不是要密码,所以我才没有把我的密码放进去
更新
后,这里的BASS SWECKELS的答案是我用的结果,我还是看不出描述这个的方式?
clear;
clc;
[x0,Fs] = audioread('Nonoise.wav');
x0 = x0(:,1);
[Y0,G] = pwelch(x0,hamming(512));
plot(G,10*log10(Y0));
grid on
[x50,Fs] = audioread('50% noise.wav');
x50 = x50(:,1);
[Y50,G] = pwelch(x50,hamming(512));
hold on ;
plot(G,10*log10(Y50),'r');
[x100,Fs] = audioread('100% noisy.wav');
x100 = x100(:,1);
[Y100,G] = pwelch(x100,hamming(512));
hold on ;
plot(G,10*log10(Y100),'g');
%% spectrogram
spectrogram(x0,hann(64),32,64,Fs)
figure();
spectrogram(x50,hann(64),32,64,Fs)
figure();
spectrogram(x100,hann(64),32,64,Fs)
结果如下:
有谁能告诉我,我添加到源中的噪声或效果是如何影响我的频谱的 您可以尝试绘制两个信号的曲线,如下所示:
spectrogram(x, hann(nfft), nfft/2, nfft, fsample)
当您使用pHelp
计算PSD时,您只会得到平均频谱,并且会丢失所有时间信息:它不会显示信号在开始或结束时是否更响亮。计算频谱图也与你的耳朵感知的非常相似,它们测量一种频谱作为时间的函数。因此,如果你能听到差异,它应该在具有足够信噪比的频谱图中显示为差异
当你制作一个光谱图时,你应该尝试使用频率和时间分辨率,因为它们遵循某种海森堡定律。缩短FFT窗口(通过选择一个小的
nfft
)将使您获得良好的时间分辨率,但频率分辨率更差,反之亦然。信号是否具有完全相同的时间参考和持续时间?你就不能把它们减去吗?我把它们减去是为了得到相同的持续时间,减法有什么意义呢?好吧,看看减法有什么不同。然而,只有当信号完全对齐(同一时间原点)时,这才有效。我不能确定,情况总是这样!信噪比可以作为比较它们的一种方法吗,因为声音有相同的源,但场会发生变化?对不起,当我处理随机信号时,我不应该计算PSD吗?从光谱图上看,几乎和普韦尔奇一样!至少当我看到结果ok的时候是3d的,但在我看来是一样的!要获得光谱的统计正确估计值,您确实应该使用pwelch
type周期图。但是这样,你就失去了所有的时间信息。没有什么是禁止你制作光谱图的,它基本上是单个光谱,pwelch
取平均值。通过使用频谱图的频率和时间分辨率,您甚至可以对每个时间段进行有限数量的平均。但这取决于你有多少数据,通常你必须在频率和时间分辨率之间进行权衡。试试看,最坏的情况是太吵了……我又试了一次,但还是看不出有什么不同!您是否尝试了nfft的各种值?我通常会尝试使用许多不同的2次幂。