frequency mesurement of a square wave
    8 views (last 30 days)
  
       Show older comments
    
hi I want to to measure the frequency of a square wave with simulink , do anybody know how to do this? thanks
0 Comments
Accepted Answer
  Image Analyst
      
      
 on 22 Feb 2015
        
      Edited: Image Analyst
      
      
 on 22 Feb 2015
  
      I don't have Simulink but I think you can use a MATLAB block in it where you run MATLAB code. If so, then just threshold the signal and use find()
signal = [0 0 6 6 6 0 0 6 6 6 0 0 6 6 6 0 0]
halfMaxValue = 0.5 * (min(signal) + max(signal)) % Halfway between 0 and 6.
highSignals = signal > halfMaxValue
diffSignal = [0 diff(highSignals)]
diffSignalIndexes = find(diffSignal == 1)
period = diffSignalIndexes(2) - diffSignalIndexes(1) % Distance between first two pulses.
In the command window:
halfMaxValue =
     3
highSignals =
     0     0     1     1     1     0     0     1     1     1     0     0     1     1     1     0     0
diffSignal =
     0     0     1     0     0    -1     0     1     0     0    -1     0     1     0     0    -1     0
diffSignalIndexes =
     3     8    13
period =
     5
9 Comments
  Image Analyst
      
      
 on 24 Feb 2015
				Your signal doesn't quite look right. The plot seems to show it going high around element 43 or 44 but your signal variable shows it going up around element 42.
More Answers (1)
  MoeIsKing
 on 24 Jun 2018
        
      Edited: Image Analyst
      
      
 on 24 Jun 2018
  
      If i run:
highSignals = signal > halfMaxValue
over my signal i get:
"Error using horzcat
Dimensions of arrays being concatenated are not consistent."
What did i wrong? My "highSignals" type is "2002x1 logical" after I run:
highSignals = volts > halfMaxValue ;
halfMaxValue is 12 and volts comes from a scope (light bar) and is imported as csv into "2002x1 double"
1 Comment
  Image Analyst
      
      
 on 24 Jun 2018
				It looks OK to me. What I don't understand is how you could execute the line to create highSignals successfully as a 2002 by 1 vector, and yet still have an error thrown? In my experience if an error is thrown, you will not get the result put into the output variable. Can you explain that? Exactly what line of code are you executing when the error is thrown?
See Also
Categories
				Find more on Discontinuities in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


