[未答复] matlab对信号进行时域和频域的积分,频域出来的结果不对,能否帮忙看看是哪里出了问题?

[复制链接]
泠风 发表于 5 天前
按理来说,cos(t)函数的频域和时域积分出来的曲线应该是完全相同的,但是现在积分出来频域是不对的,不知道是什么原因,请各位大佬帮忙看看,谢谢了
fid = fopen('cos.txt','r');
x = fscanf(fid,'%f',[1,inf]);
status = fclose(fid);
sf = 100;            %采样频率
it = 1;               %积分次数
sx = '时间';          %横坐标标注
sy1 = 'y1';           %纵坐标标注
sy2 = 'y2';           %纵坐标标注
n=length(x);                    %待分析数组长度
t=0:1/sf:(n-1)/sf;              %建立时间向量
nfft=2^nextpow2(n);             %大于并接近n的2的幂次方的FFT长度
y=fft(x,nfft);                  %FFT变换
df=sf/nfft;                     %计算频率间隔(Hz/s)
dw=2*pi*df;                     %圆频率间隔(rad/s)
w1=0:dw:2*pi*(0.5*sf-df);       %正离散圆频率向量
w2=-2*pi*(0.5*sf-df):dw:-dw;    %负离散圆频率向量
w=[w1,w2];                      %连接w1,w2
w=w.^it;                        %以积分次数为指数,建立圆频率变量向量
a=zeros(1,nfft);                %进行积分的频域变换
a(2:nfft-1)=y(2:nfft-1)./w(2:nfft-1);
if it==2
    y=-a;                       %进行二次积分的相位变换
else
    y = imag(a) - 1i*real(a);   %进行一次积分的相位变换
end
a=zeros(1,nfft);                  
a(1:nfft)=y(1:nfft);              %消除指定正频带外的频率成分
y=ifft(a,nfft);                 %IFFT变换
y=real(y(1:n));               %取逆变换的实部n个元素并乘以单位变换系数为积分结果
vn1 = cumtrapz(t, x); %梯形积分法
vn = vn1 - repmat(mean(vn1), size(vn1,1), 1);
xn1 = cumtrapz(t, vn);
xn =xn1 - repmat(mean(xn1), size(xn1,1), 1);
figure
plot(t,x);
xlabel('时间(s)');
ylabel('加速度(g)');
legend('cos(x))');
grid on;
figure
plot(t,y);
hold on
xlabel('时间(s)');
if it==2
    ylabel('二次积分');
plot(t,xn,'r');
legend('频域','时域');
else
    ylabel('一次积分)');
plot(t,vn,'r');
legend('频域','时域');
end
grid on

您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
热门教程
站长推荐
快速回复 返回顶部 返回列表