卷積c語言
『壹』 在設計FIR數字低通濾波器器時,用MATLAB生成了c語言頭文件,在編寫單片機程序時該怎樣利用那個頭文件
再將matlab里邊的卷積函數轉成C,直接調用就行了~~~~
或者你直接用C語言使用for寫個卷積函數,將B和信號做卷積。
real64_T是double,寫函數的時候注意點~
『貳』 用C語言做離散卷積運算
暴力N ^ 2可以直接乘,直接雙重循環即可,要快的話可以用NlogN的FFT。
『叄』 為什麼《數字信號處理c語言程序集》這本書里的主
數字信號處理C語言程序集,包括數字信號的產生、快速傅立葉變換、快速離散正交變換、快速卷積與相關、數字濾波器的時域和頻域響應、IIR數字濾波器的設計、FIR數字濾波器的設計、經典譜估計、現代譜估計、時—頻分析、 隨機信號的數字濾波、數字圖像處理、人工神經網路的C語言實現。
『肆』 如何用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 演算法吧
另外,虛機團上產品團購,超級便宜
『伍』 怎麼把小波變換分成低頻和高頻部分,單獨進行處理,高人指教,在線等,所有積分送上。。。
沒具體做過,不過按照你的意圖,應該就是使用mallat演算法的離散小波變換(DWT),在matlab中有現成的函數很易實現。
如果你非要用C,那麼需要C下解決以下幾點:
1.信號處理中卷積的C程序實現;
2.當實現了卷積計算的C代碼,你需要得到某個小波函數對應的高頻(帶通)和低通分解和重構濾波器組,這可以在matlab的wfilters函數和幫助中得到詳細的濾波器系數;
3.以上兩個問題都解決了,那麼直接對信號用濾波器進行卷積再去掉結果越一半的數據即可得到DWT的高頻細節和低頻逼近系數,用這些系數補零插值再卷積一次就得到了高頻細節和低頻逼近的重構信號(這就是你要的高頻和低頻的兩個單獨部分,然後你想咋處理就咋處理)。對於多層的DWT你只要對小波系數逐層減半即可實現DWT每層尺度伸長一倍的效果。
4.這時你會碰到卷積濾波的邊緣效應,你需要對原始信號進行擴展,你可以參看matlab中dwtmode函數的幫助文檔;
5.對於二維DWT,你還要實現張量積C代碼的實現,還有二維離散采樣(行抽取,列抽取和斜抽取)的C代碼(在dwt2函數的幫助文檔中有詳細的流程圖)。
由於matlab函數通常是用C語言編制的,而且每個函數都可查詢原始代碼,如果你有一定的水平,可以試試。不過你這問題需要較為深入的小波分析,信號處理和數學理論的支持,能不能編出象樣的C程序就不知道。這問題matlab很容易就解決了,可非要用C,這就是一個比較大的工程了,一個人要花費好長時間還不一定編的成,光數學理論就傷不起啊,技術問題就更別提了!到現在為止也沒見有啥象樣的小波C程序,你搜搜試試吧。能想到的就這么多了,水平有限,僅供參考,Good luck!
『陸』 關於小波db2和db4在c語言中的實現
小波db2和db4在c語言程序中具體差別體現在階數不同,也就是存儲單元佔用量不同,同時信號的延時不同,延時單元的長度也不同