Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.75/68: Рейтинг темы: голосов - 68, средняя оценка - 4.75
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
25.11.2014, 17:59
Студворк — интернет-сервис помощи студентам
Asai92, если есть значения отсчетов, то с помощью аппроксимации. Но и в этом случае подбираются параметры известной функции.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2014, 17:59
Ответы с готовыми решениями:

Измерение скорости на эффекте Допплера
Для измерителя скорости, основанного на эффекте Доплера, необходимо подобрать микроконтроллер и его запрограммировать. Т.е. нужно, чтобы...

Рассчитать частоту и глубину звука по формулам эффекта Допплера
Добрые люди помогите мне пожалуйста! Мне надо рассчитать глубину и частоту звука, по формулам Допплера, источник и приёмник двигаться...

Найти относительное изменение частоты излучения звезды вследствие эффекта Допплера
Здравствуйте! :) Пожалуйста, помогите с решением задачи. Звезда движется в направлении наблюдателя со скоростью 240 км/с. чему равно...

140
2 / 2 / 0
Регистрация: 28.09.2014
Сообщений: 229
26.11.2014, 13:24  [ТС]
Подскажите, где ошибка и как ее исправить.
Matlab M
1
2
3
4
5
6
7
t=(0:1/Fs:1); % ?%
n=1:N+1;
k=random('unif',0,n-1);
Phi=2*pi*k;
s2=(A*cos(2*pi*Fc*t)*exp(2*pi*(Fc-Fd)*t*i+Phi));
 
x=Signal2+randn(size(t));
Выводит:??? Error using ==> plus
Matrix dimensions must agree.
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
26.11.2014, 13:52
вангую, что ошибка в строках 2 и 3. Посмотри внимательно описание ф-ции random
0
2 / 2 / 0
Регистрация: 28.09.2014
Сообщений: 229
26.11.2014, 14:55  [ТС]
Есть в матлабе функция построчной проверки кода? Чтобы понять где именно ошибка .
Выдает no warning found, но в окне выполнения:

??? Error using ==> mtimes
Inner matrix dimensions must agree.
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
26.11.2014, 17:07
можно поставть breakpoint в нужном месте, тогда программа на этой строке остановится, а далее нажимать кнопочку step (в виде листочка со стрелкой)
поищи на ютубе "debug matlab"

*ошибка скорее всего изза отсутствия точки пепед умножением
0
2 / 2 / 0
Регистрация: 28.09.2014
Сообщений: 229
26.11.2014, 18:17  [ТС]
ой, уже нашла ответ на свой вопрос

Добавлено через 3 минуты
в чем может быть ошибка
Matlab M
1
s2=(A*cos(t*w1)*exp(t*w2*i+Phi));
?
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
26.11.2014, 20:57
Я ж говорю, забыла точку перед умножением:

s2 = A*cos(t*w1) .* exp(t*w2*i+Phi);
0
2 / 2 / 0
Регистрация: 28.09.2014
Сообщений: 229
27.11.2014, 10:57  [ТС]
Вот самое интересное, что все равно выдает ошибку!

Добавлено через 2 минуты
Вот часть кода где выдает ошибку
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
30
31
32
33
clear all; 
close all;
clc;
 
G=6.67384e-20;
M=5.9726e24;
F=50; 
Fs=160;  %! 
Ts=1/Fs;
Fc=1.6e9;
Tc=1/Fc;
A=1; 
R=6371;
h=1400;
c=3e8; 
 
    Speed=(G*M/(R+h))^(1/2);
    Fd=Fs/(1-Speed/c);
    t=(0:1/Fs:1); 
N=c/F;
n=1:N+1;%1132356
k=random('norm',0,n-1); % 'norm' or 'unif'
Phi=2*pi*k;
w1=2*pi*Fc;
f=Fc-Fd;
w2=2*pi*(Fc-Fd);
s1=A*cos(w1*t);
Signal1=s1;
s2=A*cos(w1*t).*exp(i*w2*t+Phi);
Signal2=s2;
 
x=Signal2+randn(size(t));
Signal3=x;
Добавлено через 2 минуты
в 29 строке умножаю на экспонент компонет, чтобы только провести изменение частоты и не вношу изменения в амплитуду сигнала.
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
27.11.2014, 11:41
ошибка в этом месте:
Matlab M
21
22
n=1:N+1;%1132356
k=random('norm',0,n-1); % 'norm' or 'unif'
n и соответственно k - это массивы из 6000001 элементов, а длинна t - 161, вот и несоответствие размерностей
поясни, что ты пытаешь тут сделать?
0
2 / 2 / 0
Регистрация: 28.09.2014
Сообщений: 229
27.11.2014, 11:46  [ТС]
Matlab M
1
2
3
4
n=1:N+1;
k=random('unif',0,n-1);
Phi=2*pi*k;
s2=(A*cos(2*pi*Fc*t)*exp(2*pi*(Fc-Fd)*t*i+Phi));
Я писала , что я умножаю свой сигнал на компл составляющую exp(2*pi*(Fc-Fd)*t*i+Phi), чтобы показать что сигнал подвергается влиянию доплеровского сдвига частоты. В литературе я нашла, вид этой компл составляющей. Она содержит фазу phi. Вот 1-3 строки описываю эту фазу как случайную величину.N длина сигнала.
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
27.11.2014, 12:59
я бы сделал так:

Matlab M
k = rand(size(t)); % или randn(size(t))
Phi=2*pi*k;
в этом случае все будет работать
1
2 / 2 / 0
Регистрация: 28.09.2014
Сообщений: 229
27.11.2014, 13:03  [ТС]
Да, я так и решила написать.

Добавлено через 1 минуту
Можете просмотреть программу.
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
clear all; 
close all;
clc;
 
G=6.67384e-20;
M=5.9726e24;
F=50; 
Fs=160;  %! 
Ts=1/Fs;
Fc=1.6e9;
Tc=1/Fc;
A=1; 
R=6371;
h=1400;
c=3e8; 
L=c*Ts;
 
    Speed=(G*M/(R+h))^(1/2);
    Fd=Fs/(1-Speed/c);
        
 
t=(0:1/Fs:1); 
 
k=random('norm',0,t); % 'norm' or 'unif'
 
Phi=2*pi*k;
w1=2*pi*Fc;
f=Fc-Fd;
w2=2*pi*(Fc-Fd);
 
 
s1=A*cos(w1*t);
Signal1=s1;
s2=A*cos(w1*t).*exp(i*w2*t+Phi);
Signal2=s2;
 
x=Signal2+randn(size(t));
Signal3=x;
 
 
NFFT = 2^nextpow2(length(s1)); 
FrequencyAxeFs=Fs/2*linspace(0,1,NFFT);
Spectr=(1/NFFT).*fft(Signal1, NFFT); 
SpectrSignalFs=abs(Spectr(1:NFFT));
PhaseSpectrFs=angle(fft(Signal3));
 
NFFT = 2^nextpow2(length(s1)); 
FrequencyAxeFd=Fd/2*linspace(0,1,NFFT);
Spectr=(1/NFFT).*fft(Signal3, NFFT); 
SpectrSignalFd=abs(Spectr(1:NFFT));
PhaseSpectrFd=angle(fft(Signal3));
 
 
plot(FrequencyAxeFs,SpectrSignalFs,'r') 
hold on
xlabel('Spectr of the signal');
ylabel('Frequency');
plot(SpectrSignalFd,FrequencyAxeFs);
xlabel('Spectr of the signal');
ylabel('Frequency');
 
 
figure
plot(SpectrSignalFs, fft(Signal3),'--or'), 
hold on
xlabel('PhaseSpectr of the signal');
ylabel('Frequency');
plot(FrequencyAxeFd, PhaseSpectrFd);
xlabel('PhaseSpectr of the signal');
ylabel('Frequency');
Матлаб не выдает ошибок и строит графики. Но вот графики странные.
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
28.11.2014, 13:48
загвоздка в том, что несущая частота очень большая, поэтому чтобы промоделировать сигналы в "реальном времени" нужно взять частоту дискретизации хотя бы в 10 раз больше. Это получается огроменное число отсчетов на один период информационного сигнала, которое непросто обработать, и еще труднее изобразить.
а еще я заметил несовпадение единиц измерения констант!
вот, что я набросал:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
clear all;
close all;
clc;
 
G=6.67384e-11; % м^3/(кг*c^2)
M=5.9726e24; % кг
F = 50; % чатсота сигнала, Гц
Fs = 30*F; % чатсота дискретизации сигнала
Fc = 1.6e9; % несущая, Гц
Tc = 1/Fc; % период несущей
A = 1; % амплитуда
R = 6371e3; % метры
h = 1400e3; % метры
c = 3e8; % м/с
%L=c*Tc;
 
Speed=(G*M/(R+h))^(1/2); % скорость спутника
 
K = 1/(1-Speed/c); % коэф-т изменения частоты
Fcd = Fc*K;
Fsd = Fs*K;
 
 
t = 0:1/Fs:3/F; % масив времени
 
k = 0.03*randn(size(t));
Phi=2*pi*k;
w1=2*pi*F;
 
s1=A*cos(w1*t); % сигнал
Signal1=s1;
s2=A*cos(w1*t + Phi); % добавили скачки фазы
Signal2=s2;
x=Signal2 + 0.03*randn(size(t)); % добавили скачки амплитуды
Signal3=x;
 
% спектр исходного сигнала:
N = 2^nextpow2(length(s1));
fff = Fc + Fs/2*linspace(-1,1,N);
Spectr1 = (1/N)*fft(Signal1,N);
ASp1 = abs( fftshift(Spectr1) );
PhSp1 = angle( fftshift(Spectr1) );
 
% спектр сигнала с учетом эффекта:
ffd = Fcd + Fsd/2*linspace(-1,1,N);
SpectrD = (1/N).*fft(Signal3, N);
ASpD = abs( fftshift(SpectrD) );
PhSpD = angle( fftshift(SpectrD) );
 
plot(fff,ASp1,'r', ffd,ASpD,'b' );
title('Spectr of the signal');
xlabel('Frequency');
legend('исходный сигнал','c учетом эффекта')
0
2 / 2 / 0
Регистрация: 28.09.2014
Сообщений: 229
28.11.2014, 14:57  [ТС]
Цитата Сообщение от Зосима Посмотреть сообщение
x=Signal2 + 0.03*randn(size(t)); % добавили скачки амплитуды
откуда появился коэффициет 0,03?
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
28.11.2014, 15:32
правило трех, отношение сигнал/шум и всё такое
0
2 / 2 / 0
Регистрация: 28.09.2014
Сообщений: 229
28.11.2014, 17:05  [ТС]
Извините меня, конечно. Но не могли бы Вы написать подробнее
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
28.11.2014, 17:50
попробую
Если использовать randn без коэф-та, то какой будет размах случайных чисел? эта функция генерирует нормальные случайные числа с единичной дисперсией σ=1, значит по правилу трех сигм большинство случайных чисел будут в диапазоне от -3 до 3. В тоже время наш сигнал имеет амплитуду 1 и меняется от -1 до 1. Теперь, если мы их просуммируем, то сигнал вообще потеряется в шумах!
Я взял коэф-т 0.03, чтобы диапазон значений шума был 0.03*3 = 0.09 ~ 0.1, т.е. он примерно в 10 раз меньше амплитуды сигнала
0
2 / 2 / 0
Регистрация: 28.09.2014
Сообщений: 229
02.12.2014, 13:33  [ТС]
Что значит "линейно уменьшать частотную развертку сигнала"?
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
03.12.2014, 09:48
точно не знаю, масштаб по частоте изменить, чтобы было лучше видно?
0
2 / 2 / 0
Регистрация: 28.09.2014
Сообщений: 229
03.12.2014, 10:47  [ТС]
Это я прочитала в статье про компенсацию эффекта доплера в спутниковой связи. Там пишут, что это один из методов уменьшения допплеровского сдвига и дают картинку. Что это может значить?
Миниатюры
Эффект Допплера и его компенсация  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2014, 10:47
Помогаю со студенческими работами здесь

Двухмерный массив и его вывод на экран после каждой итарации(эффект видео)
Есть двухмерный массив. Есть цикл в котором проводятся над ним преобразования, одно, два, 10, 100 преобразований, я часто манипулирую этой...

Как сделать эффект размытия (эффект стекла) в Xaml?
Как сделать эффект размытия(эффект стекла) в Xaml?

Компенсация? (многабукав)
Здравствуйте, уважаемые! У меня в жизни есть два любимых дела, прямо оооочень любимых - это программирование и кулинария. Начну со...

Компенсация от хостера
Добрый день. Недавно, после печального опыта использования дешевого "хостинга" (пишу в ковычках т.к. это было одно название, а не...

Компенсация за гараж
В случае ликвидации гаражного общества, что бы получить компенсацию за гараж, достаточно ли предоставить кадастрового паспорта на данный...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru