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

 
 
 
Reply to this topicStart new topic
qwa
сообщение Jun 29 2015, 12:31
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 8-02-15
Из: Санкт-Петербург
Пользователь №: 85 020



Всем доброго времени суток!

Есть такая задача: дан сигнал с частотой дискретизации A и надо преобразовать эту частоту дискретизации до значения B. Важный аспект здесь то, что изменяется частота дискретизации в нецелое число раз - то есть,сначала в L интерполируем, а потом в M децимируем.

Вопрос: существуют ли какие-нибудь методы,по которым можно найти такое оптимальное отношение L/M, что оно будет с некоторой точностью (3-4 знака после запятой) близко к отношению A/B?
Go to the top of the page
 
+Quote Post
_pv
сообщение Jun 29 2015, 14:32
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



Цитата(qwa @ Jun 29 2015, 19:31) *
Вопрос: существуют ли какие-нибудь методы,по которым можно найти такое оптимальное отношение L/M, что оно будет с некоторой точностью (3-4 знака после запятой) близко к отношению A/B?


http://codepad.org/KrCBN9zq
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jun 29 2015, 14:39
Сообщение #3


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



С помощью полиномиальной интерполяции вы можете поменять частоту отсчетов в любое, даже в иррациональное число раз.
Возможно это решение лучше подойдет для вашей задачи.
Go to the top of the page
 
+Quote Post
qwa
сообщение Jun 29 2015, 15:26
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 8-02-15
Из: Санкт-Петербург
Пользователь №: 85 020



Цитата(_pv @ Jun 29 2015, 17:32) *

Благодарю, уже тоже подумал о чем-то таком))

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

Цитата(Fat Robot @ Jun 29 2015, 17:39) *
С помощью полиномиальной интерполяции вы можете поменять частоту отсчетов в любое, даже в иррациональное число раз.
Возможно это решение лучше подойдет для вашей задачи.

Это ни к чему.
У меня есть конфигурируемые блоки, где я могу задать практически любой интересный для практики коэффициент интерполяции/децимации. Меня интересовал именно алгоритм нахождения L и M.
Go to the top of the page
 
+Quote Post
des00
сообщение Jun 29 2015, 15:40
Сообщение #5


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(qwa @ Jun 29 2015, 22:26) *
Меня интересовал именно алгоритм нахождения L и M.

если делать не автоматом, то в маткаде решается одним кликом мыша, в матлабе парой строк.


--------------------
Go to the top of the page
 
+Quote Post
andyp
сообщение Jun 29 2015, 20:07
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Курить про continued fraction (не знаю как это по русски) например в википедии. Есть итеративный алгортим, позволяющий представить любое число в виде многоэтажной дроби с приемлемой точностью. Потом остается только свернуть многоэтажную дробь в обычную. Так работает rat из matlab. Наверняка в octave есть код.
Go to the top of the page
 
+Quote Post
leeeeha
сообщение Jul 1 2015, 00:51
Сообщение #7





Группа: Новичок
Сообщений: 5
Регистрация: 11-07-12
Пользователь №: 72 705



Есть отличный алгоритм основанный на дереве Штерна-Броко. вот моя реализация.

Код
uint aim = 0.456;
uint guess;
uint max_denominator = 8192;
  uint item_1_p = 0;
  uint item_1_q = 1;
  uint item_2_p = 1;
  uint item_2_q = 2;
  uint item_3_p = 1;
  uint item_3_q = 1;

  while(1){

    guess = (double)item_2_p/ (double)item_2_q;

    if (aim<=guess) {
      item_3_p = item_2_p;
      item_3_q = item_2_q;
    } else{
      item_1_p = item_2_p;
      item_1_q = item_2_q;
    }
    if (item_1_q + item_3_q>max_denominator) break;

    item_2_p = item_1_p + item_3_p;
    item_2_q = item_1_q + item_3_q;
    
  }

По итогу в item_2_p и item_2_q хранятся числитель и знаменатель дроби минимально отличающейся от aim при заданном максимальном знаменателе. Изменяя значения item_1_p item_1_q item_3_p item_3_q задаём границы для поиска решения.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jul 1 2015, 07:09
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(qwa @ Jun 29 2015, 18:31) *
Вопрос: существуют ли какие-нибудь методы,по которым можно найти такое оптимальное отношение L/M, что оно будет с некоторой точностью (3-4 знака после запятой) близко к отношению A/B?

Если Вам нужно преобразовать A -> B, то наверное всё-таки B/A ?
Что значит "с некоторой точностью близко"? Самое близкое к B/A будет собственно B/A. Что мешает взять его?
Сократить числитель и знаменатель можно разложив их на простые сомножители.
Go to the top of the page
 
+Quote Post
Tiro
сообщение Jul 1 2015, 07:47
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 781
Регистрация: 3-10-04
Из: Санкт-Петербург
Пользователь №: 768



Цитата(jcxz @ Jul 1 2015, 10:09) *
Самое близкое к B/A будет собственно B/A. Что мешает взять его?
Сократить числитель и знаменатель можно разложив их на простые сомножители.

Разложите 137/67 biggrin.gif
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 02:05
Рейтинг@Mail.ru


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