主要内容

信号恢复可微的量图和谱图

这个例子展示了如何使用可微的量图和谱图恢复时域信号。使用可微的时频变换可以得到一个近似的原始信号不需要阶段信息或需要显式地转化时频变换。我们将演示这种技术在合成数据和语音信号。此外,基于梯度下降法的技术使用可微的谱图比较反对Griffin-Lim算法。

背景

在许多应用程序中,被丢弃时频表示的相位信息的大小。这有很多原因。原因很简单,当包含相位信息的时频表示很难情节和解释。这可能导致人们只保留大小。在其他应用程序中,所需的信号处理最优地实现通过修改时频表示的大小。这是最常在语音处理完成,底层通常是短时傅里叶变换的时频表示。在后一种情况下,最初的复数的时频表示不再对应修改后的大小表示。

在这些应用程序中,它仍然可能是有用的,甚至需要恢复原始信号的一个近似。这样的技术被称为相位检索。检索阶段,一般来说,合适的和之前的迭代方法受到的non-convexity配方,因此收敛到一个最优解是不可能保证。

通过引入自动分化和可微的信号处理,我们现在可以使用梯度下降法与通常的凸损失函数执行阶段检索。

合成信号——指数唧唧声

在第一个示例中,我们创建一个线性调频信号成倍增加的载波频率。helper函数创建的唧唧声helperEchirp。源代码是上市的例子。这对一个信号恢复合成信号是具有挑战性的,或相位检索算法由于速度瞬时频率随时间增加。创建指数唧唧喳喳的代码将[1]。

[团体t] = helperEchirp (2048);情节(t, sig)网格标题(指数唧唧喳喳的)包含(“秒”)ylabel (“振幅”)

获得的量图唧唧,情节的量图以及瞬时频率啁啾。量图是绘制使用线性扩展频率(规模)轴上清楚地显示指数性质的唧唧喳喳。

[fmin, fmax] = cwtfreqbounds(截止2048年= 100,小波=“爱”);[cfs, f, ~, ~, scalcfs] = cwt (sig FrequencyLimits = [fmin fmax],扩展= false);图t = linspace(0, 1,长度(sig));冲浪(t、f、abs (cfs)) ylabel (“赫兹”)阴影插值函数yyaxis视图(0,90)正确的情节(t, 1024。^ t . / 2048“k——”)轴标题(“指数啁啾量图”)ylabel (“赫兹”)包含(“秒”)

现在,使用一个可微的检索量图执行阶段。在这个例子中,辅助对象,helperPhaseRetrieval是用来执行阶段检索量图和谱图。默认情况下,helperPhaseRetrieval垫信号对称和10个样本在开始和最后10个样本来弥补边缘效应。

首先,创建一个对象的配置量图和线性调频信号的获取量图。表明,该量图只包含实值数据。

公关= = helperPhaseRetrieval(方法量图的小波=“莫尔斯”,IncludeLowpass = true);sc = obtainTFR(公关、团体);伊斯雷尔(sc)
ans =逻辑1

量图也是一个dlarray,它允许我们为自动记录操作进行分化。

信号恢复使用梯度下降法

这里我们使用级恢复原始信号的近似量图和梯度下降法。辅助函数retrievePhase通过以下程序:

  1. 初始化随机噪声相同的长度作为输入信号。

  2. 获得量图的噪声。测量均方误差(MSE)量图之间的目标信号和噪声的量图。

  3. 使用梯度下降法与亚当优化器基于MSE更新噪声信号损失之间的目标量图和量图然后噪音。

上述过程在[1]中有详细描述。的梯度下降过程,确定噪声已经聚合的重建原始信号。

里面的retrievePhase初始化,噪声信号作为起点。这里我们比较代表噪音就像一个用于启动梯度下降过程。比较初始噪声与原来的线性调频信号。

rng默认的x = dlarray (randn(大小(sig)),“认知行为治疗”);x = x / max (abs (x) [], 3);图绘制(t,挤压(extractdata (x)),“线宽”,0.5)情节(t,团体,“k”线宽= 2)传说(“随机”,线性调频信号的)标题(随机噪声的初始化和指数唧唧喳喳的)轴持有ylim([-1.5 - 1.5])包含(“秒”)

使用梯度下降法和可微的量图恢复原始信号的近似。

xrec = retrievePhase(公关,sc);

经过300次迭代的梯度下降,噪声信号修改密切近似线性调频信号。策划阶段检索的结果。注意,为实值信号相位检索只是定义了一个变化迹象。因此,结果比例1或1可以提供一个更好的结果。

图绘制(t) [xrec团体])网格包含(“秒”)ylabel (“振幅”)传说(“重建阶段”,原始信号的)标题(“检索阶段——使用量图”)

获得量图的重构信号并比较其阶段选择的中心频率与原有的阶段(CF)。相比较通过绘制的实部和虚部分别连续小波变换(CWT)系数。

cfsR = cwt (xrec FrequencyLimits = [fmin fmax]);图tiledlayout (3,2);nexttile(1)情节(t)[真实(cfs(30日:))的实际(cfsR(30日:))'])网格fstr = sprintf (' % 2.2 f 'f (30));标题({量图,实部的;(CF的,fstr“周期/样本”]})xlim ([0.63 - 0.79]) nexttile(2)情节(t(图像放大(cfs(30日:))的图像放大(cfsR(30日:))的])网格标题({量图——虚部的;(CF的,fstr“周期/样本”]})xlim ([0.63 - 0.79]) nexttile(3)情节(t)[真实(cfs(40岁:))的实际(cfsR(40岁:))的])网格fstr = sprintf (' % 2.2 f 'f (40));标题({量图,实部的;(CF的,fstr“周期/样本”]})xlim ([0.48 - 0.76]) nexttile(4)情节(t(图像放大(cfs(40岁:))的图像放大(cfsR(40岁:))的])网格标题({量图——虚部的;(CF的,fstr“周期/样本”]})xlim ([0.48 - 0.76]) nexttile(5)情节(t)[真实(cfs(50,:))的实际(cfsR(50,:)) '))网格fstr = sprintf (' % 2.2 f 'f (50));标题({量图,实部的;(CF的,fstr“周期/样本”]})xlim ([0.4 - 0.62]) nexttile(6)情节(t(图像放大(cfs(50,:))的图像放大(cfsR(50,:))的])网格标题({量图——虚部的;(CF的,fstr“周期/样本”]})xlim ([0.4 - 0.62])

阶段协议为选定的中心频率相当好。事实上,如果我们看一下小波相干原始信号及其重构版本之间使用检索基于梯度下降的阶段,整个协议是相当强劲。

图wcoherence(团体、xrec FrequencyLimits = 1/2 [0], PhaseDisplayThreshold = 0.7) titlestr =得到(gca,“标题”);titlestr。字符串={“小波相干——指数啁啾与重建”;“可微与梯度下降量图”};

注意箭头代表原始信号重建之间的相位相干性是面向在0度,或 2 π 协议,弧度完美的阶段。低阶段协议的附近地区附近的开始高频率的信号进行解释时应特别谨慎。线性调频信号的瞬时频率最初相对较低,因此没有能源原始信号在高频率。

重复相同的过程使用光谱图作为时频表示而不是量图。这里的汉明窗256个样本的重叠使用254个样本。谱图的填充增加到30个样品,15 pre-padded 15后置。

公关= = helperPhaseRetrieval(方法的谱图窗口=损害(256年,“周期”),OverlapLength = 254,填充= 30);sp = obtainTFR(公关、团体);xrec = retrievePhase(公关、sp);图绘制(t) [-xrec团体])网格传奇(“重建阶段”,原始信号的)标题(“阶段——使用谱图检索”)

谱图的复苏在这种情况下也不错。再次使用小波相干的时变和原始信号之间的相位相干性的输出相位检索方法使用梯度下降法和可微的光谱图。

图wcoherence(团体、-xrec FrequencyLimits = 1/2 [0], PhaseDisplayThreshold = 0.7) titlestr =得到(gca,“标题”);titlestr。字符串={“小波相干——指数啁啾与重建”;“可微的谱图与梯度下降法”};

类似于量图,两个信号之间的相位相干性非常强。

与Griffin-Lim

让我们尝试相同的相位检索的方法不依赖于可微的信号处理和反向传播。在这里我们使用Griffin-Lim算法是一种常用的迭代阶段检索技术。然而,不同方法使用梯度下降法和反向传播,Griffin-Lim要求逆短时傅里叶变换在每个迭代。像许多相位复原技术,Griffin-Lim可以表现出边缘效应。试图减轻这些影响,获得Griffin-Lim结果都没有,没有信号扩展。

S = stft(团体、窗口=汉明(256),OverlapLength = 254, FrequencyRange =“单向的”);xrecGLNoPad = stftmag2sig (abs (S), 256年,窗口=汉明(256),OverlapLength = 254, FrequencyRange =“单向的”);图绘制(t) [-xrecGLNoPad团体])网格传奇(“重建阶段”,原始信号的)标题(“检索阶段——使用Griffin-Lim”)

注意Griffin-Lim方法展示一些重要构件初的信号再一次约0.86秒。扩展原始信号对称末端,试图减轻这些影响。这是相同的填充完成helperPhaseRetrieval对象。

xpad = padsequences({团体}1“方向”,“两个”,“长度”2048 + 30,“paddingvalue”,“对称”);S = stft (xpad =汉明窗(256),OverlapLength = 254, FrequencyRange =“单向的”);xrecGLpad = stftmag2sig (abs (S), 256年,窗口=汉明(256),OverlapLength = 254,FrequencyRange =“单向的”);xrecGLpad = xrecGLpad(16:长达15);图绘制(t) [-xrecGLpad团体])网格传奇(“重建阶段”,原始信号的)标题(“检索阶段——使用Griffin-Lim”)

对称扩展信号不减轻工件和事实会加剧他们的信号。出于完整性的考虑,你可以尝试更紧密地初始化Griffin-Lim算法梯度下降法技术通过使用可选的InitializePhaseMethod输入和设置它的值“随机”

S = stft(团体、窗口=汉明(256),OverlapLength = 254, FrequencyRange =“单向的”);xrecGLNoPadRandom = stftmag2sig (abs (S), 256年,窗口=汉明(256),OverlapLength = 254, FrequencyRange =“单向的”InitializePhaseMethod =“随机”);图绘制(t) [-xrecGLNoPadRandom团体])网格传奇(“重建阶段”,原始信号的)标题({“检索阶段——使用Griffin-Lim”;随机噪声的初始化的})

这似乎导致更糟糕的原始信号的近似。因此,使用原始的重建的STFT大小使用Griffin-Lim算法并检查原始信号小波之间的连贯性和重建。

图wcoherence(团体、-xrecGLNoPad FrequencyLimits = 1/2 [0], PhaseDisplayThreshold = 0.7) titlstr =得到(gca,“标题”);titlstr。字符串={“小波相干——指数啁啾与重建”;“Griffin-Lim Agorithm使用谱图的};

在这种情况下,可微的相位复原技术更好的工作比Griffin-Lim算法在重建原始的阶段。您可以验证这个数值通过检查原始信号之间的相对L2-norm误差近似。

RelativeL2DiffGD =规范(sig - (-xrec), 2) /规范(团体,2)
RelativeL2DiffGD = 0.6392
(RelativeL2DiffGL =规范(sig) - -xrecGLNoPad) /规范(团体,2)
RelativeL2DiffGL = 1.2106

语音信号

在介绍中提到的,一个常见的应用程序从信号中恢复原信号的时频变换级演讲。这里我们应用可微的信号处理和梯度下降来演讲。

负载和扮演一个语音样本的发言人说“我看见羊”。原始数据采样在22050赫兹,重新取样速度半原始的数据。

负载wavsheep.mat羊=重新取样(羊,1、2);fs = f / 2;soundsc(羊、fs)

像往常一样,一个随机噪声的输入作为起点阶段检索算法。这里情节代表噪声样本来展示不同的特点,最初的语音信号的噪声。

x = randn(大小(羊));x = x / max (abs (x) [], 3);t = linspace(0,长度(羊)* 1 / fs-1 / fs,长度(羊));图绘制(t,羊[x])传说(“随机”,“我看到羊”)ylim ([-1.5, 1.5]) xlim([0长度(羊)* 1 / fs-1 / fs])包含(“秒”)ylabel (“振幅”)标题(随机噪声的输入和目标语音信号的)

近似恢复语音信号的幅度谱图使用梯度下降法。用汉明窗256样品和重叠的windows窗口长度的75%,或192个样本。使用200次迭代的梯度下降法。

赢得=汉明(256);重叠= 0.75 * 256;公关= = helperPhaseRetrieval(方法的谱图窗口=赢,OverlapLength =重叠);sc = obtainTFR(公关、羊);[xrec, x_recon] = retrievePhase(公关、sc、NumIterations = 200);

策划的结果。请注意,开始只是随机噪声所聚合到一个好的近似的语音信号。之间总是存在相位模糊值,V,及其负- V。所以你也可以尝试策划的负面。

图绘制(t)[羊-xrec])标题({“重建从STFT和噪声级输入”;“使用随机梯度下降法”})(传说“原始”,“Phaseless重建”)轴网格

原始波形和重建。回馈之间停顿3秒。

soundsc(羊、fs)暂停(3)soundsc (xrec fs)

重建的感知质量相当好。在保留所有变量的梯度下降算法的迭代,x_recon,您可以验证已经50-th迭代的算法,人类语言开始分化的噪音。由第125迭代,重建的感知质量几乎是原始的语音样本。

:soundsc (x_recon (50), fs)暂停(3)soundsc (x_recon(125年:),fs)

重复相同的过程使用类作为输入级。因为CWT比STFT,计算昂贵的时间完成200次迭代的梯度下降算法大大延长。然而,使用建立在可微的信号处理工具的另一个优点dlarray是,你还可以利用GPU加速如果你有合适的GPU。在这种情况下,使用一个NVIDIA泰坦V 7.0加速信号恢复过程的计算能力的3倍。你可以切换之间没有一个GPU确定你的GPU结果在减少计算时间。

accel =“没有”;公关= = helperPhaseRetrieval(方法量图的);sc = obtainTFR(公关、羊);[xrec, x_recon] = retrievePhase(公关、sc、加速度= accel NumIterations = 200);

策划的结果。相似的大小STFT,始于随机噪声所聚合到一个好的近似的语音信号。总有一个阶段模棱两可之间的一个值,V和其负面- V。所以你也可以尝试策划的负面。

图绘制(t)[羊xrec])标题({“重建从量图和噪声输入”;“使用随机梯度下降法”})(传说“原始”,“Phaseless重建”)轴网格

原始波形和重建。回馈之间停顿3秒。量图技术也会产生一个近似感知相当于原来的。

soundsc(羊、fs)暂停(3)soundsc (-xrec fs)

类似于完成了STFT级,所有迭代的梯度下降算法保留变量,x_recon。您可以验证已经的50-th迭代算法,人类语言开始分化的噪音。由第125迭代,重建的感知质量几乎是原始的语音样本。

:soundsc (x_recon (50), fs)暂停(3)soundsc (x_recon(125年:),fs)

结论

在这个例子中,我们显示如何使用可微的信号处理算法和梯度下降法来恢复信号近似级的时频表示。可微的光谱图或量图方法的一个优点说明是不需要逆变换。有很多改进,可以显示的算法来提高其鲁棒性。包括使用不同的优化,实现分段学习速率的变化,甚至是切换到L1损失时整体损失就变小了。后者技术是在[1]。另一个选择是初始化算法,一个输入信号是接近目标比这个例子中使用的白噪声信号。

引用

[1]Muradeli,约翰。“栈交流答案。“反相量图,3 2021年10月,https://dsp.stackexchange.com/questions/78530/inverting-a-scalogram

附录——辅助函数

辅助函数来创建和成倍增加的中心频率啁啾。

函数[团体t] = helperEchirp (N) fmax = N / 2;t = linspace (0, 1, N);= 1;b = fmax;sig = cos(2 *π* /日志(b) * b。^ t);团体=团体(:);结束

另请参阅

功能

对象