matlab复数信号_信号之间的时延估计(续)

98b114cca84a72ccadf40e72a5e9ad23.png

说明

这篇文章是之前《信号之间的时延估计》的续篇,中间隔了很长时间才写这一篇,是因为期间一直有其它事情要做,而且感觉对GCC的一些关键点还没有考虑清楚。后来评论区一位朋友在关心续篇的进度,我就不得不抓紧时间好好思考一下了哈哈。因此最终写了这一篇作为上一篇的修正以及补充。
PS:这篇文章内容较多,能把这么枯燥的内容看完也不容易。
xiaoli1368:信号之间的时延估计​zhuanlan.zhihu.com
26a3284cd4050a8e4161696ec385432d.png

1. 上一篇的错误

经过更加深入的思考后,这里首先指出,以前的一些“想当然”的看法明显是错误的。我在上一篇文档中关于GCC的理解部分写到:

其实, 信号进行了PHAT加权后,实质上相当于进行了白化滤波,倘若信号转换为了理想的白噪声形式,则时域中必然会在零延时处出现冲激,这是由傅里叶变换决定的。然而仅进行了幅度上的归一化尚且不能认为是理想的白化,被保留的相位信息仍占据主导因素,因此会在准确的时延处产生更大的冲激。 因此两路具有确定延时关系的信号在进行GCC-PHAT后会获得两个冲激峰值。如果两路信号不具备延时关系,则它们的相关性很小,因此进行PHAT加权而产生的频谱更加趋向于理想白噪声,因此它们的时域结果也趋向于在零时延处产生较大峰值。

这种说法是错误的,即便在频域进行了白化滤波,事实上也不会在0时延处产生同样的冲激。错误的原因在于,我将功率谱和自相关,以及频谱与时延这两对关系弄混了

对一个信号进行分析时,首先应该明确该信号属于确定信号还是不确定信号(随机信号)。而噪声则比较特殊,一般将其作为随机信号并使用统计的规律来进行分析,此时噪声的功率谱和自相关是互为傅里叶变换的,并且对于白噪声而言,其功率谱是常数,此时的自相关函数会在0时延处产生一个冲激。而将其作为确定信号进行分析的时候,可以发现白噪声的频谱的成分十分混杂,反变换到时域也是十分混杂的噪声形式

事实上,对于一个确定的信号的频谱,对幅度进行归一化确实是白化的一个步骤,但是不能等价于“白化”。此时该信号在时域能否产生冲激,是由信号相位谱之间的关系决定的。事实上,只有确定的线性相位才会在时域产生对应的冲激,这一点是由傅里叶变换决定的。即

变换为
,当时延
为常数的时候,频域上的复指数信号
是典型的
“幅度归一化+线性相位”的形式。

而对于几乎没有确定的线性相位的频谱形式,可以认为由很多个线性相位叠加而成,因此时域上也就会出现十分混杂的冲激,具体的理论推导见第二部分。

以下是直接从频域生成白噪声并观察其时域波形:

testSignal 

ca5543b8fc7bb8155550a41440747503.png
Fig 1. 白噪声频谱的时域波形

2. GCC-PHAT的理论推导

首先,应当明确“使用GCC-PHAT来计算时延”的出发点如下:

  1. 传统的时域互相关法,计算量较大且运算时间慢。
  2. 使用频域法来计算互相关(CC)十分经典,但是不能满足更高的要求。
  3. 在频域法CC的基础上,对互功率进行“系数加权”,由此产生了一系列的广义互相关法(GCC)
  4. 在GCC中,控制加权函数以进行相位加权可以对输出结果进行锐化,这便是GCC-PHAT
  5. GCC-PHAT常与SRP-PHAT结合并应用到目标定位中去。

2.1 频域法CC

先分析经典的频域法求解CC,首先对信号进行建模,这里直接考虑的是含噪模型,目标发射信号

,两路接收信号分别为:

为了表达方便,其实可以将第一路信号

作为参考信号,直接将第二路信号表示为:

  • 1
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 四阶累积量时延估计(Fourier Series)是一种用于信号处理和频谱分析的方法,也可以用MATLAB进行实现。下面将用300字中文回答在MATLAB中进行四阶累积量时延估计的步骤。 1. 首先,我们需要在MATLAB中导入信号数据。可以使用`load`函数加载信号文件,或者使用`audioread`函数直接读取音频文件。假设我们的信号数据保存在变量`signal`中。 2. 接下来,我们需要计算信号的幅度谱。使用`fft`函数对信号进行傅里叶变换,并使用`abs`函数计算傅里叶变换结果的幅度谱。假设幅度谱保存在变量`amplitude_spectrum`中。 3. 然后,我们可以通过累积量时延估计方法计算信号时延。首先,使用`unwrap`函数对信号的相位谱进行去除2π的不连性处理。然后,利用`gradient`函数计算相位谱的梯度。假设处理后的相位谱保存在变量`phase_spectrum`中。 4. 将计算得到的幅度谱和相位谱恢复到复数形式。可以使用`polar`函数将相位谱的极坐标形式转换为复数形式,即`complex(cos(phase_spectrum), sin(phase_spectrum))`。 5. 利用四阶累积量时延估计公式,在复数形式的幅度谱和相位谱上进行运算,得到累积量时延估计的结果。具体公式为:`time_delay = -imag(sum(conj(amplitude_spectrum(2:end)).*diff(phase_spectrum)))./sum(abs(amplitude_spectrum(2:end)).^2)`。 6. 最后,我们得到了信号的累积量时延估计结果。可以通过打印`time_delay`变量来输出结果,即信号在时间上的滞后量。 以上就是用MATLAB进行四阶累积量时延估计的步骤。通过这种方法,我们可以对信号时延进行准确的估计,并得到时间上的滞后量。 ### 回答2: 四阶累积量时延估计是一种在信号处理中常用的方法,可以用来估计信号时延MATLAB提供了一些函数和工具,可以方便地进行四阶累积量时延估计。 首先,要进行四阶累积量时延估计,我们需要有一个参考信号和一个待估计信号。在MATLAB中,我们可以将这两个信号表示为数组,假设参考信号为ref,待估计信号为est。 然后,我们可以使用xcorr函数进行信号的互相关运算。互相关运算可以得到参考信号和待估计信号的互相关函数。语法如下: correlation = xcorr(ref, est); 接下来,我们可以使用cumsum函数进行累积和的计算,得到累积和的序列。累积和序列将包含所有时延估计值。语法如下: cumulative_sum = cumsum(correlation); 最后,我们可以找到累积和序列的峰值,即最大值所在的索引。该索引对应的位置就是信号时延估计值。语法如下: [~, delay] = max(cumulative_sum); 得到时延估计值后,我们可以将其用于后信号处理和分析。 需要注意的是,进行四阶累积量时延估计时,参考信号和待估计信号应该具有相同的采样率和长度,且信号中不应包含噪声或其他干扰。 以上是关于使用MATLAB进行四阶累积量时延估计的简要介绍。希望对您有所帮助。 ### 回答3: 在MATLAB中进行四阶累积量时延估计的方法如下: 首先,导入需要处理的数据。可以使用MATLAB自带的load函数将数据从文件中加载到MATLAB的工作空间中,也可以使用其他相应的函数或方法导入数据。 接下来,通过将已加载的数据传递给MATLAB的cumsum()函数进行累积求和,得到累积量的数组。例如,如果已加载的数据保存在名为data的变量中,则可以使用cumsum(data)来计算累积量。 然后,分别计算累积量的第一阶差分、第二阶差分和第三阶差分。分别使用MATLAB的diff()函数计算累积量数组的差分。例如,可以使用diff(cumsum(data))计算累积量的第一阶差分。 接下来,分别计算累积量的第一阶差分、第二阶差分和第三阶差分的均值。使用MATLAB的mean()函数计算每个差分数组的均值。例如,可以使用mean(diff(cumsum(data)))计算累积量的第一阶差分的均值。 最后,通过计算均值的倒数,并将其乘以时间间隔,求得四阶累积量时延估计。例如,如果时间间隔为deltaT,则四阶累积量时延估计可以使用deltaT./mean(diff(cumsum(data)))计算得出。 以上是在MATLAB中进行四阶累积量时延估计的大致步骤。根据具体的数据和需求,可能需要根据实际情况进行适当的调整和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值