제로 패딩 홀수 길이 FFT 일 때 실제 벨 울림


13

그래서 신호의 주파수 응답을 0으로 채우고 역 변환하는 주파수 영역 보간기를 작성하려고합니다. 처리해야 할 두 가지 경우가 있습니다.

  1. 짝수 길이 응답 bin이 모호하므로 분할해야 합니다. 따라서 스펙트럼의 음수 부분을 복사하고 그 사이 에 0을 추가 합니다.Fs/2n*(interp-1)-1
  2. 홀수 길이 응답 bin이 없으므로 양수 / 음수 주파수를 분리 하고 그 사이에 0을 삽입하십시오 .Fs/2n*(interp-1)

제로 패딩을 수행하는 코드는 여기에서 볼 수 있습니다

// Copy negative frequency components to end of buffer and zero out middle
//  inp    - input buffer of complex floats
//    n    - transform size
//  interp - interpolation amount
void zero_pad_freq(cfloat_t *inp, size_t n, size_t interp) {
    if ((n % 2) == 0) {
        memmove(inp + n*interp - n/2, inp + n/2,     n/2*sizeof(cfloat_t));
        memset (inp + n/2 + 1, 0,       (n*(interp-1)-1)*sizeof(cfloat_t)); // Duplicate Fs/2 so we need one less zero

        inp[n/2]          /= 2.0;
        inp[n*interp-n/2] /= 2.0;
    } else {
        memmove(inp + n*interp - n/2, inp + (n+1)/2, n/2*sizeof(cfloat_t));
        memset (inp + (n+1)/2, 0,         (n*(interp-1))*sizeof(cfloat_t));
    }
}

첫 번째 경우는 잘 작동하고 처프 신호로 테스트하고 있으며 보간하는 것은 약간의 숫자 노이즈가 있지만 FFT를 통해 라운드 트립되므로 수행 할 수있는 작업 (처음 정도) 신호 쇼) :50μs

문제는 홀수 길이 변환과 관련이 있습니다. 실제 샘플에서만 매우 심한 과도 응답을 얻습니다 ( 다시 , 실제).50μs

가상 채널에는 작은 잔물결이 있지만 거의 나쁘지는 않습니다.

내가 망친 것 같아 홀수 경우 빈,하지만이없는 나는 매우 의아해하고있어, 그래서 빈은. 누구든지 생각이 있습니까?Fs/2Fs/2


줄거리가 줄어든 줄거리는보기가 어렵습니다.
Jason R

@Jason 죄송합니다. 링크되어 있다고 생각했습니다. 이제 HTML을 조정하여 클릭하면 전체 크기로 볼 수 있습니다.
gct

3
입력으로 사용중인 코드 나 예제 파일이 있습니까? 명심해야 할 것은 DFT에서 가정 한 경계 조건입니다. 특히, 관심 신호가 주기적이라는 고유의 가정이 있습니다. 따라서 홀수 길이 입력의 첫 번째 샘플과 마지막 샘플 사이에 불연속성이 있으면 관찰 한 것과 같이 울리는 것을 볼 수 있습니다. 짝수 길이의 샘플이 처음부터 끝까지 더 연속적 일 수 있으므로이 현상이 나타나지 않습니다.
Jason R

다른 사람이 쉽게 소화 할 수있는 형식의 데이터는 없지만 당신이 옳다고 생각합니다. 방금 작동하여 코드를 다시 컴파일 / 테스트 입력 (1 초 동안 10Hz-100Hz 처프)을 재생성하고 코드를 다시 실행하여 울리지 않았습니다. 귀하의 의견을보고 빈도를 10-100.314로 변경했으며 이제 짝수 및 홀수 변환 모두에서 울리는 것을 봅니다.
gct

1
데이터에 윈도우 함수를 적용 해 보셨습니까? 일반적으로 울림이 줄어 듭니다.
MarkSci

답변:


1

고주파수 빈을 제로화함으로써 신호의 스펙트럼에 직사각형 함수를 효과적으로 곱했습니다. 주파수의 곱셈은 시간의 컨볼 루션이며 rect의 푸리에 쌍은 sinc입니다. 그래서 당신이 실제로 한 것은 시간 도메인 신호를 징크의 길이에 반비례하는 싱크의 메인 로브의 너비를 가진 싱크와 컨볼 루션했습니다. 이것이 Parks-McClellan 과 같은 수많은 필터 설계 기술이 필터 의 주파수 응답에 즉각적인 변화가 없도록 "전환 영역"또는 "전환"대역이라고하는 이유입니다. 이러한 필터 설계 기법은 중요한 "이상적인"필터가 시간 영역에서 바람직하지 않은 영향을 미치기 때문에 중요합니다.


0

주파수 영역의 단계는 시간 영역에서 잔물결로 표시됩니다. 창 기능 (예 : 해밍 창)으로 주파수 데이터를 부드럽게하면 잔물결이 크게 줄어 듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.