Как я уже говорил в своем комментарии, вы, скорее всего, пытаетесь прочитать в многоканальном аудиофайле, и в этом случае wavread
, скорее всего, вернет массив NxM
, где N
- это числоsamples и M
- количество каналов.Не могли бы вы опубликовать вывод size(x)
, где x
- это вывод wavread
?
В зависимости от того, что вы хотите сделать, вы можете либо усреднить по каналам, чтобы получить один аудио вектор (как моно) как xAvg=mean(x,2);
, или вы можете выбрать конкретный канал для работы, например xChannelK=x(:,k);
, где 1<=k<=M
- выбранный канал.
В ответ на ваш комментарий выше по поводу заполнения нулями, помнитечто в операции свертки между точечным n
и точечным m
точечным выходом вы получите m+n-1
.Скажем, вы хотите свернуть A=[a1,a2,a3]
и B=[b1,b2,b3]
.Сначала вы переворачиваете один из векторов и перемещаете его по другому, одновременно умножая по точкам и добавляя результат на каждом шаге.
Однако, когда вы переворачиваете его, второй вектор торчит в пространстве последовательностей в точках, где другая функция не определена (и наоборот).Поэтому вам нужно дополнить их нулями, пока они не станут одинаковой длины.
Это лучше показать на примере.Первая точка в выводе -
0 0 a1 a2 a3
b3 b2 b1 0 0
--------------------
0 + 0 + a1b1 + 0 + 0
--------------------
= a1b1
Здесь мы добавили A
и B
нулями в точках, где другая не определена.Вторая точка на выходе -
0 a1 a2 a3 0
b3 b2 b1 0 0
-----------------------
0 + a1b2 + a2b1 + 0 + 0
-----------------------
= a1b2+a2b1
и так далее.Вы должны прочитать статью вики о свертке для получения дополнительной информации.Тем не менее, вам не нужно делать это вручную.MATLAB conv
автоматически сделает это за вас.Так что все, что вам нужно сделать, это привести свои векторы в порядок, и все готово.