deconvolution problem

6 ビュー (過去 30 日間)
jordi10
jordi10 2012 年 1 月 25 日
回答済み: nick 2025 年 4 月 16 日
hello! i made a circular convolution each line of a data matrix(80,2048)with a h(1,2048).till here every good.
c=[]; for i = 1:size(ofdmsignal,1);
c=[c cconv(h,ofdmsignal(i,:),length(h))]; i; end
h=(1,2048) complex numbers ofdmsignal=(80,2048) complex numbers
how i can make dconvolution to take my original signal(ofdm signal)?????
i'll be very thankfull!!!!!!

回答 (1 件)

nick
nick 2025 年 4 月 16 日
Hello jordi,
To perform deconvolution and retrieve the OFDM signal from the circularly convolved signal, you can follow these steps:
  1. Use 'fft' to transform both the convolved signal and the convolution kernel to the frequency domain
  2. Divide the FFT of the convolved signal by the FFT of the convolution kernel.
  3. Transform the result back to the time domain using the inverse FFT 'ifft'.
% Example signals
h = randn(1, 2048) + 1i * randn(1, 2048);
ofdmsignal = randn(80, 2048) + 1i * randn(80, 2048);
c = [];
for i = 1:size(ofdmsignal, 1)
c = [c; cconv(h, ofdmsignal(i, :), length(h))]; % Perform circular convolution
end
%% Deconvolution
h_fft = fft(h); % FFT of the convolution kernel
deconvolved_signal = zeros(size(ofdmsignal));
for i = 1:size(c, 1)
% FFT of the convolved signal
convolved_fft = fft(c(i, :));
deconv_fft = convolved_fft ./ h_fft;
deconvolved_signal(i, :) = ifft(deconv_fft);
end
row_index = 1;
original_signal = ofdmsignal(row_index, :);
retrieved_signal = deconvolved_signal(row_index, :);
fprintf('Original Signal (first 5 elements):\n');
Original Signal (first 5 elements):
disp(original_signal(1:5));
1.2554 + 1.5019i -0.3119 - 0.5144i 0.9016 + 1.1864i 0.5032 - 0.1373i 1.0788 + 0.6439i
fprintf('Retrieved Signal (first 5 elements):\n');
Retrieved Signal (first 5 elements):
disp(retrieved_signal(1:5));
1.2554 + 1.5019i -0.3119 - 0.5144i 0.9016 + 1.1864i 0.5032 - 0.1373i 1.0788 + 0.6439i
figure;
subplot(2, 1, 1);
plot(abs(original_signal));
title('Original Signal Magnitude');
xlabel('Sample Index');
ylabel('Magnitude');
subplot(2, 1, 2);
plot(abs(retrieved_signal));
title('Retrieved Signal Magnitude');
xlabel('Sample Index');
ylabel('Magnitude');
Kindly refer to the documentation by executing the following command in MATLAB Command Window to know more about 'fft' and 'ifft' functions:
doc fft
doc ifft

カテゴリ

Help Center および File ExchangeData Distribution Plots についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by