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

Я пытаюсь экспортировать данные, показанные на графике (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')

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


person Rick T    schedule 20.03.2012    source источник


Ответы (1)


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

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

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

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

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

person yuk    schedule 20.03.2012