В этом примере показано, как использовать преобразование Гильберта для выполнения амплитудной модуляции сигнала в одну боковую полосу (SSB). Односторонние 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)
Амплитудно модулировать сигнал, используя косинус несущей частоты λ/2. Умножьте 2, чтобы мощность модулированного сигнала равнялась мощности исходного сигнала. Оценка 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 точки отфильтрованного сигнала и заполнение нулями в конце. Амплитуда модулирует результат и добавляет его к исходному. Сравните PSD.
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')

Преобразование сигнала с понижением частоты и оценка PSD.
ym = y.*cos(wc*n)*sqrt(2);
periodogram(ym)
legend('Downconverted')
Низкочастотный фильтр модулированного сигнала для восстановления исходного сигнала. Укажите фильтр нижних частот FIR 64-го порядка с частотой отсечения, равной . Скомпенсировать задержку, введенную фильтром.
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 отфильтрованного сигнала и сравните его с 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-е издание. Река Верхнее Седло, Нью-Джерси: Прентис Холл, 2002.
designfilt | periodogram | snr