主要内容

cconv

模n循环卷积

描述

例子

C=cconv(A.,B)卷积向量A.B.

例子

C=cconv(A.,B,N)循环卷积向量A.B.N是结果向量的长度。也可以使用cconv计算两个序列的循环互相关。

例子

全部崩溃

生成两个不同长度的信号。比较它们的循环卷积和线性卷积。使用N.

a=[12-11];b=[1121];c=cconv(a,b);%循环卷积cref=conv(a,b);%线性卷积dif=标准值(c-cref)
dif=9.7422e-16

得到的范数实际上为零,这表明两个卷积对机器精度产生相同的结果。

生成两个向量并计算它们的模4循环卷积。

a=[2 1 2 1];b=[1 2 3 4];c=cconv(a,b,4)
c=1×414 16 14 16

生成两个复杂序列。使用cconv计算它们的循环互相关。翻转并共轭第二个操作数以符合互相关的定义。指定输出向量长度为7。

a=[1 2 2 1]+1 i;b=[1 3 4 1]-2*1 i;c=cconv(a,conj(fliplr(b)),7);

将结果与使用互相关系数.

cref=xcorr(a,b);dif=norm(c-cref)
dif=3.3565e-15

生成两个信号:一个五采样三角形波形和一个带响应的一阶FIR滤波器 H ( Z ) = 1. - Z - 1. .

x1=conv([1],[1])
x1=1×51 2 3 2 1
x2=[-1]
x2=1×2-1 1

使用默认输出长度计算它们的循环卷积。结果相当于两个信号的线性卷积。

ccnv=cconv(x1,x2)
ccnv=1×6-1.0000 -1.0000 -1.0000 1.0000 1.0000 1.0000
lcnv=conv(x1,x2)
lcnv=1×6-1 -1 -1 1 1 1

模2循环卷积等价于将线性卷积分解为两个单元阵列并对阵列求和。

ccn2=cconv(x1,x2,2)
ccn2=1×2-1 1
nl=numel(lcnv);mod2=sum(重塑(lcnv,2,nl/2)’)
mod2=1×2-1 1

计算模-3循环卷积,并将其与混叠线性卷积进行比较。

ccn3=cconv(x1,x2,3)
ccn3=1×30 0 0
mod3=总和(重塑(lcnv,3,nl/3)’)
mod3=1×30 0 0

如果输出长度小于卷积长度,并且没有将其精确分割,则在相加之前用零填充卷积。

c=5;z=0(c*ceil(nl/c),1);z(1:nl)=lcnv;ccnc=CCNV(x1,x2,c)
ccnc=1×50.0000 -1.0000 -1.0000 1.0000 1.0000
modc=总和(重塑(z,c,numel(z)/c)’)
modc=1×50 -1 -1 1 1

如果输出长度等于或大于卷积长度,请填充卷积,不要添加。

d=13;z=0(d*ceil(nl/d),1);z(1:nl)=lcnv;ccnd=cconv(x1,x2,d)
ccnd=1×13-1.0000 -1.0000 -1.0000 1.0000 1.0000 1.0000 0.0000 -0.0000 0.0000 0.0000 0.0000 -0.0000 -0.0000
modd=z'
莫德=1×13-1 -1 -1 1 1 1 0 0 0 0 0 0 0

以下示例需要并行计算工具箱™ 软件。请参阅GPU版万博1manbetx本支持(并行计算工具箱)查看支持哪些GPU。万博1manbetx

在加性高斯白噪声中创建两个由1 kHz正弦波组成的信号。采样率为10 kHz

Fs=1e4;t=0:1/Fs:10-(1/Fs);x=cos(2*pi*1e3*t)+randn(大小(t));y=sin(2*pi*1e3*t)+randn(大小(t));

xY在GPU上使用gpuArray.使用GPU获得循环卷积。

x=gpuArray(x);y=gpuArray(y);cirC=cconv(x,y,长度(x)+长度(y)-1;

将结果与x和y的线性卷积进行比较。

linC=conv(x,y);norm(林肯保监会,2)
ans=1.4047e-08

返回循环卷积,保监会,使用聚集.

cirC=聚集(cirC);

输入参数

全部崩溃

输入数组,指定为向量或gpuArray对象。请参见在GPU上运行MATLAB函数(并行计算工具箱)有关gpuArray对象。使用cconv具有gpuArray对象需要并行计算工具箱™ 软件。请参阅GPU版万博1manbetx本支持(并行计算工具箱)查看支持哪些GPU。万博1manbetx

例子:sin(2*pi*(0:9)/10)+randn([110])/10将带噪正弦曲线指定为行向量。

例子:gpuArray(sin(2*pi*(0:9)/10)+randn([110])/10)将带噪正弦曲线指定为gpuArray对象

数据类型:单一的|双重的
复数支持:万博1manbetx

卷积长度,指定为正整数。如果未指定N,则卷积具有长度长度(a)+长度(b)-1.

输出参数

全部崩溃

输入向量的循环卷积,作为向量或gpuArray.

提示

对于长序列,循环卷积可以比线性卷积更快。

工具书类

[1] 奥法尼迪斯,索福克勒斯J。信号处理导论恩格尔伍德悬崖,新泽西州:普伦蒂斯大厅,1996年,第524-529页。

扩展能力

C/C++代码生成
使用Matlab®编码器生成C和C++代码™.

R2007a中引入