after applying a filter -i design- to a real signal, it returns complex signal after ifft
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hamza AKYILDIZ
el 14 de Mayo de 2021
Respondida: Paul Hoffrichter
el 14 de Mayo de 2021
[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 comentarios
Daniel Pollard
el 14 de Mayo de 2021
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?
Respuesta aceptada
Paul Hoffrichter
el 14 de Mayo de 2021
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 comentarios
Más respuestas (0)
Ver también
Categorías
Más información sobre Multirate Signal Processing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!