输入和输入从时域到频率的系数,将它们加在一起并返回到时域

时间:2015-10-25 19:35:25

标签: matlab signal-processing

我目前正在攻读计算机科学,我有一个任务要解决我的实验项目。我必须传输输入的信号和放大器从时域到频域的系数,将它们加在一起并转移回时域。我的结果必须匹配过滤器功能输出。但是我似乎无法在这里找到错误的地方。当我通过conj功能添加两个频率时,我觉得它有些不对劲。不幸的是,我的老师和实验室主管都没有兴趣实际教授任何东西,所以我必须自己找到答案。希望你们能帮忙。

clc
clear
B = [0.2];
A = [1,-0.5];
xt = ones(1,20);
xt = padarray(xt,[0,100])
A1 = 1;
A2 = 1;
f1 = 1;
f2 = 25;
fs = 1000;

xd = fft(xt);
wd = freqz(B,A,length(xt));
y = filter(B,A,xt);
yd = conj((wd)').*xd;

yt = real(ifft(yd));

subplot(4,2,1);
plot(xt)
title('Input signal')

subplot(4,2,2);
plot(abs(xd))
title('Input in frequency domain')

subplot(4,2,4);
plot(abs(wd))
title('Coefficients in frequency domain')

subplot(4,2,7);
plot(y)
title('Output using FILTER function')

subplot(4,2,6);
plot(yd)
title('Adding input with coefficients in frequency domain')

subplot(4,2,8);
plot(yt)
title('Back to time domain using IFFT')

1 个答案:

答案 0 :(得分:1)

matlab函数freqz()可能有点误导。 " FFT"系数的域需要以不同的方式生成。用以下代码替换你的东西,它应该给你你想要的东西:

xt = xt.';
xd = fft(xt);
wd = freqz(B,A,length(xt),'whole');
y = filter(B,A,xt);
yd = wd.*xd;
yt = ifft(yd);

figure
plot(abs(xd))
hold on
plot(abs(wd))

figure
plot(y,'.k','markersize',20)
hold on
plot(yt,'k')
hold off

另外,关于具有复矢量的'运算符的注释:除非使用.'运算符(例如x = x.'),否则它会在采用复共轭时转置矢量,即(1+1i).' = (1+1i) (1+1i)' = (1-1i)