В этом примере показано, как использовать преобразование Гильберта, чтобы выполнить одно боковую полосу (SSB) амплитудная модуляция (AM) сигнала. Сигналы Single-sideband AM имеют меньше полосы пропускания, чем нормальные сигналы AM.
Сгенерируйте 512 выборок симулированного широкополосного сигнала с помощью sinc
функция. Задайте полосу пропускания рад/отсчет.
N = 512; n = 0:N-1; bw = 1/4; x = sinc((n-N/2)*bw);
Добавьте белый Гауссов шум, таким образом, что отношение сигнал-шум составляет 20 дБ. Сбросьте генератор случайных чисел для восстанавливаемых результатов. Используйте periodogram
функционируйте, чтобы оценить спектральную плотность мощности (PSD) сигнала.
rng default
SNR = 20;
noise = randn(size(x))*std(x)/db2mag(SNR);
x = x + noise;
periodogram(x)
Амплитуда модулирует сигнал с помощью косинуса несущей частоты . Умножьтесь так, чтобы степень модулируемого сигнала равнялась степени исходного сигнала. Оцените PSD.
wc = pi/2;
x1 = x.*cos(wc*n)*sqrt(2);
periodogram(x1)
legend('Modulated')
Амплитудная модуляция SSB уменьшает полосу пропускания сигнала наполовину. Чтобы выполнить амплитудную модуляцию SSB, необходимо сначала вычислить преобразование Гильберта сигнала. Затем амплитуда модулируют сигнал с помощью синуса с той же несущей частотой, , как прежде, и добавляют его в предыдущий сигнал.
Спроектируйте Гильбертов трансформатор с помощью designfilt
функция. Задайте порядка фильтра 64 и ширину перехода 0,1. Отфильтруйте сигнал.
Hhilbert = designfilt('hilbertfir','FilterOrder',64, ... 'TransitionWidth',0.1); xh = filter(Hhilbert,x);
Используйте grpdelay
функция, чтобы определить задержку, gd
, введенный фильтром. Компенсируйте задержку путем отбрасывания первого gd
точки отфильтрованного сигнала и дополняющий нулями в конце. Амплитуда модулирует результат и добавляет его в оригинал. Сравните PSDs.
gd = mean(grpdelay(Hhilbert)); xh = xh(gd+1:end); eh = zeros(size(x)); eh(1:length(xh)) = xh; x2 = eh.*sin(wc*n)*sqrt(2); y = x1+x2; periodogram([x1;y]') legend('Modulated','SSB')
Downconvert сигнал и оценка PSD.
ym = y.*cos(wc*n)*sqrt(2);
periodogram(ym)
legend('Downconverted')
Фильтр lowpass модулируемый сигнал восстановить оригинал. Задайте КИХ 64-го порядка фильтр lowpass с частотой среза . Компенсируйте задержку, введенную фильтром.
d = designfilt('lowpassfir','FilterOrder',64, ... 'CutoffFrequency',0.5); dem = filter(d,ym); gd = mean(grpdelay(d)); dem = dem(gd+1:end); dm = zeros(size(x)); dm(1:length(dem)) = dem;
Оцените PSD отфильтрованного сигнала и сравните его с тем из оригинала.
periodogram([x;dm]') legend('Original','Recovered')
Используйте snr
функция, чтобы сравнить отношения сигнал-шум двух сигналов. Постройте два сигнала во временном интервале.
snrOrig = snr(x,noise)
snrOrig = 20.0259
snrRecv = snr(dm,noise)
snrRecv = 20.1373
plot(n,[x;dm]') legend('Original','Recovered') axis tight
Ссылки
Маркируйте, Джон Р., Майкл М. Дэниел и Эндрю К. Зингер. Компьютерные исследования в сигналах и системах Используя MATLAB. 2-й выпуск. Верхний Сэддл-Ривер, NJ: Prentice Hall, 2002.
designfilt
| periodogram
| snr