Интерполяция / создание новой длины / шкалы времени сигнала / массива - PullRequest
0 голосов
/ 20 марта 2012

Я пытаюсь экспортировать данные, показанные на графике (yi), с помощью wavwrite. Когда я делаю интерполяцию, сигнал (yi) не начинается с нуля, как я могу получить (yi) интерполированный сигнал, чтобы начать с нуля? Обратите внимание, что я не могу просто сделать сюжет (xxorig, yi) из-за того, что wavwrite не работает таким образом. Кто-нибудь знает работу вокруг?

Я использую октаву 3.2.4 / matlab

clear all, clf
xxorig=[0, 0.418879, 0.837758, 1.25664, 1.67552, 2.0944, 2.51327, 2.93215, 3.35103, 3.76991, 4.18879, 4.60767, 5.02655, 5.44543, 5.86431, 6.28319];
xx=[0, 0.296192, 0.592384, 0.888577, 1.18477, 1.48096, 1.77715, 2.07335, 2.36954, 2.66573, 2.96192, 3.25811, 3.55431, 3.8505, 4.14669, 4.44288];
yy=[0, 0.406737, 0.743145, 0.951057, 0.994522, 0.866025, 0.587785, 0.207912, -0.207912, -0.587785, -0.866025, -0.994522, -0.951057, -0.743145, -0.406737, -2.44929e-16];

yi=interp1(xx,yy,xxorig);
subplot(4,1,1),plot(xxorig,yy),title("plot(xxorig,yy)")
subplot(4,1,2),plot(xx,yy),title("plot(xx,yy)")
subplot(4,1,3),plot(yy),title("plot(yy)")
subplot(4,1,4),plot(yi),title("plot(yi)")
wavwrite([yy'] ,16,32,'/tmp/test.wav')

enter image description here

1 Ответ

0 голосов
/ 20 марта 2012

Непонятно, что вы пытаетесь экспортировать - звуковой или звуковой файл wav сигнала?

Вы используете WAVWRITE для сохранения звука в формате WAVE.В этом случае вы передаете интенсивность сигнала yi и опционально частоту дискретизации (частота по умолчанию составляет 8000 Гц).Вам не важно, что ваш сигнал не начинается с 0.

Я полагаю, что вы можете рассчитать частоту дискретизации для yi как

Fs = numel(xxorig)/(xxorig(end)-xxorig(1));

Если вы хотите PLOT сигнал, который вы указываете время по оси X.Если вы не передаете x в функцию plot, она использует только порядковые номера, начиная с 1. Поэтому ваша кривая plot(yi) или plot(yy) не начинается с 0.

...