after applying a filter -i design- to a real signal, it returns complex signal after ifft
1 visualizzazione (ultimi 30 giorni)
Mostra commenti meno recenti
Hamza AKYILDIZ
il 14 Mag 2021
Risposto: Paul Hoffrichter
il 14 Mag 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 Commenti
Daniel Pollard
il 14 Mag 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?
Risposta accettata
Paul Hoffrichter
il 14 Mag 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 Commenti
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Multirate Signal Processing in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!