cconv
模 n 循环卷积
说明
示例
生成两个不同长度的信号。比较其循环卷积和线性卷积。对 n 使用默认值。
a = [1 2 -1 1]; b = [1 1 2 1 2 2 1 1]; c = cconv(a,b); % Circular convolution cref = conv(a,b); % Linear convolution dif = norm(c-cref)
dif = 9.7422e-16
得到的范数几乎为零,这表明两种卷积在计算机精度范围内产生相同的结果。
生成两个复数序列。使用 cconv 计算其循环互相关性。翻转并共轭第二个操作数以符合互相关性的定义。指定一个长度为 7 的输出向量。
a = [1 2 2 1]+1i; b = [1 3 4 1]-2*1i; c = cconv(a,conj(fliplr(b)),7);
将结果与使用 xcorr 计算的互相关性进行比较。
cref = xcorr(a,b); dif = norm(c-cref)
dif = 3.3565e-15
生成两个信号:一个包含五个采样的三角波形和一个响应为 的一阶 FIR 滤波器。
x1 = conv([1 1 1],[1 1 1])
x1 = 1×5
1 2 3 2 1
x2 = [-1 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(reshape(lcnv,2,nl/2)')
mod2 = 1×2
-1 1
计算模 3 循环卷积并将其与混叠的线性卷积进行比较。
ccn3 = cconv(x1,x2,3)
ccn3 = 1×3
0 0 0
mod3 = sum(reshape(lcnv,3,nl/3)')
mod3 = 1×3
0 0 0
如果输出长度小于卷积长度并且无法整除它,则在相加前用零填充卷积。
c = 5; z = zeros(c*ceil(nl/c),1); z(1:nl) = lcnv; ccnc = cconv(x1,x2,c)
ccnc = 1×5
0.0000 -1.0000 -1.0000 1.0000 1.0000
modc = sum(reshape(z,c,numel(z)/c)')
modc = 1×5
0 -1 -1 1 1
如果输出长度等于或大于卷积长度,则填充卷积,但不进行相加。
d = 13; z = zeros(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'
modd = 1×13
-1 -1 -1 1 1 1 0 0 0 0 0 0 0
以下示例需要 Parallel Computing Toolbox™ 软件。请参阅 GPU 计算要求 (Parallel Computing Toolbox)以了解支持哪些 GPU。
创建两个信号,它们由加性高斯白噪声中的 1 kHz 正弦波组成。采样率为 10 kHz。
Fs = 1e4; t = 0:1/Fs:10-(1/Fs); x = cos(2*pi*1e3*t)+randn(size(t)); y = sin(2*pi*1e3*t)+randn(size(t));
使用 gpuArray 将 x 和 y 放到 GPU 上。使用 GPU 获取循环卷积。
x = gpuArray(x); y = gpuArray(y); cirC = cconv(x,y,length(x)+length(y)-1);
将结果与 x 和 y 的线性卷积进行比较。
linC = conv(x,y); norm(linC-cirC,2)
ans = 1.4047e-08
使用 gather 将循环卷积 cirC 返回到 MATLAB® 工作区。
cirC = gather(cirC);
输入参数
输入数组,指定为向量。
示例: sin(2*pi*(0:9)/10) + randn([1 10])/10 将含噪正弦波指定为行向量。
数据类型: single | double
复数支持: 是
卷积长度,指定为正整数。如果不指定 n,则卷积的长度为 length(a)+length(b)-1。
输出参量
输入向量的循环卷积,以向量形式返回。
提示
对于长序列,循环卷积可能比线性卷积更快。
参考
[1] Orfanidis, Sophocles J. Introduction to Signal Processing. Englewood Cliffs, NJ: Prentice-Hall, 1996, pp. 524–529.
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
此函数完全支持 GPU 数组。有关详细信息,请参阅在 GPU 上运行 MATLAB 函数 (Parallel Computing Toolbox)。
版本历史记录
在 R2007a 中推出
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)