Получение ошибки измерения матрицы при модуляции формы звукового сигнала на matlab - PullRequest
0 голосов
/ 26 апреля 2018

Я получаю ошибку размера матрицы для следующего кода. То, что я пытаюсь сделать ниже, это модуляция звукового сигнала, но я не смог пройти мимо указанной мной ошибки. Я проверил длину файла sample.wav и скорректировал временную ось (t) соответственно, но я, должно быть, сделал что-то не так. Я ценю, если кто-нибудь может помочь. Заранее спасибо!

 function [sm]= modulation(ss,fc,mtype)
ss= audioread('C:\Users\furka\Documents\MATLAB\sample.wav');     %audio waveform to be modulated is loaded.
plot(ss)
length(ss)
t=linspace(0,3e6,3161538);
fc= input('Carrier Frequency=');            %carrier frequency will be determined by the user


mtype= menu('Modulation type?','dsb','dsbsc','ssb','fm');           %modulation type will be determined by the user
%fs=44100;                                   %sampling frequency is determined for common audio waveform.(44.1kHz)
%t= 0:1/fs:(2e-5)-1/fs;

if mtype==1 
    ka= 0.7;
    sm= ss.*(1+ka*cos(2*pi*fc*t));
    plot(t,sm)

    elseif mtype==2                         %if doublesideband suppress carrier is selected the statements below will be carried out.

    y = ss.*cos(2*pi*fc*t);
    plot(y)
    % sm = fftshift(fft(abs(y)));
  %  frequency_axis= (-fs/2):(fs/length(sm)):(fs/2-fs/length(sm));
    %plot(frequency_axis,sm)

    elseif mtype==3
    sm=0.5*[ss.*cos(2*pi*fc*t)-hilbert(ss).*sin(2*pi*fc*t)];
    plot(t,sm)

    elseif mtype==4
     kf=0.7;            %frequency sensitivity.
    sm= cos(2*pi*fc*t+2*pi*kf*int(ss,t,0,t));
    plot(t,sm)
end
end

1 Ответ

0 голосов
/ 26 апреля 2018

Я не могу получить доступ к ссылке, предоставленной для звукового файла, но длительность 3-6 секунд кажется очень длинным звуком. Я полагаю, это что-то около 30 дней.

Используя пример handel.mat, предоставленный MathWorks, я получаю это.

load handel.mat
audiowrite('sample.wav', y, Fs);
[ss, Fs] = audioread('sample.wav');

t = linspace(0, length(ss) / Fs, length(ss));
t = t'; % this is important to match ss <-- this is your matrix dimension error I think
fc = 2000;
ka = 0.7
sm = ss .* (1 + ka * cos(2 * pi * fc * t));

Ошибка несоответствующих размеров возникает из-за того, что linspace - это вектор строки, а audioread - как вектор столбца. Транспонировать одно или другое. В моем случае: t = t'

...