Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 9
1

Как соединить точки на графике спектра сигнала?

28.04.2020, 21:30. Просмотров 1054. Ответов 17

Доброго времени суток! При выполнении кода реализации ДПФ сигнала для построения его спектра, MATLAB выводит спектр в виде множества точек... Как их соединить ? Понимаю, что проблема в этом - каждая из точек это отдельная серия, чтобы они были соединены, нужно поместить все точки в один массив и дать это флоту как одну серию. Помогите исправить код

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
dt = 1/(100*10*1e3);
y = length(signal);
sum1 = 0;
sum = 0;
 
for f = 1:1000:15000
    sum = 0;
    for N = 1:(y-1)
        sum1 = signal(N).*exp(-sqrt(-1)*2*pi*N*dt*f);
        sum = sum + sum1;
    end
    S(f) = abs(sum.*dt);
    
    sum = 0;
    sum1 = 0;
    
end
 
plot(20*log10(S/max(S)))
0
Миниатюры
Как соединить точки на графике спектра сигнала?  
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.04.2020, 21:30
Ответы с готовыми решениями:

Как на 2D-графике отметить точки и соединить их по две?
Добрый день. Как на 2D-графике отметить точки и соединить их по две? Точки отметить, к примеру,...

Как зависит ширина спектра сигнала от длительности импульса?
- Как изменится спектр периодического сигнала, если период повторения устремить в бесконечность? -...

Как в графике отобразить точки пересечения, а также сумму точки x+y
Как в графике отобразить точки пересечения? А также также рядом указать сумму точки x+y как в...

На графике отметить асимптоты, точки экстремума, точки перегиба, точки пересечения с осями координат
Что-то выходит не совсем правильный график. clc; clear all; close all; l = -10; r =...

17
699 / 522 / 234
Регистрация: 21.10.2012
Сообщений: 1,693
29.04.2020, 11:39 2
Lepistoch, а что из себя S представляет? Перед самым plot
1
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 9
29.04.2020, 11:46  [ТС] 3
Добавлено через 2 минуты
Цитата Сообщение от АлександрКом Посмотреть сообщение
Lepistoch, а что из себя S представляет? Перед самым plot
АлександрКом, S-посчитанный спектр сигнала.
0
699 / 522 / 234
Регистрация: 21.10.2012
Сообщений: 1,693
29.04.2020, 11:53 4
Lepistoch, эт я понимаю, в плане, массив, строка, столбец?
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 9
29.04.2020, 12:11  [ТС] 5
АлександрКом, написанный выше код можно заменить на функции FFT, спектр будет выглядеть так:

https://www.cyberforum.ru/atta... 1588151378

Мне же необходимо посчитать спектр вручную, используя DFT:

https://www.cyberforum.ru/atta... 1588151380

Насколько я понимаю это функция (массив).
0
Миниатюры
Как соединить точки на графике спектра сигнала?   Как соединить точки на графике спектра сигнала?  
699 / 522 / 234
Регистрация: 21.10.2012
Сообщений: 1,693
29.04.2020, 12:24 6
Lepistoch, просто я пытаюсь понять, почему у вас график точками выводится. Вы же его строите, посмотрите в workspace, какого размера у вас S.
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 9
29.04.2020, 12:33  [ТС] 7
АлександрКом, вот скриншот окна Workspace:
https://www.cyberforum.ru/atta... 1588152765
0
Миниатюры
Как соединить точки на графике спектра сигнала?  
699 / 522 / 234
Регистрация: 21.10.2012
Сообщений: 1,693
29.04.2020, 12:53 8
Lepistoch, хмм. И после этой команды:
Matlab M
1
plot(20*log10(S/max(S)))
у вас получается рисунок точками?
0
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 9
29.04.2020, 13:00  [ТС] 9
АлександрКом, да, так не должно быть...
Если что, прикреплю фалы проекта:
https://www.cyberforum.ru/atta... 1588154382
Версия MATLAB R2008b.
0
Вложения
Тип файла: rar D2.rar (7.6 Кб, 4 просмотров)
161 / 133 / 59
Регистрация: 16.05.2015
Сообщений: 367
29.04.2020, 13:34 10
Lepistoch, мне кажется, что вся неприятность начинается здесь:
Matlab M
1
S(f) = abs(sum.*dt);
Обратите внимание на значение идекса f. На каждом проходе, кроме первого, его значение увеличивается на 1000. Т.о. каждый раз, кроме первого, размер массива S увеличивается на 1000 элементов, и только последний отличен от нуля. Откуда вообще образовался такой диапазон:
Matlab M
1
for f = 1:1000:15000
Добавлено через 10 минут
Lepistoch, А в том виде, как вы прислали проект, у меня пустой график на выходе. После запуска модели, я брал и BPSK1 и BPSK_WN1 - без разницы.
0
699 / 522 / 234
Регистрация: 21.10.2012
Сообщений: 1,693
29.04.2020, 15:33 11
Лучший ответ Сообщение было отмечено Lepistoch как решение

Решение

Цитата Сообщение от ida2 Посмотреть сообщение
Откуда вообще образовался такой диапазон:
Видимо, ТС хотел получить значения спектра только на этих частотах.
Lepistoch, посмотрите такой вариант:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
clc
close all
signal = BPSK1';
dt = 1/(100*10*1e3);
y = length(signal);
 
k = 1;
fs = 1/dt;
F = 0: fs/y : fs/2 - fs/y;
for f = 1:1000:15000
    [~, ind] = min(abs(F - f));
    sum1 = signal * exp(- 1i * 2 * pi * ((1 : y) - 1)' * (ind - 1) / y);
    S(k) = abs(sum1 / y);
    freq(k) = F(ind);
    k = k+1;
end
S(2:end) = S(2:end) * 2;
%построение графика спектра%
plot(freq, 20*log10(S/max(S)))
%Диапазон изменения координаты x%
xlim([5000,15000]);     
%Диапазон изменения координаты y%
ylim([-80,0]);         
%Маркировка оси X%
xlabel ('Частота, Гц'); 
%Маркировка оси Y%
ylabel ('Нормированный спектр ФКМ-сигнала с БГШ');   
%Нанесение сетки%
grid on;
1
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 9
29.04.2020, 15:38  [ТС] 12
ida2, здравствуйте! Странно, что у Вас открывается пустой график... Диапазон частот был выбран из условия, что центральная частота ФКМ-сигнала равна 10кГц. Исходя из этого и сделал ограничение по частоте, т.к. если брать весь диапазон программа будет работать дольше. А какое у Вас время моделирования в Simulink ? Сравните свой и мой (выше скриншот) Workspace, массив BPSK одинаков по размеру ?

Добавлено через 2 минуты
АлександрКом, спасибо за вариант! Чуть позже отпишусь, помогло или нет...

АлександрКом, попробовал, Matlab ругается на синтаксис У Вас какая версия Matlab, у меня R2008b
0
Миниатюры
Как соединить точки на графике спектра сигнала?  
699 / 522 / 234
Регистрация: 21.10.2012
Сообщений: 1,693
29.04.2020, 16:31 13
Lepistoch, 19b.
Вместо 11 строки напишите:
Matlab M
1
ind = round(f/(fs/y))+1;
1
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 9
29.04.2020, 16:38  [ТС] 14
АлександрКом, на что может ругаться еще ? Мнимую единицу заменил на корень из -1.
Matlab M
1
2
3
4
5
??? Error using ==> mtimes
Inner matrix dimensions must agree.
 
Error in ==> forum at 12
    sum1 = signal * exp(-sqrt(-1) * 2 * pi * ((1 : y) - 1)' * (ind - 1) / y);
0
699 / 522 / 234
Регистрация: 21.10.2012
Сообщений: 1,693
29.04.2020, 16:44 15
Lepistoch, попробуйте signal' * ... (т.е. транспонировать)
1
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 9
29.04.2020, 16:50  [ТС] 16
АлександрКом, ОГРОМНОЕ ВАМ СПАСИБО!!!
Все заработало, то что нужно

Рабочий код matlab r2008b
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
clc
close all
signal = BPSK;
dt = 1/(100*10*1e3);
y = length(signal);
 
k = 1;
fs = 1/dt;
F = 0: fs/y : fs/2 - fs/y;
for f = 5000:100:15000
    ind = round(f/(fs/y))+1;
    sum1 = signal' * exp(-sqrt(-1) * 2 * pi * ((1 : y) - 1)' * (ind - 1) / y);
    S(k) = abs(sum1 / y);
    freq(k) = F(ind);
    k = k+1;
end
S(2:end) = S(2:end) * 2;
%построение графика спектра%
plot(freq, 20*log10(S/max(S)))
%Диапазон изменения координаты x%
%xlim([5000,15000]);     
%Диапазон изменения координаты y%
%ylim([-80,0]);         
%Маркировка оси X%
xlabel ('Частота, Гц'); 
%Маркировка оси Y%
ylabel ('Нормированный спектр ФКМ-сигнала с БГШ');   
%Нанесение сетки%
grid on;
Результат стараний:
0
Миниатюры
Как соединить точки на графике спектра сигнала?  
699 / 522 / 234
Регистрация: 21.10.2012
Сообщений: 1,693
29.04.2020, 17:02 17
Lepistoch, несколько моментов:
1. Легче сразу написать:
Matlab M
1
sum1 = exp(-1j * 2 * pi * ((1 : y) - 1) * (ind - 1) / y) * signal;
чтобы не транспонировать каждый раз вектор.

2. Если первая частота не 0, то стоит писать
Matlab M
1
S = S * 2;
На 2 не умножается лишь составляющая на нулевой частоте.

3.
Matlab M
1
20*log10 = mag2db()
1
0 / 0 / 0
Регистрация: 20.05.2018
Сообщений: 9
29.04.2020, 17:23  [ТС] 18
АлександрКом, спасибо еще раз за помощь и за советы!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2020, 17:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

QCustomPlot. Позиция точки на нарисованном графике, выделение областей на графике
Доброго времени суток! Необходима помощь сообщества. Для ведущейся работы назрела необходимость...

Построение спектра сигнала
Доброе время суток, ув. форумчане. Передо мной стояла задача построить спектр сигнала. Есть сам...

Восстановление сигнала из спектра
Всем привет интересует такой вопрос, допустим задан сигнал, мы находим его спектр и определяем...

Получения спектра сигнала
Вообщем есть функция сигнала (допустим синус на синус с разными частотами) и теперь мне надо...

Визуализация спектра звукового сигнала
Привет всем! Хочу реализовать визуализацию звука. Имеем звук: Нужно подсчитать количество...

Создание графика спектра сигнала
Нужна помощь в создании графика спектра сигнала и представление функции f(t).


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.