Veja a operação simples de filtragem de passagem de banda no domínio da frequência abaixo. . .
NFFT = 128;
x = randn(NFFT,1);
H = zeros(NFFT,1);
H(10:20) = 1;
y = ifft(H.*fft(x), 'symmetric');
Isso fornece uma saída real, porque eu estou usando o sinalizador simétrico conjugado para a operação ifft.
Eu quero uma função que retorne a versão simétrica conjugada de H, portanto não preciso confiar na opção simétrica integrada no ifft do Matlab. NFFT pode ser qualquer número inteiro positivo. Isso poderia ser chamado de algo assim. .
H(10:20) = 1;
H = MakeConjSym(H);
Respostas:
Meios simétricos conjugados
ou seja, o sinal da parte imaginária é oposto quandox < 0
A FFT de um sinal real é conjugada simétrica. Metade do espectro é de frequências positivas e a outra metade é negativa. Os coeficientes negativos são conjugados do positivo.
Portanto, se você filtrar, seu envelope deverá realizar as frequências positivas e as correspondentes negativas, para que os bits imaginários sejam cancelados.
No seu exemplo, H faz apenas metade. É por isso que a saída contém bits imaginários. O que você quer é
fonte
Você só precisa se certificar de que
e essaH0 0 é com valor real.
fonte
Usando as outras respostas, escrevi uma função MATLAB para executar o que você precisava:
Conforme observado no código, o MATLAB Coder não suporta um IFFT simétrico, portanto uma função dedicada e codificada é necessária para fazer isso se a compilação de código for o objetivo. O código fornecido deve suportar FFTs de comprimento par e ímpar.
A formatação parece um pouco melhor na essência .
fonte