На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD, nsh
  
> Сжатие речи на основе метода линейного предсказания в MATLAB
    Не могу никак придумать работоспособную программу. :no-sad: Помогите пожалуйста :'(
    Сообщение отредактировано: nsh -
      Шансы на конструктивый диалог на форуме повышают следующие факторы:

      1) Соблюдения правил орфографии при написании сообщений

      2) Подробное описание задачи, описание того, что было сделано.

      3) Примеры написанного кода, пусть даже пока не работающего.
        Цитата nordens @
        Не могу никак придумать работоспособную программу. :no-sad: Помогите пожалуйста :'(

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

        ExpandedWrap disabled
          clc
          clear
           
          [x_ish,Fs,bits]=wavread('test.wav'); % загрузка файла
          % x_ish – вектор отсчетов исходного сигнала
          % Fs - частота дискретизации
          % bits - количество бит на один отсчет сигнала
           
          N=1000;% длина окна анализа (задается самостоятельно)
          n1=11000; %нижняя граница отрезка анализа (задается самостоятельно)
          n2=n1+N-1; % верхняя граница отрезка анализа
          X1=x_ish(n1:n2); % отрезок сигнала, соответствующий звуку
          M=sum(X1)/N;
           
          p=595;
           
          for pp=1:p
           
          for k=0:p
              s=0;
              for m=1:(N-k)
                  s=s+(X1(m)-M)*(X1(m+k)-M);
              end
              RR(k+1)=s;
          end
          clear k s m
           
          for k=1:(p+1)
              R(k)=RR(k)/RR(1);
          end
          clear k RR
           
          E(1)=R(1);
          ka(1)=R(2)/E(1);
          al(1,1)=ka(1);
           
          for i=2:p
              E(i)=(1-ka(i-1)^2)*E(i-1);
              s=0;
              for j=1:(i-1)
                  s=s+al(i-1,j)*R(i-j+1);
              end
              ka(i)=(R(i+1)-s)/E(i);
              al(i,i)=ka(i);
              for j=(i-1):-1:1
                  al(i,j)=al(i-1,j)-ka(i)*al(i-1,i-j);
              end
          end
          clear E i s j ka
           
          for i=1:p
              alpha(i)=al(p,i);
          end
          clear i al
           
           
          B=0;
          for n=(pp+1):N
              A=0;
              for k=1:pp
                  A=A+alpha(k)*(X1(n-k)-M);
              end
              B=B+((X1(n)-M)-A)^2;
          end
          eta(pp)=(1/(N-pp))*B;
           
          end;
          ppp = [1:p];
           
          figure(1)
          plot(ppp,eta);
          xlabel('порядок модели')
          ylabel('дисперсия')
           
          MAX=max(X1);
          noise=MAX*randn(1,N);
           
          xv(1:p)=X1(1:p);
          for i=p+1:N
              s=0;
              for k=1:p
                  s=s+alpha(k)*(xv(i-k)-M);
              end
              xv(i)=s+eta(p)*noise(i)+M;
          end
           
          figure(2)
          plot([1:N],X1,[1:N],xv)
          xlabel('samples')
          ylabel('amplitude')
        Сообщение отредактировано: nsh -
          Простой сжатия звука на основе линейного предсказания такой:

          1) Звук разбивается на окна

          2) Для каждого окна считаются коэффициенты линейного предсказания (13) и ошибка линейного предсказания (256)

          3) Коэффициенты записываются как есть, значения ошибки сжимаются с помощью обычного архиватора (gzip). Из-за того, что ошибка носит случайный характер, такое сжатие эффективно. Вместо архиватора можно применять квантизацию, например, представлять каждое значение с помощью 8 бит.

          В результате получается сильно сжатый звук. Для декомпрессии

          4) Ошибка распаковывается

          5) По коэффициентам линейного предсказания и ошибке восстанавливается сигнал

          6) Окна склеиваются с наложением

          В вашем коде есть только 2) и 5). Для реализации нужно хотя бы на окна сигнал разбить.

          Простой полный код кодека можно найти здесь: http://www.mathworks.com/matlabcentral/fil...9038-celp-codec

          Добавлено
          Вот ещё тут можно скачать попроще реализацию и с объяснениями

          http://my.fit.edu/~vkepuska/ece5525/Projec...ech%20final.zip
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0192 ]   [ 15 queries used ]   [ Generated: 2.05.24, 12:24 GMT ]