after applying a filter -i design- to a real signal, it returns complex signal after ifft
1 次查看(过去 30 天)
显示 更早的评论
[x,fs]=audioread('some.wav');
n=length(x);
t = ((0:n-1)*(fs/n));
y=fft(x);
f = ((0:n-1)*(fs/n));
y0 = fftshift(y);
f0 = ((-n/2:n/2-1)*(fs/n));
noise = find(abs(y0) == max(abs(y0)));
noiseW= [2*pi*f0(noise(1)) 2*pi*f0(noise(2))];
z1=exp(1i*noiseW(1));
z2=exp(1i*noiseW(2));
z=exp(1i*2*pi*f0);
H=(1-z1*(z.^-1)).*(1-z2*(z.^-1));
out0=y0.*(H.');
out=ifftshift(out0);
signal=ifft(out);
audiowrite('output.wav',final,fs);
2 个评论
Daniel Pollard
2021-5-14
I'm not sure I understand the problem. The FFT (and the IFFT) produce complex outputs by their definition. Could you give some more details? What were you expecting to happen?
采纳的回答
Paul Hoffrichter
2021-5-14
Your imaginary part only is non-zero due to the usual floating point roundoffs and truncations. Fix this using round:
signal=ifft(out);
signalRound = round(signal, 10);
0 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Multirate Signal Processing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!