【问题标题】:how to compare two audio signals with Matlab如何用matlab比较两个音频信号
【发布时间】:2014-03-10 21:56:46
【问题描述】:

我有两个音频信号要使用 Matlab 进行比较,我的问题是我可以清晰地听到它们之间的区别,但是当使用函数 pwelch 比较它们的 PSD 时,我看不到太多它们之间的区别,知道如何将它们与不同的方法进行比较!提前致谢 ! PS:1.我已经在DSP.stackexchange中问过问题,但没有答案! 2.我不是要代码,这就是为什么我没有放我的!

更新

在@Bas Swinckels 的回答之后,我正在使用结果的代码标准,但我仍然看不到描述这个的方式?

  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)

结果如下:

谁能告诉我我添加到源中的噪声或效果如何影响我的频谱?

【问题讨论】:

  • 信号的时间参考和持续时间是否完全相同?你不能把它们减去吗?
  • 我剪掉它们以获得相同的持续时间,减法有什么意义?
  • 好吧,看看你减去的差异。但是,这只有在信号完全对齐(同一时间原点)时才有效
  • 我不能确定,永远都是这样!
  • SNR 是否可以作为比较它们的一种方式,因为声音具有相同的来源但场会发生变化?

标签: matlab signal-processing


【解决方案1】:

您可以尝试绘制两个信号的spectrogram,如下所示:

spectrogram(x, hann(nfft), nfft/2, nfft, fsample)

当您使用pwelch 计算 PSD 时,您只会获得平均频谱,并且会丢失所有时间信息:它不会显示信号在开始时或结束时是否较大。计算频谱图也与您的耳朵所感知的非常相似,它们测量一种频谱作为时间的函数。因此,如果您能听到差异,它应该在具有足够 SNR 的频谱图中显示为差异。

当您制作频谱图时,您应该尝试使用频率和时间分辨率,因为它们遵循某种海森堡定律。缩短 FFT 窗口(通过选择较小的 nfft)会给您提供良好的时间分辨率,但会降低频率分辨率,反之亦然。

【讨论】:

  • 抱歉,我在处理随机信号时不应该计算 PSD 吗?并且通过频谱图几乎与 pwelch 相同!至少当我看到它的 3d 结果还不错,但在我看来是一样的!
  • 要获得统计上正确的频谱估计,您确实应该使用pwelch 类型的周期图。但是这样一来,你就会丢失所有的时间信息。没有什么可以阻止您制作光谱图,这基本上是 pwelch 取平均值的各个光谱。通过使用频谱图的频率和时间分辨率,您甚至可以对每个时间段进行有限数量的平均。但这取决于您拥有多少数据,通常您必须在频率和时间分辨率之间进行权衡。试试看,最坏的情况就是太吵了……
  • 好吧,我又做了一次,但我还是看不出有什么不同!
  • 您尝试过nfft 的各种值吗?我通常会尝试使用 2 的许多不同的幂。
猜你喜欢
  • 2012-06-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-03
  • 2015-07-16
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多