Làm thế nào để dịch chuyển tín hiệu theo một phần của mẫu?


22

Các định lý sự thay đổi nói :

Nhân với pha tuyến tính e 2 π ixn đối với một số nguyênmtương ứng với mộtdịch chuyển tròncủa đầu ra:được thay thế bằng, trong đó chỉ số được hiểu là moduloN(nghĩa là theo định kỳ).e2πtôiNnmXkXkXk-m

Ok, nó hoạt động tốt:

plot a

tín hiệu 9 mẫu tùy ý

N = 9
k = [0, 1, 2, 3, 4, 5, 6, 7, 8]
plot ifft(fft(a)*exp(-1j*2*pi*3*k/N))

tín hiệu thay đổi bởi 3 mẫu trong miền tần số

Nó thay đổi bởi 3 mẫu, như tôi mong đợi.

Tôi nghĩ bạn cũng có thể làm điều này để thay đổi theo phân số của một mẫu, nhưng khi tôi thử nó, tín hiệu của tôi trở nên tưởng tượng và hoàn toàn không giống như ban đầu:

plot real(ifft(fft(a)*exp(-1j*2*pi*3.5*k/N)))
plot imag(ifft(fft(a)*exp(-1j*2*pi*3.5*k/N))), 'b--'

tín hiệu sau khi nhân với 3,5 số mũ phức tạp

Tôi không mong đợi điều này cả. Điều này có tương đương với việc tạo ra một xung lực thực sự đã được thay đổi bởi 3,5 mẫu không? Vì vậy, sự thúc đẩy vẫn nên là thật, và kết quả vẫn nên là thật? Và nó nên có ít nhiều hình dạng giống như bản gốc, nhưng chân thành nội suy?


Đây là một đệ trình trao đổi tệp Matlab tính toán điều chế chính xác cho các tín hiệu thực / phức có độ dài chẵn / lẻ và độ trễ phân đoạn: mathworks.com/matlabcentral/fileexchange/7886-fshift
Ahmed Fasih

Câu trả lời:


14

Nếu bạn muốn đầu ra thay đổi của IFFT là thực, thì xoắn / xoay pha trong miền tần số phải được đối xứng liên hợp, cũng như dữ liệu. Điều này có thể được thực hiện bằng cách thêm một phần bù thích hợp vào số mũ của exp () phức tạp của bạn, cho độ dốc pha đã cho, sao cho pha của nửa trên (hoặc âm), modulo 2 Pi, phản chiếu nửa dưới trong khẩu độ FFT . Hàm dịch chuyển theo hàm mũ phức tạp cũng có thể được tạo đối xứng liên hợp bằng cách lập chỉ mục từ -N / 2 đến N / 2 với pha 0 tại chỉ số 0.

Điều đó chỉ xảy ra khi phần bù thích hợp cho xoắn hoặc xoắn pha, hoàn thành bội số nguyên chính xác của 2 phép quay Pi trong khẩu độ, được đối xứng trong khẩu độ, bằng không.

Với một vectơ xoắn pha đối xứng liên hợp, kết quả sẽ kết thúc dưới dạng nội suy hình tròn đối với các dịch chuyển không nguyên.

Xây dựng bởi OP:

Sự lựa chọn của bạn về k = [0, 1, 2, 3, 4, 5, 6, 7, 8] đang tạo ra một hàm mũ phức tạp không đối xứng:

Nỗ lực dịch chuyển mẫu 0,5 phức tạp không đối xứng, với phần ảo là đường đứt nét

Nếu bạn sử dụng k = [0, 1, 2, 3, 4, -4, -3, -2, -1], bạn sẽ nhận được hàm mũ phức đối xứng Hermite:

plot(fftshift(exp(-1j * 2*pi * 0.5/N * k)))

Hàm mũ phức tạp đối xứng cho phép dịch chuyển 0,5 mẫu, với phần ảo là đường đứt nét

và bây giờ khi bạn sử dụng cùng một công thức hàm mũ để thay đổi 0,5 hoặc 3,5 mẫu, bạn sẽ nhận được kết quả thực sự:

plot ifft(fft(a)*exp(-1j * 2 * pi * 0.5/N *k))
plot ifft(fft(a)*exp(-1j * 2 * pi * 3.5/N *k))

thay đổi 0,5 và 3,5 mẫu, với bản gốc là đường chấm chấm


Aha! Thay vì k = [0, 1, 2, 3, 4], tôi nên sử dụngk = [0, 1, 2, -2, -1]
endolith

@endolith / hotpaw2, Nói cách khác, đó là tất cả về việc lập chỉ mục của các mẫu miền thời gian?
TheGrapeBeyond

1
Đối xứng quanh bin 0 cũng sẽ cung cấp tính đối xứng quanh N / 2, ngay cả khi N / 2 không phải là số nguyên.
hotpaw2

1
Tôi đã tìm thấy một hàm áp dụng điều chế chính xác trên Matlab File Exchange: mathworks.com/matlabcentral/fileexchange/7886-fshift !
Ahmed Fasih

1
điều này có giữ được các tín hiệu phức tạp không?
Leo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.