‘壹’ 怎么用MATLAB计算循环卷积
你自己根据想要的δ(n)和δ(n-1)求出h_1来。
%n设4个点
h_1 = ......;
H_1 = fft(h_1);
H_2 = 1./H_1; %H_1和H_2的积为1
h_2 = ifft(H_2);
H = fft(δ(n)); %我忘了这个函数的fft等于几了,记得是1,未免误导你加了这一步
H_3 = H./H_1; %我如果没猜错,h_1和h_3的卷积等于δ(n),那fft后H_1和H_3的积等于H
h_3 = ifft(H_3);
‘贰’ 求x(n)=(2,1,1,1),h(n)=(2,2,1,2)计算x(n)*h(n) 试计算x(n)与h(n) 5点和8点的循环卷积
解法1,使用for循环做:
#include<stdio.h>
void main(){
long i,result=1,n;
printf("请输入n的值:");
scanf("%ld",&n);
for(i=1;i<=n;i++){
result*=i;
}
printf("%ld!=%ld",n,result);
}
解法2,使用while循环做:
#include<stdio.h>
void main(){
long i=1,result=1,n;
printf("请输入n的值:");
scanf("%ld",&n);
while(i<=n){
result*=i;
i++;
}
printf("%ld!=%ld",n,result);
}
解法3,使用do...while循环做:
#include<stdio.h>
void main(){
long i=0,result=1,n;
printf("请输入n的值:");
scanf("%ld",&n);
do{
i++;
result*=i;
}while(i<=n);
printf("%ld!=%ld",n,result);
}
解法4,使用递归做:
#include<stdio.h>
long calc(long num){
if(num==0){
return 0;
}else if(num==1){
return 1;
}else{
return num*calc(num-1);
}
}
void main(){
long n;
printf("请输入n的值:");
scanf("%ld",&n);
printf("%ld!=%ld",n,calc(n));
}
‘叁’ 循环卷积的线性卷积
对于线性非时变离散时间系统来说,若序列x(n)是系统的输入,h(n)是系统在单位脉冲作用下的单位脉冲响应,则由于输入序列x(n)可表示为一系列脉冲的线性组合,所以,根据线性系统的叠加性质,系统的输出在系统初始不储能的条件下(零状态响应)可由图4式求得.
上式在运算过程存在序列的翻转、移位、相乘和相加,所以称为卷积和。x(n)*h(n)表示两个序列相卷积的运算符号,故式①也就是卷积的定义式。为了与离散傅里叶变换的循环卷积以及周期序列的周期卷积相区别,通常所指的卷积又称为线性卷积。卷积运算符合交换率,可写成另一种等效形式如图5.
线性卷积的计算可以用解析法,也可以用图解法。若两 个序列的长度分别为N1和N2,则卷积结果的总长度应为L=N1+N2-1。
同理,对线性非时变连续系统来说,若连续时间信号x(t)是系统的输入,h(t)是系统在单位脉冲作用下的单位冲激响应,则系统在零状态的输出为它们的卷积积分
线性卷积是数字信号处理中最常见的一种基本运算,不仅用于系统分析还用于系统设计。如果代表滤波器的脉冲响应则卷积运算就是一种线性滤波,y(n)是信号x(n)通过滤波器后的响应。
‘肆’ 两个序列循环卷积怎么求
设y(n)=x(n)*x(n).求线性卷积很简单,将x(n)的序列按右端对齐,像计算五位数乘法那样算出答案即可.
这个例子中.按照上述方法可得y(n)={0,0,0.25,0.5,1.25,1,1,0,0}总共九个点.
线性卷积:假设x1(n)序列长为L1,x2(n)长度为L2,则两者线性卷积后的序列长为L1+L2-1.
循环卷积又称圆周卷积,它的计算方法是翻转,周期化,相乘,求和.前提是两序列长度是一样的,假设都为N,则卷积后的序列长度仍为N.它是周期卷积的特例.
N点卷积就是求N个序列的卷积.
‘伍’ 离散卷积和循环卷积的计算机C语言计算
卷积可以将 两个数列分别做FFT 在对应相乘 ,在做IFFT 。
好像一般软件没有相应的函数,直接用FFT 和IFFT 也挺方便的 。你简单组合一下就行了
‘陆’ MATLAB中怎么用fft函数计算循环卷积
解决方案1:
直接用缉鼎光刮叱钙癸水含惊ifft();例如信号x
y=fft(x);%对信号傅里叶变换到频域
z=ifft(y);%对信号y傅里叶反变换到时域,
解决方案2:
工具箱啊。ifft()函数
‘柒’ 怎么用MATLAB实现 用循环卷积定义式计算两有限长序列的循环卷积
使用循环卷积的性质
x[k] 圈 h[k] =IDFT{ DFT{x[k]} *DFT{h[k]} };
clc;
clear
a=[5 2 4 -1 2];
b=[-3 -4 -1];
N=7;
a=[ a, zeros( 1,N-length(a) ) ];
b=[ b, zeros( 1,N-length(b) ) ];
a1=fft(a,N);
b1=fft(b,N);
c=a1.*b1;
result=ifft(c);
disp(result);
‘捌’ 循环卷积的定义
计算两个长度均为N的序列x1(n)和x2(n)的循环卷积,一个简易的办法是先把x1(n)的数据,设x1(n)=(1,2,3,4),N=4,按反时针方向均匀分布在一个圆周上。如图1中(a)。的内圆所示,而把x2(n),设x2(n)={5,6,7,8},按顺时针的方向均匀分布在另一个同心圆上,然后求两圆上相应序列的乘积,并把V项乘积叠加起来作为n=0时刻的卷积值y(0),即
y(0)=1×5+4×6+3×7+2×8=66
若求n=1时刻的y(l)值,可将外圆的:x2(n)固定,把内圆上的序列x1(n)顺时针旋转一个单位时间(或将x1(n)固定,把外圆上的序列x2(n)逆时针旋转),然后把对应项的乘积叠加起来,即为所求。如(b)图所示,即
y(1)=2×5+1×6+4×7+3×8=68
这样依次将内圆序列进行循环移位一周,便可以求得:y(2)=66,y(3)=60。所以循环卷积又称圆周卷积,卷积结果y(n)长度仍等于N,其定义式如图2。方括号内的运算代表两个周期序列的周期卷积。它与线性卷积不同之处是卷积过程只限在m=0到N-1的一个周期内。乘以RN(n)表示卷积结果只取长度为N的主值序列。
由于离散傅里叶变换(DFT)的实质是周期序列变换到频域的描述。可以证明:两个有限长序列在时域的循环卷积,其DFT等于在频域两个序列相应的DFT的乘积。
式中X1(k)和x2(k)分别是x1(n)和x2(n)的N点DFT。它表明DFT具有循环卷积性质(CCP),也是区别于其他变换的重要特性。正是这种性质,用计算机通过计算DFT达到计算循环卷积和线性卷积的目的,提髙了运算效率。按长度为N的两个序列,其线性卷积的长度应为2N-1,而循环卷积的长度仍然为N。为此,可以通过补零把序列长度增加到L≥2N-1。这样,一方面使循环卷积的长度等于线性卷积,另一方面避免进行循环卷积过程出现混叠造成失真,使计算结果与线性卷积相等,从而实现利用DFT计算线性卷积的目的。循环卷积有快速算法,广泛应用于对通信系统的分析和综合以及对信号的数字处理。