реклама на сайте
подробности

 
 
> передискретизация, как?
TigerSHARC
сообщение Feb 22 2010, 16:22
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Здравствуйте.
Есть сигнал:

Fs = 6400;
N = 128;
Ts = 1/Fs;
T = Ts*N;
f = 45;
t = 0:Ts:T-Ts;
A = 10;
Y = A*sin(2*pi*f*t)+ A*sin(2*pi*2*f*t)+ A*sin(2*pi*3*f*t);

как и какой функцией в MATLAB пересчитать частоту дискретизации с 6400 на 5760.
Причём с тем же числом отсчётов (128).

Это нужно для корректировки спектра сигнала.
Дело в том, что когда меняю частоту "руками":

Fs = 5760;
N = 128;
Ts = 1/Fs;
T = Ts*N;
f = 45;
t = 0:Ts:T-Ts;
A = 10;
df = Fs/N;
f1 = 0:df:Fs-(Fs/N);
Y = A*sin(2*pi*f*t)+ A*sin(2*pi*2*f*t)+ A*sin(2*pi*3*f*t);
X = fft(Y)/length(t);
>> stem(f1, abs(X)), grid

получается красивый спектр, отражающий верную информацию об амплитудах сигнала.
Пробовал для передискреизации функцию resample, но она выдаёт меньшее число отсчётов и спектр искажён...

да и вообще, не толкьо в MATLAB, как из 128 отсчётов получается 128 передискретизированных отсчётов... полюбому время выборки должно как-то варьироваться...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
TigerSHARC
сообщение Feb 25 2010, 10:53
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 688
Регистрация: 4-09-09
Пользователь №: 52 195



Всё теперь стало ясно.
Объясняю суть проблемы. необходимо узнать все гармоники , которые можно полусчить с частотой дискретизации 6400. Гармоники кратны основной частоте (которая меняется от 42.5 до 57.5). Я подаю всего лишь три - такак это просто модель, что бы суть пока уловить.
Дело вот в чём - раньше я полагал, что выборка должна быть фиксирована по количеству отсчётов (жестко 128 например). Теперь понятно что происходит так :
1) Получаем частоту (fосн.), по некоторому алгоритму (давайте договоримся что частота известна с абсолютной точностью, так как частотный алгоритм - это отдельный разговор).
2) затем интерполятор на основе данных о частоте забирает выборку АЦП из кольцевого буфера (о буфере ниже). Причём забирает столько выборок сколько ему надо (в зависимости от частоты сигнала) - если частота изменяется от 42.5 до 57.5, то кол выборок может быть от 111 до 150.
3) Затем интерполятор выдаёт ровно 128 выборок (всегда!) на новой частоте дискретизации равной 128*fосн.
4) по этим выборкам получаем спектр.
_____________________________________

КОЛЬЦЕВОЙ БУФЕР

теперь главный вопрос:

Данные с АЦП поступают в кольцевой буфер. Буфер заполняется постоянно со скоростью, которая зависит от периода дискретизации (в моём случае 1/6400).
Допустим частота сигнала найдена и равна 43Гц. Интерполятору требуется 148 выборок для данного временного окна и он забирает первые 148 выборок из буфера, 149 выборка уже является первой для следующего временного окна, потом частота изменилась и скажем равна 45 Гц, тогда интерполятор берёт по 142 выборки на временное окно и так далее...
Кольцевой буфер должен быть такого размера что бы хранит предысторию сигнала за некоторое время и должен выдавать её при запросе.
Буфер заполняется постоянно и циклически. так вот проблема в том что скорее всего буфер заполняется быстрее, чем выборки извлекаются из него. Получается что, какого бы размера не был буфер, рано или поздно вершина буфера настигнет его хвост(где храняться полезные данные)...

как этого избежать при работе с кольцевым буфером.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- TigerSHARC   передискретизация   Feb 22 2010, 16:22
- - Andron_   Цитатакак и какой функцией в MATLAB пересчитать ча...   Feb 22 2010, 16:59
|- - bahurin   Передискретизацию можно выполнить на основе интерп...   Feb 22 2010, 17:10
- - TigerSHARC   с точки зрения такой науки как численные методы во...   Feb 22 2010, 17:11
|- - bahurin   Цитата(TigerSHARC @ Feb 22 2010, 20:11) P...   Feb 22 2010, 17:16
|- - TigerSHARC   Цитата(bahurin @ Feb 22 2010, 20:16) В шт...   Feb 22 2010, 17:42
|- - bahurin   Цитата(TigerSHARC @ Feb 22 2010, 20:34) н...   Feb 22 2010, 17:42
- - Andron_   чтобы число отсчетов осталось тем же, нужна экстра...   Feb 22 2010, 17:19
- - TigerSHARC   тогда так. 1) при интерполяции всегда используется...   Feb 22 2010, 17:23
|- - bahurin   Цитата(TigerSHARC @ Feb 22 2010, 20:23) к...   Feb 22 2010, 17:33
|- - TigerSHARC   Цитата(bahurin @ Feb 22 2010, 20:33) Если...   Feb 22 2010, 18:00
||- - bahurin   Цитата(TigerSHARC @ Feb 22 2010, 21:00) Н...   Feb 22 2010, 18:07
||- - TigerSHARC   Цитата(bahurin @ Feb 22 2010, 21:07) став...   Feb 23 2010, 13:12
|- - megajohn   Цитата(bahurin @ Feb 22 2010, 21:33) Если...   May 30 2013, 13:04
- - Andron_   это что-то нереальное... сдайте дилера, я тоже хо...   Feb 23 2010, 16:38
- - TigerSHARC   Здаётся мне у меня какие-то принципиальные затрудн...   Feb 23 2010, 18:29
- - Andron_   вы не можете его "поджать" под временное...   Feb 23 2010, 18:49
|- - TigerSHARC   Цитата(Andron_ @ Feb 23 2010, 21:49) вы н...   Feb 23 2010, 18:58
- - Andron_   тью... "вон оно че, Михалыч"... тогда, ...   Feb 23 2010, 19:15
|- - TigerSHARC   Цитата(Andron_ @ Feb 23 2010, 22:15) тью....   Feb 23 2010, 19:40
- - leksa   Здравствуйте! Может быть вот такой вариант Вас...   Feb 23 2010, 21:07
- - TigerSHARC   на самом деле нужно просто передискретизировать си...   Feb 23 2010, 21:28
|- - leksa   Цитата(TigerSHARC @ Feb 24 2010, 00:28) н...   Feb 23 2010, 21:35
- - leksa   За код - пожалуйста, тем более это ваш код в общем...   Feb 23 2010, 22:41
- - Andron_   Цитатаresample не канает((( пример Fs = 6400; N ...   Feb 24 2010, 02:14
- - Andron_   только в коде нужно сначала передискретизацию сдел...   Feb 24 2010, 03:52
- - TigerSHARC   дело в том что нужно обеспечить отсутсвтие растека...   Feb 24 2010, 10:09
- - TigerSHARC   Или получилось из пустого в порожнее? по сути прос...   Feb 24 2010, 11:43
|- - SPACUM   Реализуется с помощью фарроу-фильтра. [/quote] А...   Feb 24 2010, 14:09
- - TigerSHARC   Да, то что у меня получилось выше просто вырезает ...   Feb 24 2010, 15:07
- - leksa   Я прочитал документ по ссылке. Из того что вы писа...   Feb 24 2010, 15:36
- - TigerSHARC   Уважаемый, leksa, если вы поняли суть алгоритма - ...   Feb 24 2010, 16:32
- - TigerSHARC   Уважаемый, leksa, если вы поняли суть алгоритма - ...   Feb 24 2010, 16:36
- - thermit   Дык, пауз во времени и не будет. Меняться будет чи...   Feb 24 2010, 16:40
|- - TigerSHARC   Цитата(thermit @ Feb 24 2010, 19:40) Дык,...   Feb 24 2010, 16:58
- - TigerSHARC   Вобщем, прошу подсказать как сделать адаптивное вр...   Feb 24 2010, 18:22
- - leksa   TigerSHARC Извините, но мне все-таки не до конца я...   Feb 24 2010, 20:25
- - Andron_   ЦитатаПолучается что, какого бы размера не был буф...   Feb 25 2010, 11:52
- - thermit   ЦитатаTigerSHARC: уфер заполняется постоянно и цик...   Feb 25 2010, 12:09
- - TigerSHARC   ... а если делать так: брать данные из буфера и вы...   Feb 25 2010, 12:39
- - thermit   Если ориетироваться на число отсчетов связанное с ...   Feb 25 2010, 12:47
|- - TigerSHARC   Цитата(thermit @ Feb 25 2010, 15:47) Если...   Feb 25 2010, 12:54
- - thermit   ЦитатаТогда ждём пока не будет нужного количесвта ...   Feb 25 2010, 12:59
- - TigerSHARC   Подведём итог в теме. Предисркретизация осужествля...   Feb 25 2010, 19:17
- - Евгений Николаев   1. Время обработки всегда примерно одинаково, т.к....   Feb 26 2010, 15:37
- - TigerSHARC   Да, нужно ещё учесть что планируется хранение пред...   Feb 26 2010, 17:07
- - megajohn   хоть тема и древняя, но нужная всегда. В аттаче пр...   May 30 2013, 15:42


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th August 2025 - 11:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01358 секунд с 7
ELECTRONIX ©2004-2016