Обратная функция rcosflt
Модератор: Admin
Обратная функция rcosflt
Подскажите, как победить? Я отфильтровал ФМ2 сигнал функцией приподнятого косинуса, а теперь мне надо сигнал на выходе пропустить через какую-то функцию, которая мне восстановит его до изначального ФМ2. Я не знаю, как это сделать, подскажите, пожалуйста
Re: Обратная функция rcosflt
а теперь мне надо сигнал на выходе пропустить через какую-то функцию, которая мне восстановит его до изначального ФМ2
Вы то ли не понимаете поставленную задачу, то ли очень криво ее формулируете. Изначальный сигнал "восстановить" нельзя, да и не нужно. Но можно, взяв отсчеты на выходе фильтра в нужные моменты времени, получить исходные точки созвездия ФМ-2.
С уважением
Александр Сергиенко
Александр Сергиенко
Re: Обратная функция rcosflt
Как мне получить исходные точки созвездия ФМ-2?
Re: Обратная функция rcosflt
Как взять отсчеты на выходе фильтра в нужные моменты времени и получить исходные точки созвездия ФМ-2?
Re: Обратная функция rcosflt
Не видя ваш код, сложно советовать что-то конкретное.
С уважением
Александр Сергиенко
Александр Сергиенко
Re: Обратная функция rcosflt
clear all;
a = [1 0 1 0 0];
f = 10^6;
T = 1/f;
dots = 100;
fd = dots*f;
td = 1/fd;
t = T/(dots*length(a)):T/(dots*length(a)):T;
k = 1;
j = 1;
z = 0;
for j = 1:length(a)
for k = 1:dots
z = z+1;
a_dots(z) = a(j);
end
end
for k = 1:length(a_dots)
signal(k) = sin(2*pi*f*td*k);
if a_dots(k) == 1
FM2(k) = sin(2*pi*f*td*k);
else
FM2(k) = sin(2*pi*f*td*k + pi);
end
end
figure(1); % Указываю на какой фигуре всё это выведу
subplot (3,1,1);
plot(t,a_dots, 'linew', 1.5); % 'linew', 1.5 - толщина линии
ylim ( [ -0.5 1.5] );
title('Кодовая последовательность');
xlabel('Время, c');
ylabel('Напряжение, В');
grid on;
subplot(3,1,2);
plot(t,signal, 'linew', 1.5);
ylim ( [ -1.5 1.5] );
title('Несущее колебание');
xlabel('Время, c');
ylabel('Напряжение, В');
grid on;
subplot(3,1,3);
plot(t,FM2, 'red', 'linew', 1.5); % 'red' - цвет
ylim ( [ -1.5 1.5] );
title('ФМ2');
xlabel('Время, c');
ylabel('Напряжение, В');
grid on;
delay = 100; % Параметр для фильтра
n = 5; % Коэф повышения частоты дискр: n = Fs/Fd
fs = n*fd;
rf = 1; % rf - коэф. скругления АЧХ фильтра (Rollof Ffactor)
order = 1+2*delay*fs/fd; % Порядок фильтра
delay = 2*(order-1)*fd/fs;
FM2_out = rcosflt(FM2,fd,fs,'normal',rf,delay);
% %y = rcosflt(x,Fd,Fs,'normal',r,delay);
% % x - входная последовательность
% % Fd - частота дискр ВХОДНОГО сигнала
% % Fs - частота выходного сигнала
% % Порядок фильтра (order) равен 1+2*delay*Fs/Fd => delay = 2*(order-1)*Fd/Fs
% % Коэф повышения частоты дискр: n = Fs/Fd
% % r => rf - коэф. скругления АЧХ фильтра (Rollof Ffactor)
figure(2);
subplot(2,2,1);
plot(t,FM2, 'red', 'linew', 1.5);
ylim ( [ -1.5 1.5] );
title('ФМ2 (Сигнал на входе фильтра)');
xlabel('Время, c');
ylabel('Напряжение, В');
grid on;
subplot(2,2,3);
Spectr_FM2 = fft(FM2);
FM2_shift = fftshift(Spectr_FM2);
F_FM2 = linspace(-fd/2,fd/2,length(Spectr_FM2));
FM2_positive = Spectr_FM2([1:length(Spectr_FM2)/2]);
F_FM2_positive = linspace(0,fd/2,length(FM2_positive));
area(F_FM2_positive,abs(FM2_positive));
xlim([0 2e6]);
grid on;
title ('Спектр сигнала на входе фильтра');
subplot(2,2,2);
t = linspace(td,T,length(FM2_out));
plot(t,FM2_out, 'linew', 1.5);
ylim ( [ -1.5 1.5] );
title('Сигнал на выходе фильтра');
xlabel('Время, c');
ylabel('Напряжение, В');
grid on;
subplot(2,2,4);
Spectr_FM2_out = fft(FM2_out);
FM2_out_shift = fftshift(Spectr_FM2_out);
F_FM2_out = linspace(-fd/2,fd/2,length(Spectr_FM2_out));
FM2_out_positive = Spectr_FM2_out([1:length(Spectr_FM2_out)/2]);
F_FM2_out_positive = linspace(0,fd/2,length(FM2_out_positive));
area(F_FM2_out_positive,abs(FM2_out_positive));
xlim([0 2e6]);
grid on;
title ('Спектр сигнала на выходе фильтра');
a = [1 0 1 0 0];
f = 10^6;
T = 1/f;
dots = 100;
fd = dots*f;
td = 1/fd;
t = T/(dots*length(a)):T/(dots*length(a)):T;
k = 1;
j = 1;
z = 0;
for j = 1:length(a)
for k = 1:dots
z = z+1;
a_dots(z) = a(j);
end
end
for k = 1:length(a_dots)
signal(k) = sin(2*pi*f*td*k);
if a_dots(k) == 1
FM2(k) = sin(2*pi*f*td*k);
else
FM2(k) = sin(2*pi*f*td*k + pi);
end
end
figure(1); % Указываю на какой фигуре всё это выведу
subplot (3,1,1);
plot(t,a_dots, 'linew', 1.5); % 'linew', 1.5 - толщина линии
ylim ( [ -0.5 1.5] );
title('Кодовая последовательность');
xlabel('Время, c');
ylabel('Напряжение, В');
grid on;
subplot(3,1,2);
plot(t,signal, 'linew', 1.5);
ylim ( [ -1.5 1.5] );
title('Несущее колебание');
xlabel('Время, c');
ylabel('Напряжение, В');
grid on;
subplot(3,1,3);
plot(t,FM2, 'red', 'linew', 1.5); % 'red' - цвет
ylim ( [ -1.5 1.5] );
title('ФМ2');
xlabel('Время, c');
ylabel('Напряжение, В');
grid on;
delay = 100; % Параметр для фильтра
n = 5; % Коэф повышения частоты дискр: n = Fs/Fd
fs = n*fd;
rf = 1; % rf - коэф. скругления АЧХ фильтра (Rollof Ffactor)
order = 1+2*delay*fs/fd; % Порядок фильтра
delay = 2*(order-1)*fd/fs;
FM2_out = rcosflt(FM2,fd,fs,'normal',rf,delay);
% %y = rcosflt(x,Fd,Fs,'normal',r,delay);
% % x - входная последовательность
% % Fd - частота дискр ВХОДНОГО сигнала
% % Fs - частота выходного сигнала
% % Порядок фильтра (order) равен 1+2*delay*Fs/Fd => delay = 2*(order-1)*Fd/Fs
% % Коэф повышения частоты дискр: n = Fs/Fd
% % r => rf - коэф. скругления АЧХ фильтра (Rollof Ffactor)
figure(2);
subplot(2,2,1);
plot(t,FM2, 'red', 'linew', 1.5);
ylim ( [ -1.5 1.5] );
title('ФМ2 (Сигнал на входе фильтра)');
xlabel('Время, c');
ylabel('Напряжение, В');
grid on;
subplot(2,2,3);
Spectr_FM2 = fft(FM2);
FM2_shift = fftshift(Spectr_FM2);
F_FM2 = linspace(-fd/2,fd/2,length(Spectr_FM2));
FM2_positive = Spectr_FM2([1:length(Spectr_FM2)/2]);
F_FM2_positive = linspace(0,fd/2,length(FM2_positive));
area(F_FM2_positive,abs(FM2_positive));
xlim([0 2e6]);
grid on;
title ('Спектр сигнала на входе фильтра');
subplot(2,2,2);
t = linspace(td,T,length(FM2_out));
plot(t,FM2_out, 'linew', 1.5);
ylim ( [ -1.5 1.5] );
title('Сигнал на выходе фильтра');
xlabel('Время, c');
ylabel('Напряжение, В');
grid on;
subplot(2,2,4);
Spectr_FM2_out = fft(FM2_out);
FM2_out_shift = fftshift(Spectr_FM2_out);
F_FM2_out = linspace(-fd/2,fd/2,length(Spectr_FM2_out));
FM2_out_positive = Spectr_FM2_out([1:length(Spectr_FM2_out)/2]);
F_FM2_out_positive = linspace(0,fd/2,length(FM2_out_positive));
area(F_FM2_out_positive,abs(FM2_out_positive));
xlim([0 2e6]);
grid on;
title ('Спектр сигнала на выходе фильтра');
Re: Обратная функция rcosflt
У вас в коде формируется сигнал ФМ-2 с прямоугольными сигнальными посылками, для чего вы вообще пытаетесь использовать функцию rcosflt?
С уважением
Александр Сергиенко
Александр Сергиенко
Re: Обратная функция rcosflt
У меня есть задание. Нужно отфильтровать, мною сформированный сигнал ФМ-2, при помощи фильтра с характеристикой корень из приподнятого косинуса, а потом сигнал на выходе восстановить. Как это сделать, я не знаю. Делаю интуитивно, поэтому код может показаться странным или даже неправильным.
Текст задания следующий:
в) функцию, выполняющую формирование спектра сигнала при помощи фильтра с характеристикой корень из приподнятого косинуса
function [ out ] = filter_tx ( in, order, n, rf ),
где out – комплексный выходной сигнал формирующего фильтра;
in – комплексный входной сигнал формирующего фильтра;
order – порядок фильтра;
n – коэффициент повышения частоты дискретизации;
rf – коэффициент скругления характеристики фильтра;
г) функцию, выполняющую согласованную фильтрацию сигнала при помощи фильтра с характеристикой корень из приподнятого косинуса
function [ out ] = filter_rx ( in, order, n, rf ),
где out – комплексный выходной сигнал согласованного фильтра;
in – комплексный входной сигнал согласованного фильтра;
order – порядок фильтра;
n – коэффициент понижения частоты дискретизации;
rf – коэффициент скругления характеристики фильтра.
Текст задания следующий:
в) функцию, выполняющую формирование спектра сигнала при помощи фильтра с характеристикой корень из приподнятого косинуса
function [ out ] = filter_tx ( in, order, n, rf ),
где out – комплексный выходной сигнал формирующего фильтра;
in – комплексный входной сигнал формирующего фильтра;
order – порядок фильтра;
n – коэффициент повышения частоты дискретизации;
rf – коэффициент скругления характеристики фильтра;
г) функцию, выполняющую согласованную фильтрацию сигнала при помощи фильтра с характеристикой корень из приподнятого косинуса
function [ out ] = filter_rx ( in, order, n, rf ),
где out – комплексный выходной сигнал согласованного фильтра;
in – комплексный входной сигнал согласованного фильтра;
order – порядок фильтра;
n – коэффициент понижения частоты дискретизации;
rf – коэффициент скругления характеристики фильтра.
Re: Обратная функция rcosflt
Ну так вы даже пункт в) не выполнили, поскольку сформировали сигнал ФМ-2 с ПРЯМОУГОЛЬНЫМИ посылками, а не rcos-sqrt, как было велено. Зато сделали несущее колебание, чего в приведенной вами части задания не видно. И, кстати, что означают такие формулировки задания - что вы должны написать ФУНКЦИИ filter_tx и filter_rx?
Если для начала говорить про ваш имеющийся код и про его часть, относящуюся к передатчику, то функция rcosflt должна там стоять вместо первых циклов по j и k. Как-то вот так:
Что касается приемной части, разберитесь сначала, нужно ли вам на самом деле формировать несущее колебание, или достаточно низкочастотного сигнала.
Если для начала говорить про ваш имеющийся код и про его часть, относящуюся к передатчику, то функция rcosflt должна там стоять вместо первых циклов по j и k. Как-то вот так:
Код: Выделить всё
rf = 1;
delay = 4;
a_dots = rcosflt(a, f, fd, 'sqrt', rf, delay);
Что касается приемной части, разберитесь сначала, нужно ли вам на самом деле формировать несущее колебание, или достаточно низкочастотного сигнала.
С уважением
Александр Сергиенко
Александр Сергиенко
Re: Обратная функция rcosflt
1. Мне непонятно, что значит rcos-sqrt посылки
2. Написать функцию значит создать скрипт с названием filter_tx, а код начать как-то так:
Здесь нет пояснений к условиям, есть просто текст задания, которое надо выполнить. Сформировать спектра сигнала при помощи фильтра с характеристикой корень из приподнятого косинуса, я понял, так, как написал код.
3. Если мне в функцию rcosflt вставлять массив a, то ничего похожего на выходной сигнал я не получу, а - это просто кодовая последовательность.
На данном этапе мне неясно, где я допустил ошибку и как мне выполнить задание правильно.
2. Написать функцию значит создать скрипт с названием filter_tx, а код начать как-то так:
Код: Выделить всё
function out = filter_tx(n, order, n, rf)
Здесь нет пояснений к условиям, есть просто текст задания, которое надо выполнить. Сформировать спектра сигнала при помощи фильтра с характеристикой корень из приподнятого косинуса, я понял, так, как написал код.
3. Если мне в функцию rcosflt вставлять массив a, то ничего похожего на выходной сигнал я не получу, а - это просто кодовая последовательность.
На данном этапе мне неясно, где я допустил ошибку и как мне выполнить задание правильно.
Re: Обратная функция rcosflt
Мне непонятно, что значит rcos-sqrt посылки
Вы писали ранее: "...при помощи фильтра с характеристикой корень из приподнятого косинуса" По-английски это square root raised cosine.
Если мне в функцию rcosflt вставлять массив a, то ничего похожего на выходной сигнал я не получу, а - это просто кодовая последовательность.
А вы попробуйте. Ну и справку о том, что делает функция rcosflt тоже полезно почитать.
С уважением
Александр Сергиенко
Александр Сергиенко
Re: Обратная функция rcosflt
Так меня в задании просят сформировать спектр при помощи этого фильтра.
Я вставил последовательность а в эту функцию и получил что-то странное: около 5 тысяч отсчетов, в середине 2 сигнала, напоминающие ИХ фильтра Найквиста.
Я вставил последовательность а в эту функцию и получил что-то странное: около 5 тысяч отсчетов, в середине 2 сигнала, напоминающие ИХ фильтра Найквиста.
Re: Обратная функция rcosflt
Прошу прощения, привык, что буквой a модуляционные символы обозначаются, а не биты. Их нужно в двуполярные значения преобразовать.
Как вы получаете пять тысяч отсчетов, я не знаю. У меня (при таком использовании функции, как я вам предлагаю) получается 1300.
rf = 1;
delay = 4;
a_dots = rcosflt(2*a-1, f, fd, 'sqrt', rf, delay);
Как вы получаете пять тысяч отсчетов, я не знаю. У меня (при таком использовании функции, как я вам предлагаю) получается 1300.
С уважением
Александр Сергиенко
Александр Сергиенко
Re: Обратная функция rcosflt
так, у меня вышло сделать сигнал, элементы которого похожи на корень из приподнятого косинуса, спасибо.
учтем, что это решение пункта в, но как мне теперь выполнить согласованную фильтрацию этого сигнала при помощи фильтра с характеристикой корень из приподнятого косинуса?
учтем, что это решение пункта в, но как мне теперь выполнить согласованную фильтрацию этого сигнала при помощи фильтра с характеристикой корень из приподнятого косинуса?
Re: Обратная функция rcosflt
но как мне теперь выполнить согласованную фильтрацию этого сигнала
Ну как... пропустить этот сигнал через соответствующий фильтр. Если хотите, можете использовать ту же функцию rcosflt, добавив ключ 'Fs', чтобы она частоту дискретизации не повышала.
Код: Выделить всё
s_rx = rcosflt(a_dots, f, fd, 'sqrt/Fs', rf, delay);
С уважением
Александр Сергиенко
Александр Сергиенко