|
原帖由 xinbaby 于 2008-7-16 12:36 发表
还有一个问题,我要做的是:
将信号f(t)从时域经FFT变到频域F(jw),在频域内做变换(F(jw)和关于w的加减乘除运算,这里的w=f*2*pi,f取IFFT(x,f)得到的对吗?),再IFFT变到时域
结果是:如果取fmax=fs/2时,最终结果减去一个直流量就正确,
如果取fmax=fs时,最终结果根本不正确
这是怎么回事儿呢?求教了,这个问题困扰我好几天了。是不是f的问题。
我想你问的是另一个程序,没有看到你的程序不知错在那里。但是从以上程序,你在求X和f中都有错误。当取fmax=fs/2时,
X=X(1:ceil(fmax*n/fs)+1);
f=linspace(0,fmax,ceil(fmax*n/fs)+1);
如果信号x长N,则X在fs/2对应的点是X(N/2+1)。而myifft中应作相应的修改,从myfft得到的X只是正频率部分,在myifft中应把正频率部分扩展到全频率(正频率部分+负频率部分),再IFFT。fmax=fs/2没有错,但错在不能只用正频率部分做IFFT,这样得到的y不仅数据只有原来的一半长,而且虚部数值很大,不可忽略。我把myfft和myifft都做了修改,没有把fmax作为参数。我想在myfft内对频域中的(F(jw)做关于w的谱线加减乘除运算后再经myifft,一样能得正确的结果。
function [X,f]=myfft(fs,x,p)
if nargin==2
p='noplot';
end
fmax=fs/2;
X=[];
f=[];
n=length(x);
t=(0:n-1)/fs;
X=fft(x)/n;
X=X(1:ceil(fmax*n/fs)+1);
f=linspace(0,fmax,ceil(fmax*n/fs)+1);
function [y,t]=myifft(X,fs,f,q) %IFFT程序:
if nargin==3
q='noplot';
end
fmax=fs/2;
Y=X;
%y=[];
n=length(X);
%t=[];
Y=[Y conj(Y(n-1:-1:2))];
n=length(Y);
t=[0:n-1].*(1/fs);
y=n*ifft(Y); |
评分
-
1
查看全部评分
-
|