Matlab — Генератор тонов

Я пытаюсь сгенерировать через Matlab тон DTMF, используя функцию по умолчанию, для кнопки 5, скажем, безуспешно. Код:

button5= sin(0.5906*n)+sin(1.0247*n); This line of code is obligated. 

n=linspace (-1, 1, 1000);
Fs = 8192;
button5 = sin(0.5906*n)+sin(1.0247*n);
sound(button5, Fs);

Не могли бы вы посоветовать по поводу?

Чтобы лучше объяснить:

  1. Это табличная матрица для кнопки, а общий код для кнопки 5: d5[n] = sin(0,5906n) + sin(1,0247n)

введите здесь описание изображения


person Nikolaos Maliganis    schedule 01.03.2016    source источник
comment
Почему вы говорите, что эта линия неверна?   -  person dubafek    schedule 02.03.2016
comment
К чему вы часто стремитесь? Кажется, что он генерирует тон намного ниже человеческого диапазона.   -  person Daniel    schedule 02.03.2016
comment
@Daniel С частотой все в порядке, в данном случае нужны 770 Гц и 1336 Гц. Я также тестирую это в Matlab, и это звучит.   -  person dubafek    schedule 02.03.2016
comment
@dubafek: Определенно нет, ниже 1 Гц. Просто постройте сигнал, чтобы увидеть, что он меньше одного цикла.   -  person Daniel    schedule 02.03.2016
comment
@Daniel На самом деле проблема в том, что это меньше одного цикла, но это не связано с частотой, вы должны учитывать частоту дискретизации. Проблема во времени, вектор n должен быть длиннее.   -  person dubafek    schedule 02.03.2016
comment
Есть еще одна проблема с вашим кодом. Упрощая до одной частоты, при 1000 выборках частота 1336 дискретизированный сигнал должен содержать 163 периода. Моя проблема с ответом на этот вопрос заключается в том, что я понятия не имею, как работает DTMF, и я понятия не имею, откуда берется первая строка.   -  person Daniel    schedule 02.03.2016
comment
Тем не менее нет тонального звука. Первая строка обязательна. Какой должна быть остальная часть кода, чтобы услышать это?   -  person Nikolaos Maliganis    schedule 02.03.2016
comment
Что такое омега? Должно же быть какое-то объяснение! Маленькая омега обычно используется для обозначения угловой частоты, но я никогда не видел заглавную омегу в этом контексте.   -  person Daniel    schedule 02.03.2016


Ответы (2)


Попробовав несколько комбинаций чисел, я понял, что Ω — это предварительно вычисленное 2*pi*f/FS, где f — частота.

Вот вариант, просто переписывающий ответ от dubafek с заменой некоторых переменных:

f=[770 1336];
Fs = 8192;
n = [0:10000];
omega=2.*pi.*f./Fs;
button5 = sin(omega(1)*n)+sin(omega(2)*n);
button5=button5/max(button5(:));
sound(button5, Fs);

Что, замена омеги константами приводит к:

Fs = 8192;
n = [0:10000];
button5 = sin(0.5906*n)+sin(1.0247*n);
button5=button5/max(button5(:));
sound(button5, Fs);

Незначительные различия в результате связаны с тем, что постоянная омега во втором случае округляется до четырех цифр. Теперь, имея решение, я понимаю, что в вашем вопросе отсутствовала только простая информация, n - это вектор, содержащий натуральные числа.

person Daniel    schedule 02.03.2016

Я немного запутался в вашем коде, потому что предпочитаю излагать его по-другому. Как говорит @Daniel, проблема заключается в использовании 1000 выборок для нормализации частоты.

Этот код должен работать:

Fs = 8192;
n = [0:10000];
t = n/Fs;
button5 = sin(2*pi*770*t)+sin(2*pi*1336*t);
sound(button5/max(button5) ,Fs)
person dubafek    schedule 01.03.2016
comment
Вы забыли нормализовать. Используя sound(button5/max(button5),Fs), я не заметил никакой разницы с опорным сигналом (выберите число и нажмите Wählen) - person Daniel; 02.03.2016
comment
Вам нужно добавить первую строку моего поста инициализации. Это обязательно. Этот код работает, но обычно у меня нет частот. У меня Ом. - person Nikolaos Maliganis; 02.03.2016
comment
Ему не нужно ничего делать для вас. Вы можете просить, но не требуйте ничего! Он проделал хорошую работу, как-то разобравшись в вашем неясном и неполном вопросе, и дал хороший ответ. Объясните математику, стоящую за этими магическими числами, и объясните, что такое омега, и вы можете получить улучшенный ответ. - person Daniel; 02.03.2016
comment
Еще раз любезно. Я только что изменил начальный пост, как упоминал @Daniel, для дальнейшего объяснения. Моя проблема в том, что я вынужден использовать в своем коде отредактированную выше табличную матрицу вместо 770 и 1336 и 2*pi*f соответственно, чтобы они были более понятны для всех нас. Эти значения в матричной таблице тоже кажутся мне магическими, однако у меня есть ограничение на их использование. Итак, для 1000 выборок и для функции d5[n] = sin(0,5906n) + sin(1,0247n) для кнопки 5 какой должна быть последовательность кодовых команд? - person Nikolaos Maliganis; 02.03.2016