『壹』 怎麼用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計算線性卷積的目的。循環卷積有快速演算法,廣泛應用於對通信系統的分析和綜合以及對信號的數字處理。