Re: [問題] convolution的結果產生了shift已回收
※ [本文轉錄自 Math 看板]
作者: olys (查無暱稱) 看板: Math
標題: Re: [微積] convolution的結果產生了shift
時間: Sun Feb 28 13:35:36 2010
: 大家好,第一次在這裡發問。
: 我最近在作訊號平滑的研究,
: 手上有一維訊號f(x),還有一高斯常態分布函數g(x)(mu值設為0,sigma由演算法算出來)
: 平滑的內容就是將f和g作convolution,然後取中間1/2段的部分當作結果h(x)
: 但是不知道為什麼作出來的h(x)的y值和原來訊號f(x)的y值差很遠,
: 找不到是什麼數學原因讓h(x)產生了類似shift的現象。
: 但平滑化倒是成功了
: 底下是圖,紅色是f(x),藍色是平滑化後的h(x)
: http://olys.myweb.hinet.net/gsmooth.jpg

推
02/28 10:36,
02/28 10:36
推
02/28 11:50,
02/28 11:50
→
02/28 11:51,
02/28 11:51
→
02/28 11:56,
02/28 11:56
連測試資料都放上來好了
http://olys.myweb.hinet.net/testdata.txt
=====
首先這是高斯常態分布函數產生的程式
=====
function h = gauss(ni,sigma)
i_tmp = (ni / 2) - 1;
t = linspace(-i_tmp,i_tmp+1);
h=normpdf(t,0,sigma);
=======
主程式
=======
fid=fopen('testdata.txt','r'); %讀檔,有100筆
data=fscanf(fid,'%f',[1,inf]);
data=data';
data=data.*(-1);
x=linspace(1,100);
y=data(x);
sigma=1;
h = gauss(100,sigma); %產生範圍為 -49~50, mu為0之gauss function
F = convn(y,h,'same'); %convolution, 去掉頭尾只取中間100筆
plot(x,F(x),'b',x,data(x),'r');
=====
因為我產生高斯常態分布函數的範圍為 -49~50, mu為0之gauss function,
和範圍為1~100,mu取50意思是一樣的。
也有人和我說改用conv而非convn,但用conv後再自行去頭去尾取中間得到的function
也不對,最左右兩邊波型會下墜。
有點不太清楚到底是數學問題還是程式問題了 XD
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.127.208.68
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.127.208.68
推
02/28 16:31, , 1F
02/28 16:31, 1F
→
02/28 16:32, , 2F
02/28 16:32, 2F
→
02/28 17:17, , 3F
02/28 17:17, 3F
推
02/28 17:20, , 4F
02/28 17:20, 4F
→
02/28 21:30, , 5F
02/28 21:30, 5F
→
03/03 10:30, , 6F
03/03 10:30, 6F
→
03/03 10:31, , 7F
03/03 10:31, 7F
→
03/03 10:33, , 8F
03/03 10:33, 8F
→
03/03 10:34, , 9F
03/03 10:34, 9F
→
03/03 10:34, , 10F
03/03 10:34, 10F
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):