當前位置:首頁 » 編程語言 » 循環卷積c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

循環卷積c語言

發布時間: 2023-01-18 15:49:53

❶ 快速卷積在什麼情況下效率最高呢

一、實驗目的
1、學會FFT演算法程序(或函數)的使用方法;
2、了解序列的線性卷積和圓周卷積之間的關系;
3、驗證有限長FFT演算法實現線性相關運算的快速計算方法;
4、解FFT的點數對快速卷積與快速相關運算結果所產生的影響;
5、了學會利用FFT演算法進行有限長序列的線性卷積的快速計算;
6、掌握基-2快速傅立葉變換(Fast FourierTransform,FFT)的演算法原理及其程序實現方法.
二、實驗原理
1、有限長序列的線性卷積和圓周卷積線性卷積和圓周卷對於有限長序列,存在兩種形式的卷積,即積。設x(n)是長度光JM的有限長序列,y(n)是長度為N的有限長序列,則二者的線性卷積可表示為:
M-1
線性卷積的結果序列f(n)是一個長度為L=N +M -1的有限有限長序列,且長序列。將x(n)及y(n)均補零增長為L點的二者的L點的圓周卷積可表示為:
圓周卷積的結果序列f(n)是一個長度為L的有限長序列,由圓周卷積的點數所決定。有限長序列的線性卷積和圓周卷積之間的關系可用公式表示如下:
即:圓周卷積是線性卷積以圓周卷積的點數幾為周期進行周期延拓後所取的主值序列。因而,在圓周卷積的點數大於或等於線性卷積的長度時、圓周卷積結果和線性卷積結果相等,這也是快速卷積演算法的理論基礎之一。
2、離散傅里葉變換的卷積性質
離散傅里葉變換的卷積性質也是快速卷積演算法的另一理論基礎。若f(n)是有限長序列x(n)和有限長序列y(n)的L點圓周卷積,即公式(5-2),則 f(n)的L點離散傅里葉變換為: F_c (k)=X(k)Y(k)
3、Matlab中FFT與IFFT的實現
離散傅立葉變換(Discrete Fourier Transform, DFT)實現了頻域的離散化,方便了計算機處理,在數字信號處理中有著非常重要的作用。但直接計算DFT的運算量與變換長度N的平方成正比,計算量太大。而快速傅立葉變換FFT則是快速計算DFT的有效演算法,大大提高了DFT的運算效率,在信號頻譜的分析、濾波器頻率響應的計算,以及線性卷積的快速計算等方面起著非常重要的作用。FFT 採用分組計算的方式進行DFT的快速計算,具體演算法原理參看教材,在附錄B中也給出了常用的基-2時間抽取FFT演算法和分裂基FFT 演算法的c語言程序。相應的,IFFT 則為離散傅里葉反變換,即 IDFT 的快速計算方法。在Matlab中,提供了f(t)和 ifi(t)兩個函數來分別實現快速傅立葉變換的正變換和反變換。Ft(t)和if(t)兩個函數是用機器語言而不是Matlab 指令寫成的,執行速度很快。除了輸入、輸出參數的含義不同之外,這兩個函數的調用方法完全相同,因此以ff()函數為例說明二者的使用方法。ff()函數常用調用格式有兩種:
(1)Xk=fft(xn)
其中,xn為輸入時域序列x(n),返回結果xk為x(n)的離散傅里葉變換X(k)。當xn是矩陣時(對應於多通道信號),計算xn中每一列信號的離散傅里葉變換。當xn的長度是2的整數冪,采
用基2快速演算法計算,否則採用較慢的混合基演算法進行計算。
(2)Xk=fft(xn,NFFT)
這種調用格式相比較於上一種調用格式,多了一個輸入參數NFFT,用於指定FFT的點數。當NFFT的值是2的整數冪,採用基-2快速演算法計算,否則採用較慢的混合基演算法進行計算。當xn的長度大於NFFT時,對 xn進行自動截斷;當xn的長度小於NFFT時,在xn後自動進行補零。
4、快速卷積基本演算法的原理
利用FFT進行有限長序列的線性卷積的快速計算即為快速卷積演算法。按照上述相關原理,利用FFT計算線性卷積,即計算公式中的f(n)的演算法步驟可用下圖來表示:

其中,FFT運算的點數L應滿足L≥N+ M-1。為了採用基-2的演算法,常常需要L還應滿足L=2M
5、快速相關演算法原理
利用 FFT 講行有限長序列相關運算的快速實現則稱為快速相關演算法。若(n)是長度頭M的有限長序列,y(n)是長度為N的有限長序列,則一者的線性百相關序列R(m)與二者的線性卷積運算之間的關系可表示

由於線性卷積可以用FFT講行快速計算,則按公式,相關運算也可以利用fft進行快速計算,在此不再贅述其原理。需要時,根據傅立葉變換的反折和共軛特性可以減少一次FFT的使用提高計算效率。
三、實驗步驟、數據記錄及處理
本實驗利用Matlab中提供的fft()和 ifft()函數進行快速卷積演算法和快速相關演算法性卷積和圓周卷積之間的關系進行驗證。具體的實驗內容和實驗的實現,並對有限長序列線
步驟如下所示:
其中:
1、用 Matlab生成兩個有限長序列x(n) y(n)

(1)基於fft()和 ifft()函數,編程利用4點快速卷積演算法計算有限長序列x(n)與y(n)的卷積,結果令為c1(n)。
(2)基於fft()和 ifft()函數,編程利用速卷積演算法計算有限長序列x(n)與y(n)的卷積,結果令為c2(n)
(3)調用conv()函數計算有限長序列x(n)與y(n)的卷積,結果令為c3(n)。分別繪制序列x(n)、y(n)、c1(n)、c2(n)和c3(n)的圖形。對結果進行分析,並通過實驗結果驗證有限長序列線生卷積和圓周卷積之間的關系。
2、設兩個有限長序列x(n)和h(n)分別為:
(1)x(n)=(sin 0.4n)·R,(n+1);
(2)h(n)=(0.9)"R,o(n+1)
按圖所示的快速卷積演算法原理編寫完整的快速卷積演算法程序計算y(n)=x(n)*h(n),繪制序列圖形,並通過 conv()函數對結果進行驗證。
3、將實驗1中實驗內容4所給定的信號利用快速相關演算法進行自相關序列的計算,並將結果與實驗1中的結果進行對比驗證。
實驗程序:
clc;clear all;close all;
nx=0:1:2;x=[1,1,1];%確定x(n)與y(n)的自變數取值范圍
ny=0:1:2;y=[2,2,2];%生成x(n)與h(n)
L=pow2(nextpow2(length(x)+length(y)-1));%確定FFT快速卷積的點數
xk=fft(x,L);%計算x的L點FFT,結果為x(k)
yk=fft(y,L);%計算y的L點FFT,結果為y(k)
YK=xk.*yk;%計算y(k)
c1n=ifft(YK,4);%四點
c2n=ifft(YK,L);%八點
c3n=conv(x,y);%線性卷積
n1=0:1:3;%確定n1的取值范圍
n2=0:1:7;%確定n2的取值范圍
n3=0:1:4;%確定n3的取值范圍
%繪制x(n)與y(n)波形
figure('name','x(n)與y(n)序列');
subplot(2,1,1);stem(nx,x);grid on;xlabel('n');ylabel('x(n)');title('序列x(n)');
subplot(2,1,2);stem(ny,y);grid on;xlabel('n');ylabel('y(n)');title('序列y(n)');
%繪制x(n)與y(n)序列卷積波形
figure('name','x(n)與y(n)序列卷積');
subplot(3,1,1);stem(n1,c1n);grid on;xlabel('n');ylabel('c1(n)');title('x(n)與y(n)的4點fft');
subplot(3,1,2);stem(n2,c2n);grid on;xlabel('n');ylabel('c2(n)');title('x(n)與y(n)的8點fft');
subplot(3,1,3);stem(n3,c3n);grid on;xlabel('n');ylabel('c3(n)');title('x(n)與y(n)的線性卷積');
登錄後復制


clc;clear all;close all;
nxn=1:15;nhn=1:20;%確定x(n)與y(n)的自變數取值范圍
xn=sin(0.4*nxn);hn=0.9.^nhn;%生成x(n)與h(n)
L=pow2(nextpow2(length(xn)+length(hn)-1));%確定FFT快速卷積的點數
Xk=fft(xn,L);%計算x的L點FFT,結果為x(k)
Hk=fft(hn,L);%計算y的L點FFT,結果為y(k)
Yk=Xk.*Hk;%計算YK
y1n=ifft(Yk,L);%對YK調用IFFT,求得y1(n)
y2n=conv(xn,hn);%計算y2(n)的卷積
n1=(nxn(1)+nhn(1)):1:(L+nxn(1)+nhn(1)-1);%確定n1的自變數取值范圍
n2=(nxn(1)+nhn(1)):1:(nxn(15)+nhn(20));%確定n2的自變數取值范圍
%繪制有限長序列想x(n)與h(n)
figure('name','x(n)與h(n)序列');
subplot(2,2,1);stem(nxn,xn);grid on;xlabel('n');ylabel('x(n)');title('x(n)=(sin0.4n)*R15(n+1)');
subplot(2,2,2);stem(nhn,hn);grid on;xlabel('n');ylabel('h(n)');title('h(n)=((0.9)^n)R20(n+1)');
subplot(2,2,3);stem(n1,y1n);grid on;xlabel('n');ylabel('y(n)');title('快速卷積法計算y(n)');
subplot(2,2,4);stem(n2,y2n);grid on;xlabel('n');ylabel('y(n)');title('conv()函數計算y(n)');
登錄後復制

clc;clear all;close all;
n1=1:100;n2=1:100;%確定n1,n2取值范圍
x=[101,82,66,35,31,7,20,92,154,125,85,68,38,23,10,24,83,132,131,118,90,67,60,47,41,21,16,6,4,7,14,34,45,43,48,42,28,10,8,2,0,1,5,12,14,35,46,41,30,24,16,7,4,2,8,17,36,50,62,67,71,48,28,8,13,57,122,138,103,86,63,37,24,11,15,40,62,98,124,96,66,64,54,39,21,7,4,23,55,94,96,77,59,44,47,30,16,7,37,74];
mean(x(:))
x=x-mean(x);
Rx=xcorr(x);
y=x(end:-1:1);
subplot(2,1,1);stem(Rx);grid on;xlabel('t');ylabel('Rx');title('xcorr()函數計算的自相關序列');
L=pow2(nextpow2(length(n1)+length(n2)-1));%確定FFT快速卷積的點數
Xk=fft(x,L);%計算x的L點FFT,結果為x(k)
Yk=fft(y,L);%計算y的L點FFT,結果為y(k)
Rk=Xk.*Yk;%計算YK
Rn=ifft(Rk,L);%對RK調用IFFT,求得y1(n)
n=(n1(1)+n2(1)):(L+n1(1)+n2(1)-1);%確定n的自變數取值范圍
subplot(2,1,2);stem(1:200,Rn(1:200));grid on;xlabel('t');ylabel('R(n)');title('fft計算的自相關序列');
登錄後復制

四、思考題
(1)對實驗內容2中快速卷積基本演算法的運算量進行分析,即乘法和加法運算次數。

(2)利用實例說明快速卷積基本演算法的適用條件,即在什麼情況下效率最高。

(3)實驗內容3中,如何通過DFT的性質,減少一次ftt()函數的調用,提高計算效率?

五、總結
通過此次實驗的練習,加深理解FFT 在實現數字濾波(或快速卷積)中的重要作用,更好的利用FFT進行數字信號處理,並且掌握了循環卷積和線性卷積兩者之間的關系

❷ 循環矩陣乘法怎麼化作卷積

啊,這個還沒人回答么?這個其實挺顯然的,幾乎就是卷積的定義,只是表達起來費勁。

設那個Circulant Matrix為A,
A的第1行元素:a_1、a_2、...、a_n
A的第2行元素:a_n、a_1、a_2、...、a_{n-1}
A的第3行元素:a_{n-1}、a_n、a_1、a_2、...、a_{n-2}
就這么一個一個錯開,最後
A的第n行元素:a_2、a_3、...、a_n、a_1

設向量b的元素是:b_1、b_2、...、b_n
計算矩陣與向量相乘:Ab

先看卷積的定義:
對於任一兩個向量 f 與 g,記 f°g 為它們的卷積,則:
f°g (n) = Σ_{m從-∞到∞} f(m) g(n-m)
也就是說:h = f°g 也是一個向量,它的第n個元素 h(n) 是:先把 g(m) 反過來變成 g(-m),然後再平移n得到 g(n-m),最後將 g(n-m) 與 f(m) 一一相乘。

建議樓主先熟悉一下卷積的定義,卷積有很多應用,比如下面這個(只為熟悉卷積定義):
任意兩個多項式:
p(x) = 4x^3 + 5x^2 + 2
q(x) = 3x^2 + x + 8
那麼 p(x) 乘以 q(x) 的系數是什麼呢?就是 p 和 q 二者系數的卷積。
設 f = [2 0 5 4] 為 p 的系數,g = [8 1 3] 為 q 的系數(向量的下標從0開始)。
根據卷積的定義,
f°g (0) = f(0) g(0-0) = 2*8 = 16
f°g (1) = f(0) g(1-0) + f(1) g(1-1) = 2*1+0*8 = 2
f°g (2) = f(0) g(2-0) + f(1) g(2-1) + f(2) g(2-2) = 2*3+0+5*8 = 46
f°g (3) = f(1) g(3-1) + f(2) g(3-2) + f(3) g(3-3) = 0+5*1+4*8 = 37
f°g (4) = f(2) g(4-2) + f(3) g(4-3) = 5*3+4*1 = 19
f°g (5) = f(3) g(5-3) = 4*3 = 12
最後 f°g = [16 2 46 37 19 12] 恰好為 p(x)q(x) 的系數。

再回到我們的問題。
記向量 b = [b_1 b_2 ... b_n]。
向量 c = [a_n a_{n-1} ... a_2 a_1 a_n a_{n-1} ... a_2],也就是把向量a倒過來寫2遍。
為了方便,b的下標從0到n-1,c的下標從-(n-1)到n-1,也就是:
c(0) = a_1,c(-1) = a_2,...,c(-n+1) = a_n
c(1) = a_n,c(2) = a_{n-1},...,c(n-1) = a_2
考察 b°c
b°c (0) = b(0) c(0) + b(1) c(-1) + b(2) c(-2) + ... + b(n-1) c(-n+1)
恰好為矩陣 A 的第1行與 b 的乘積。
b°c (1) = b(0) c(1) + b(1) c(0) + b(2) c(-1) + ... + b(n-1) c(-n+2)
恰好為矩陣 A 的第2行與 b 的乘積。
依次類推,直到:
b°c (n-1) = b(0) c(n-1) + b(1) c(n-2) + b(2) c(n-3) + ... + b(n-1) c(0)
恰好為矩陣 A 的第n行與 b 的乘積。
可以看到,矩陣與向量相乘完全等價於卷積。

============================================================

最後,再說一下DFT(離散傅立葉變換)和FFT(快速傅立葉變換)的關系。
這只關繫到計算的快慢。我們統計一下最基本的加減乘除的運算數。
為了計算每一個卷積中的元素,比如:b°c (0),我們都要進行 O(n) 次的運算。
那麼計算全部的卷積,就需要 O(n^2) 次運算。
跟直接計算一樣,沒有任何優勢。

但是利用DFT和FFT就不一樣了。
有這樣一個定理:將序列經過 DFT 變換後,設 F = DFT(f),G = DFT(g) 分別為兩個序列對應的傅立葉變換後的序列,那麼:原序列中的卷積對應變換後的乘積。
詳細說:考察 f°g 經過傅立葉變換後的序列:DFT(f°g),這個定理就是說:
DFT(f°g) = F*G,就是F和G中的元素一一相乘。
兩個序列F和G中的元素一一相乘,只需要O(n)的計算量。

剩下的就是DFT(離散傅立葉變換)的計算量了。
用FFT演算法,傅立葉變換只需要O(n log(n))的計算量,所以總計算量是:O(n log(n)),遠小於O(n^2)的直接計算方法。

具體步驟如下:
1) 先將 b 與 c 進行 FFT 變換,得到:B=DFT(b),C=DFT(c),計算量 O(n log(n))
2) 將 B 與 C 中的元素一一相乘,得到:B*C,計算量 O(n)
3) 用反向的快速傅立葉變換,得到:b°c = IDFT(B*C),計算量 O(n log(n))
其中,IDFT代表反向的傅立葉變換。

❸ 如何用C語言實現數組的卷積過程~~~

積分為線性卷積,和圓形卷積。而題目是線性卷積,然後是所求的結果個數是上面兩個數組 個數的和減去1
比如上面h數組裡面單元是5 而x數組 是4
所以肯定一點是結果是等於8個數的
result[(sizeof(h) + sizeof(x)) / sizeof(double) - 1];這個就可以說明了
第二個知識點是卷積是怎麼求的。第一步肯定是判斷兩個數組 那個長度長
conv(x, h, sizeof(x) / sizeof(x[0]), sizeof(h) / sizeof(h[0]), result); 就是實現這個目標的。
然後是長度長的放前面
好吧 我換個 數字來就把
x【】=
h【】=
然後卷積 一個是 x0*h0=1;實現語句 是第一個
for (int i = 0; i < lenH; i++)
{
for (int j = 0; j <= i; j++)
result[i] += x[j] * h[i - j];
}
此時 已經要轉入第二步驟了:
for (int m = lenH; m < lenX; m++){
for (int j = 0; j <lenH; j++)
result[m] += x[m - j] * h[j];
}
第二部 應該是 x*h+x1*h(1-1)= 這里得h1 用0代替 但程序里 不是這樣 而是 用x*h=
好吧 我可能設置的h數組不夠長 加入 h有兩個。x有
那麼 結果 應該是x2*y1+x1*y0;
然後是第三部
是說 在要求的 結果 最後幾個數字時候 比如原題裡面 應該是有8個的。但到第二個循環才求到X得長度5個。
所以 後面應該是resual記住 數組下標 比實際小1. 所以
是這樣的
用 for (int n = lenX; n < lenX + lenH - 1; n++){
for (int j = i - lenX + 1; j < lenH; j++)
result[n] += x[n - j] * h[j];
}裡面的i 要改成n
for (int n = lenX; n < lenX + lenH - 1; n++){
for (int j = n - lenX + 1; j < lenH; j++)
result[n] += x[n - j] * h[j];
}
然後 是這樣分析的
結果等於=x(0)h(5-0)+x(1)h(5-1)+x(2)h(5-2)+x(3)h(5-3)=x(0)h(5)+x(1)h(4)+x(2)h(3)+x(3)h(2) 記住 數組不夠的地方 用0代替
(result, &result[8], ostream_iterator<double>(cout, " ")); 這個函數 就不想說了 自己去看stl 演算法吧
另外,虛機團上產品團購,超級便宜

❹ 兩個序列做類似於卷積的運算,不同的是把乘後求和改為求與並輸出所有序列

原理方法
1
基本數學原理
我們假設有兩個長度有限的任意序列A(n)和B(n),其中A(n)和B(n)的具體數學表達式可以看下圖一。那麼這兩個有限長序列的卷積就應該為C(n)=A(n)*B(n),其具體表達式請參看一下圖二。

2
相關函數指令
Matlab中的conv和deconv指令不僅可以用於多項式的乘除運算,還可以用於兩個有限長序列的卷積和解積運算。
Matlab提供的函數conv,語法格式:w=conv(u,v),其中u和v分別是有限長度序列向量,w是u和v的卷積結果序列向量。如果向量u和v的長度分別為N和M,則向量w的長度為N+M-1.如果向量u和v是兩個多項式的系數,則w就是這兩個多項式乘積的系數。下面我們看一下deconv指令。功能:求向量反褶積和進行多項式除法運算。語法格式:[q,r]=deconv(v,u) ,參數q和r分別返回多項式v除以多項式u的商多項式和余多項式。具體實例請看下一步。

3
conv和deconv指令實例
具體實例請看下圖,這里我們求多項式(x2+2x+1)與多項式(2x2+x+3)的積,再求積與(x2+2x+1)的商。需要注意的是向量c代表多項式(2x4+5x3+7x2+7x+3)。

END
兩個有限長序列的卷積實例
具體序列的數學形式
在這一步我們將具體的有限長時間序列按數學方式顯示,具體請看下圖。

解法一:循環求合法求卷積
在本例中我們將按照原理方法第一步中圖二的方式進行卷積計算,即循環求合法求卷積。具體的代碼及結果請看下圖。圖一是是生成有限長度時間序列,圖二是根據原理方法第一步中圖二的方式即循環求合法求卷積的具體代碼,圖三是是圖二的計算結果。

解法二:0起點序列法
下面就說一下第二種方法,即「0起點序列法」,所採用的指令就是我們在原理方法中介紹的conv函數指令。具體代碼看下圖。

解法三:非平凡區間序列法
下面就說一下第二種方法,即「0起點序列法」,所採用的指令就是我們在原理方法中介紹的conv函數指令。具體代碼看下圖。圖一為計算代碼,圖二為計算結果。

繪圖比較
這一步我們將解法二和解法三的計算結果繪制在一張圖片中進行比較,其中第一幅是「0起點法」的計算結果圖,第二幅是「非平凡區間法」的計算結果圖。其中畫圖代碼為:
subplot(2,1,1),stem(kc,c),text(20,6,'0 起點法') %畫解法二的結果
CC=[zeros(1,KC(1)),C]; %補零是為了兩子圖一致
subplot(2,1,2),stem(kc,CC),text(18,6,'非平凡區間法') %畫解法三的結果
xlabel('n')

小結
有以上可以得出如下結論:
1、「解法三」最簡潔、通用;
2、「解法二」使用於序列起點時刻N1或(和)M1小於0的情況,比較困難;
3、「解法一」最繁瑣,效率低下。

❺ 用c語言實現兩個矩陣相乘怎麼做

C語言實現矩陣相乘
問題描述:
編寫程序,可以實現m*n矩陣和n*p矩陣相乘。m,n,p均小於10,矩陣元素為整數。
分析:
首先我們可以根據題意寫出函數頭。可以定為void
MatrixMutiply(int
m,int
n,int
p,long
lMatrix1[MAX][MAX],long
lMatrix2[MAX][MAX],long
lMatrixResult[MAX][MAX]),其中lMatrix1和lMatrix2分別是輸入的m*n矩陣和n*p矩陣,lMatrixResult是輸出的m*p矩陣。
因為m,n和p都是未知量,要進行處理的矩陣大小是變數。但我們可以定義比較大的二維數組,只使用其中的部分數組元素。
矩陣相乘的演算法比較簡單,輸入一個m*n矩陣和一個n*p矩陣,結果必然是m*p矩陣,有m*p個元素,每個元素都需要計算,可以使用m*p嵌套循環進行計算。
根據矩陣乘法公式:
可以用循環直接套用上面的公式計算每個元素。嵌套循環內部進行累加前,一定要注意對累加變數進行清零。
數據要求
問題中的常量:
#define
MAX
10
/*矩陣最大行數和列數*/
問題的輸入:
int
m,n,p;
/*相乘的兩個矩陣的行列數*/
long
lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];
/*相乘的兩個矩陣*/
問題的輸出:
long
lMatrixResult[MAX][MAX];
/*矩陣相乘後得到的矩陣*/
初始演算法
1.輸入兩個矩陣的的行列數m,n,p;
2.輸入第一個矩陣的每個元素;
3.輸入第二個矩陣的每個元素;
4.調用函數進行乘法運算,結果放在lMatrixResult
中;
5.
列印輸出結果矩陣。
演算法細化
演算法的步驟4計算兩個矩陣的乘法演算法如下:
4.1
定義循環變數i,j,k;
4.2
嵌套循環計算結果矩陣(m*p)的每個元素。
程序代碼如下:
#define
MAX
10
void
MatrixMutiply(int
m,int
n,int
p,long
lMatrix1[MAX][MAX],
long
lMatrix2[MAX][MAX],long
lMatrixResult[MAX][MAX])
{
int
i,j,k;
long
lSum;
/*嵌套循環計算結果矩陣(m*p)的每個元素*/
for(i=0;i<m;i++)

for(j=0;j<p;j++)

{

/*按照矩陣乘法的規則計算結果矩陣的i*j元素*/

lSum=0;

for(k=0;k<n;k++)

lSum+=lMatrix1[i][k]*lMatrix2[k][j];

lMatrixResult[i][j]=lSum;

}
}
main()
{
long
lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];
long
lMatrixResult[MAX][MAX],lTemp;
int
i,j,m,n,p;
/*輸入兩個矩陣的的行列數m,n,p*/
printf(" Please
input
m
of
Matrix1: ");
scanf("%d",&m);
printf("Please
input
n
of
Matrix1: ");
scanf("%d",&n);
printf("Please
input
p
of
Matrix2: ");
scanf("%d",&p);
/*輸入第一個矩陣的每個元素*/
printf(" Please
elements
of
Matrix1(%d*%d): ",m,n);
for(i=0;i<m;i++)

for(j=0;j<n;j++)

{

scanf("%ld",&lTemp);

lMatrix1[i][j]=lTemp;

}
/*輸入第二個矩陣的每個元素*/
printf(" Please
elements
of
Matrix2(%d*%d): ",n,p);
for(i=0;i<n;i++)

for(j=0;j<p;j++)

{

scanf("%ld",&lTemp);

lMatrix2[i][j]=lTemp;

}
/*調用函數進行乘法運算,結果放在lMatrixResult
中*/
MatrixMutiply(m,n,p,lMatrix1,lMatrix2,lMatrixResult);
/*列印輸出結果矩陣*/
printf(" Result
matrix:
");
for(i=0;i<m;i++)
{

for(j=0;j<p;j++)

printf("%ld
",lMatrixResult[i][j]);

printf(" ");
}
}
程序運行結果如下:
Please
input
m
of
Matrix1:
3
Please
input
n
of
Matrix1:
2
Please
input
p
of
Matrix2:
3
Please
elements
of
Matrix1(3*2):
1
2
0
1
3
0
Please
elements
of
Matrix2(2*3):
1
2
0
3
1
1
Result
matrix:
7
4
2
3
1
1
3
6
0

❻ FIR濾波器的C語言程序

length==256

❼ x(n)=5cos的周期

判斷信號的因果性與穩定性:。
非因果,穩定
2.判斷系統的因果性與穩定性: 。
因果,不穩定
3.判斷信號是否為周期序列,若是,求其周期。
周期序列,周期為14
4.判斷系統的線性與時不變性:。
第 1 頁
泉州 舒華健身器材批發加盟連鎖 -舒華總部直招
舒華健身器材批發品牌加盟連鎖,火爆全國的健身器材加盟總部成熟模式,從選擇裝修到開店運營,總部全程扶持!
點擊立即咨詢,了解更多詳情
咨詢
舒華體育股份有限公司 廣告
線性,時變
5.斷下述系統是否是最小相位系統,為什麼?
是,因系統零極點都在單位園內
6.用采樣頻率對信號采樣,是否能不失真恢復原信號,為什麼?
不能,因為
7.已知系統的差分方程為:判斷該系統是IIR系統還是FIR系統,為什麼?
該系統的傳輸函數為H(z)=1/(1-az-1)為IIR系
第 2 頁
統,(或輸出只與輸入及前一時刻輸出有關)
8.說明沖激響應不變法與雙線性變換法的應用范圍。
沖激響應不變法一般適用於低通濾波器的設計、加抗混疊濾波器的帶通濾波器的設計,模擬頻率和數字頻率之間是線性關系;雙線性變換適用於片段常數特性濾波器的設計,模擬頻率與數字頻率之間是非線性關系。
二、一線性時不變因果系統由下面差分方程描述:

第 3 頁
1.確定該系統的系統函數H(z),畫出其零極點圖。
2.求系統的沖激響應h(n),說明該系統是否穩定。
3.求系統頻率響應H(ejω)。
1.
零點: 極點:
2.
極點全部在單位圓內,系統穩定
第 4 頁
3.
三、已知線性時不變系統的單位沖激響應和輸入分別為:

1.用線性卷積的方法求輸出序列。
2.計算和的8點循環卷積。
3.在什麼條件下循環卷積等於線性卷積結果?

第 5 頁

第 6 頁

線性卷積的結果圖 循環卷積的結果圖
二序列在時,即>=11點時,循環卷積=線性卷積
四、已知定義在的有限長序列為:
第 7 頁
={ 4, -2, 2, 3,-1, -2, 0,1,-4 }
X(k)為其9點的DFT,不直接計算DFT,求:
解:因為(4分)
所以

五、FFT來計算信號的頻譜,已知信號的最高頻率為,要求頻率解析度為,試確定:
1.采樣間隔T,
第 8 頁
2.採用基-2FFT的最小樣點數N,以及與此相對應的最小記錄長度,
3. 按你確定的參數,計算所獲得的實際解析度,
4.若須將解析度提高一倍,如何獲得,為什麼。
解:1)采樣間隔T: T=1/(2fh)=1/(22.51000)=0.2ms,
2)基-2FFT的最小樣點數N :N=fs/f=5000/10=500, 取N為512
相對應的最小記錄長度: Tp=5120.2ms=0.1024s
第 9 頁
3)按確定的參數所獲得的實際解析度:f= fs /N=5000/512=9.77Hz
4)若須將解析度提高一倍,可通過保持采樣頻率不變並將原記錄長度增加一倍,作2N 點FFT獲得。
六、已知采樣頻率,用雙線性變換法設計一2階Butterworth 低通濾波器,3dB截止頻率為=100Hz,求 H(z)。
解:1)求數字頻率: fc=100Hz
c=2fc/fs=2100/1000=0.2
2)頻率預畸變: c=tg(c /2) =0.32
3)濾波器節數: N=2
第 10 頁
4)查表求得歸一化模擬傳輸函數
5)雙線性變換求傳輸函數:
七、用窗函數法設計一嚴格線性相位低通數字濾波器,截止頻率,要求過渡帶弧度,阻帶最小衰減。
1.選擇合適的窗函數並確定節數N
2.求濾波器的延時
3.求h(n)
解:1)由給定的指標確定窗函數和長度N
第 11 頁
由dB可選擇漢寧窗、漢明窗、布拉克曼窗或凱塞窗等,若再考慮從濾波器節數最小的原則出發,可選擇漢寧窗或漢明窗。這里選擇漢寧窗。
,,也可取N=21。

2)確定延時值
3)求理想的單位脈沖響應

4)求h(n)

第 12 頁
一、填空題
1.全通系統的零極點有 的特性,零點位置在 ,極點位置在 。
鏡像共軛對稱,單位圓外,單位圓內
2.N=16 時,1,10的倒碼分別為:1: ,10: 。
1000(8),0101(5)
3.線性相位FIR濾波器當h(n)偶對稱且N為偶數時,其幅度響應關於π為 對稱,不適於設計 和 濾波器。
奇,高通,帶阻
4.基-2 指FFT的長度N為 ,共有
第 13 頁
個蝶式運算。
2M,NM/2
5.脈沖響應不變法不適合設計 和 濾波器,因為 原因。
高通,帶阻,混疊
6.用矩形窗函數設計FIR濾波器增加節數N可減少 但不能減少 。
過度帶,阻帶衰減
7.用長度為M的嚴格線性相位FIR濾波器對信號濾波,濾波器的相位響應為 ,輸出信號的延時為 個樣點。
、(M-1)/2
第 14 頁
二、判斷題:
1.判斷信號的因果性與穩定性:。
非因果,穩定
2.判斷系統的因果性與穩定性: 。
因果,不穩定
3.判斷信號是否為周期序列,若是,求其周期。
周期序列,周期為14
4.判斷系統的線性與時不變性:。
第 15 頁
線性,時變
5. 斷下述系統是否是最小相位系統,為什麼?

是,因系統零極點都在單位園內
三、作圖題
1.已知,畫出(要求標明坐標):
1), 2)
1) (2分) 2) (4分)
第 16 頁

x(n) x((n-2))6R6(n)
2.已知傳輸函數為畫出級聯型結構流圖
(4分)
3
第 17 頁
1 -3.5 0.5 z-1

-1 2.5
四、計算題
1.已知序列為:{x(-3)= -1,x(-2)=0,x(-1)=1,x(0)=2,x(1)=1,x(2)=0,x(3)=1;其它值為0},求的富氏反變換。
解:由富氏變換的對稱性:
F[xe(n)]= Re[X(ei)]
知Re[X(ei)]的富氏反變換為序列x(n) 的共軛對稱序列xe(n),由於
x (n)為實序列,有:
第 18 頁
xe(n)= 1/2[x (n)+x (-n)]
x(-3)= -1,x(-2)=0,x(-1)=1,x(0)=2,x(1)=1,x(2)=0,x(3)=1
令y(n)= x(-n)有:
{y(-3)=1,y(-2)=0,y(-1)=1,y(0)=2,y(1)=1,y(2)=0,y(3)= -1}
因此:
{ xe(-3)=0,xe(-2)=0,xe(-1)=1,xe(0)=2,xe(1)=1,xe(2)=0,xe(3)=0,其餘為0}
2.已知濾波器的單位脈沖響應為,在間取非零值, 用FFT方法求。
第 19 頁
1)求濾波器的頻率響應;
2)確定為了保證用基-2 FFT方法正確計算全部時最小的FFT長度L;
3)指出若採用16點FFT時,僅那些點的值正確,為什麼?求出這些的點的開始點和結束點的范圍。
解:
1)濾波器的頻率響應

2)由題目知x(n)長度為N=16,h(n)的長度為M=9,卷積輸出長度為L=N+M-1=24,故可取基-2 FFT的長度為32。
第 20 頁
3)線性卷積yl(n)與循環卷積y(n)的關系:
y(n)=yl((n+16*m))R16(n),而線性卷積的長度為24,故從n=0~7及n=16~24的點被混疊;因此,僅當n=8~15時才有正確的值。
3.已知序列,是對的Z變換在單位園上進行N=8
的等間隔采樣值,起點為,求在N=8的逆DFT:
解:
因為是對的Z變換X(z)進行N=8的等間隔采樣,故有:
=
第 21 頁
按頻率采樣定理: =

五、設計題
1.已知采樣頻率,用雙線性變換法設計一Butterworth 低通濾波器,3dB截止頻率為=100Hz,阻帶下邊頻=400Hz,阻帶最小衰減為=22dB求 H(z)。
解: 1)求數字頻率: fc=100Hz
c=2fc/fs=2100/1000=0.2
s=2fr/fs=2400/1000=0.8
第 22 頁
2)頻率預畸變: c=tg(c /2) =0.32
s=tg(s /2) =3.08
3)濾波器節數:

取N=2
4)查表求得歸一化模擬傳輸函數
5)雙線性變換求傳輸函數:
H(z)=(1+2z-1+z-2)/(15.1849-17.5312z-1+6.3463z-2)
第 23 頁
2.用窗函數法設計一嚴格線性相位低通數字濾波器,截止頻率,要求過渡帶弧度,阻帶最小衰減。
(1)選擇合適的窗函數並確定節數N
(2)求濾波器的延時
(3)求h(n)和H(z)
解: 1)選擇合適的窗函數:
因為要求濾波器的阻帶衰減As50dB,可選擇漢明窗。
濾波器節數:N=A/=8/0.32=25
2)濾波器的延時:=(N-1)/2=12
3)求h(n)(選擇漢明窗):
第 24 頁
hd(n)=1/(2) e-jd=sin[0.1 (n-)]/[(n-)]
w(n)= [0.54-0.46cos(2n /(N-1))]RN(n)
h(n)=hd(n)w(n)= 0.5[1-cos(2n /(N-1))] sin[0.1 (n-)]/[(n-)] RN(n)
一、填空題
1.最小相位系統傳輸函數的零點位置在 ,極點位置在 。
單位圓內、單位圓內
2.求N=16 時,8,11 的倒碼: 8: , 11: ,
0001(1) 、1101(13)
第 25 頁
3.線性相位FIR濾波器當h(n)偶對稱且N為偶數時,其幅度響應關於π為 對稱,不適於設計 和 濾波器。
奇 、高通、帶阻
4.用長度為M的嚴格線性相位FIR濾波器對信號濾波,濾波器的相位響應為 ,輸出信號的延時為 個樣點。
第 26 頁
網路文庫
搜索
x(n)=5cos的周期